You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by paoletto <pa...@gmail.com> on 2008/04/09 12:17:43 UTC
Sending message from EJB3: poor performances after a while
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.
Re: Sending message from EJB3: poor performances after a while
Posted by James Strachan <ja...@gmail.com>.
See http://activemq.apache.org/how-do-i-use-jms-efficiently.html
On 09/04/2008, James Strachan <ja...@gmail.com> wrote:
> You are not using your J2EE providers JMS proxy to cache things; you
> are using vanilla JMS.
>
> So try using the PooledConnectionFactory from ActiveMQ instead.
>
>
>
> On 09/04/2008, paoletto <pa...@gmail.com> wrote:
> >
> > 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.
> >
> >
>
>
>
> --
> James
> -------
> http://macstrac.blogspot.com/
>
> Open Source Integration
> http://open.iona.com
>
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com
Re: Sending message from EJB3: poor performances after a while
Posted by James Strachan <ja...@gmail.com>.
You are not using your J2EE providers JMS proxy to cache things; you
are using vanilla JMS.
So try using the PooledConnectionFactory from ActiveMQ instead.
On 09/04/2008, paoletto <pa...@gmail.com> wrote:
>
> 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.
>
>
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com