activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paoletto <paole...@gmail.com>
Subject Sending message from EJB3: poor performances after a while
Date Wed, 09 Apr 2008 10:17:43 GMT

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.


Mime
View raw message