JMS messaging question

B

Blake Essing

I'm having some trouble with JMS messages. I have the following method
to put a message to a SonicMQ queue via JMS and I want to read the response
message that comes back. I am putting the message successfully, but the
code times out every time when trying to get the response. If anyone can see
something I have wrong in the code, please let me know. I'm new to JMS so I
assume that I'm missing something very basic. The getCorrelationId method
just creates a correlation id based on some literals and a timestamp.



public String sendXml(String pXML) throws ConnectionException {
if (pXML == null)
throw new ConnectionException("No XML data was entered.");

String correlationId = null;

try {
QueueSession queueSession =
mQueueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender queueSender = queueSession.createSender(mQueue);

TextMessage message = queueSession.createTextMessage();
message.setJMSReplyTo((Queue)mJndiContext.lookup(mResponseQueue));
message.setJMSExpiration(mTimeout);
correlationId = getCorrelationId(1);
message.setJMSCorrelationID(correlationId);
message.setText(pXML);

queueSender.send(message, DeliveryMode.PERSISTENT,
Message.DEFAULT_PRIORITY, mTimeout);
String JMSCorrelationId = message.getJMSMessageID();
} catch (JMSException e) {
throw new ConnectionException("Got JMS exception trying to
connect to the queue " + mQueue + ".");
} catch (NamingException ne) {
throw new ConnectionException("Got naming exception trying to
lookup queue " + mQueue + ".");
}

try {
QueueSession queueSession =
mQueueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue receiveQueue = (Queue)mJndiContext.lookup(mResponseQueue);
QueueReceiver queueReceiver =
queueSession.createReceiver(receiveQueue, correlationId);
Message msg = queueReceiver.receive(mTimeout);

if (msg != null) {
String textMsg = null;
if (msg instanceof TextMessage) {
return ((TextMessage) msg).getText().toString();
} else if (msg instanceof BytesMessage) {
ByteArrayOutputStream bytes = new
ByteArrayOutputStream();
byte[] byteBuffer = new byte[1024];
int read = 0;
while ((read = ((BytesMessage)
msg).readBytes(byteBuffer)) != -1) {
bytes.write(byteBuffer, 0, read);
}
return new String(bytes.toByteArray());
} else {
throw new ConnectionException("Did not receive a
readable message.");
}
} else {
throw new ConnectionException("Did not receive a response in
the time allotted.");
}
} catch (JMSException e) {
throw new ConnectionException("Got JMS exception trying to
connect to the queue " + mResponseQueue + ".");
} catch (NamingException ne) {
throw new ConnectionException("Got naming exception trying to
lookup queue " + mResponseQueue + ".");
}

}
 
R

Rob

Blake Essing said:
I'm having some trouble with JMS messages. I have the following method
to put a message to a SonicMQ queue via JMS and I want to read the
response message that comes back. I am putting the message successfully,
but the code times out every time when trying to get the response. If
anyone can see something I have wrong in the code, please let me know.
I'm new to JMS so I assume that I'm missing something very basic. The
getCorrelationId method just creates a correlation id based on some
literals and a timestamp.

It all depends on what the other side does in this situation, but how you
would normally you would use the JMSCorrelationID is as follows :

- The sender saves the JMSMessageID of the request message it sends
- The receiver copies the JMSMessageID into the JMSCorrelationID of the
reply
- The sender matches the saved JMSMessageID of the request to the
JMSCorrelationID of the reply

Rob
 
L

Lakshmi Ashok

I am putting the message successfully, but the
code times out every time when trying to get the response.

<i>
What exactly do u mean by comes out? Is there any exception thrown ?
Where do u see the flow stopping ?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top