Closing Connections on asynchronous messaging in JMS
- by The Elite Gentleman
Hi Everyone!
I have created a JMS wrapper (similar to Springs JmsTemplate since I'm not using Springs) and I was wondering: If I setup asynchronous messaging, when is a good time to close connections and JMS relates resources (so that the Connection Factory in the Resource Pool can be available)?
Thanks
Here's the source code for receiving JMS messages
public Message receive() throws JMSException {
QueueConnection connection = null;
QueueSession session = null;
QueueReceiver consumer = null;
try {
// TODO Auto-generated method stub
connection = factory.createQueueConnection();
if (connection != null && getExceptionListener() != null) {
connection.setExceptionListener(getExceptionListener());
}
session = connection.createQueueSession(isSessionTransacted(), getAcknowledgeMode());
consumer = session.createReceiver(queue);
if (getMessageListener() != null) {
consumer.setMessageListener(getMessageListener());
}
//Begin
connection.start();
if (getMessageListener() == null) {
return null;
}
return receive(session, consumer);
} catch (JMSException e) {
// TODO: handle exception
logger.error(e.getLocalizedMessage(), e);
throw e;
} finally {
JMSUtil.closeMessageConsumer(consumer);
JMSUtil.closeSession(session, false); //false = don't commit.
JMSUtil.closeConnection(connection, true); //true = stop before close.
}
As you can see, if getMessageListener() != null then apply it to the MessageConsumer. Am I doing this correctly?
The same approach has also been taken for JMS Topic.