This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
I have some conceptual doubt with the JMS server behavior.
First I register a listener in the traditional way (not needed to read it).
InitialContext jndi = new InitialContext(env); // Look up a JMS connection factory QueueConnectionFactory conFactory = (QueueConnectionFactory) jndi .lookup("jms/connectionFactory");
// Create a JMS connection QueueConnection connection = conFactory.createQueueConnection(username, password); // Create two JMS session objects QueueSession qSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); // Look up a JMS queue Queue q = (Queue) jndi.lookup(queueName); QueueReceiver qr = qSession.createReceiver(q); // Set a JMS message listener qr.setMessageListener(this); // Start the JMS connection; allows messages to be delivered connection.start();
Then, the listener registers to the queue without problem, the method returns, and the object wait for new messages. Until here OK.
The problem comes up when the JMS server "eventually" crashes, how can my java code get noticed about this event???
In case it doesn't get noticed, I'm forced to program a timed task that periodically checks if the connection with the queue is UP, I mean, if the object is listening for new messages, or if there has been any problem and it is no longer receiving messages.
But, how can I answer to the JMS server if a "given object" is listening on a "given queue" ???