Hi Filip,

basically connections can be kept open as long as you like. They are also thread safe. For connections there is the problem that they can become invalid if the server goes away for too long. Sessions can also be kept open but they are not thread safe. So make sure you do not share a session between threads.

I suggest that you take a look at the spring jms abstractions. They help with a lot of the problems you may have.
The keywords you need JmsTemplate, DefaultMessageListenerContainer.

Be careful though. The spring jmstemplate always closes the connection after a request. So you have to use a pooling connection factory. Application servers sometimes provide these. When doing a standalone application you may want to wrap the connection factory in a spring CachingConnectionFactory.

Frameworks like Camel and CXF use this aproach as it makes life a lot easier than working with JMS directly.

If your focus is on simply sending and receiving your objects in a really easy way you might even want to use Apache Camel.
http://camel.apache.org/jms.html
http://camel.apache.org/pojo-messaging-example.html
Messaging can“t be easier than with camel and it embeds nicely in your application.

Best regards

Christian


Am 04.03.2011 18:07, schrieb Filip Nguyen:
I am using ActiveMQ and I am reading Java Message Service document which specifies the JMS JSR. However I cant find anywhere what are the best practices for Connection length. From the JMS JSR I understand that:

Connection is Heavy weight object as JMS JSR suggests. So its ok to create it at start of the application and release it just before application closes

Going further the Session is supposed to be lightweight object so there should be no problem to create it more often. Butas indicated here: http://activemq.2283324.n4.nabble.com/receiveNoWait-problem-td2347600.html there is James.Strachan suggests to use 1 consumer for whole application to aovid receivenowait problems.

My questions are (assuming I want to avoid requestNoWait problems and i dont want to call receive(1000)):

1. How long should connection be opened (after calling start()) and are there
     any problems with having it opened for a long long time?
2. How long should one Session be opened? (this relates to MessageConsumer
     because I assume the consumer needs to have session opened).

Filip Nguyen


--
----
http://www.liquid-reality.de

Reply via email to