i wrote the following Stateless Session Bean, and ran in a j2ee application
on jbossAS.

With the following implementation i have the problem that, if for example i
put the send in a for
to send 1000 messages (invocations) in a row, after about 200-250 the sender
start to slow down and at
about 300th message, it start to take 3-4 minute to send 1 single message.
then i have to stop the AS,
cause JVM goes to 100% load and the for cycle does not end.

i dont know what i did wrong here..
But what i can say is that if every time i also create a new
ActiveMQConnectionFactory, everything
slowes down quite much, but it does not suffer from the problem before (that
means, poor but constant performances)

any clue? 






@Stateless
public class JmsFrontendBean  implements JmsFrontendRemote,JmsFrontendLocal
{
        public static final String RemoteJNDIName = 
JmsFrontendBean.class.getSimpleName() + "/remote";
        public static final String LocalJNDIName = 
JmsFrontendBean.class.getSimpleName() + "/local";
 
//      private Context ctx = null;
        ActiveMQConnectionFactory connectionFactory = null;
 
        @PostConstruct
        private void postConstruct() {
                try {
                        connectionFactory = new 
ActiveMQConnectionFactory("vm://localhost");
                        connectionFactory.setOptimizeAcknowledge(true);
                        connectionFactory.setUseAsyncSend(true);
                        connectionFactory.setAlwaysSessionAsync(true);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
 
        @WebMethod
     public void sendInvocation(InvocationRequest ir) {
 
        try {
            // Create a Connection
            Connection connection = connectionFactory.createConnection();
            connection.start();
 
            // Create a Session
            Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
 
            // Create the destination (Topic or Queue)
            Destination destination =
session.createQueue("queue."+ir.getQdest());
 
            // Create a MessageProducer from the Session to the Topic or
Queue
            MessageProducer producer = session.createProducer(destination);
            //producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
            // Create a messages
            JmsPayload payload = new JmsPayload();
 
            String dataString = ir.getService() + "/" + ir.getMethod() + "?"
+ ir.getParam();
            payload.setDataString(dataString);
 
            if (ir.getFileAttachments()  != null) {
                for (int i = 0; i < ir.getFileAttachments().length; i++) {
                        String url = ir.getFileAttachments()[i];
                        Attachment a = getAttachment(url);
                        if (a != null) payload.addAttachment(a);
                }
            }
 
            ObjectMessage objmessage = session.createObjectMessage(payload);
 
            // Tell the producer to send the message
            System.out.println("Sending message to: " + ir.getQdest() + "
with values: "+dataString);
            producer.send(objmessage);
 
            // Clean up
            producer.close();
            session.close();
            connection.stop();
            connection.close();
        } catch (Exception e) {
            System.out.println("Caught: " + e);
            e.printStackTrace();
        }
    }
-- 
View this message in context: 
http://www.nabble.com/Sending-message-from-EJB3%3A-poor-performances-after-a-while-tp16583813s2354p16583813.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to