Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / September 2006

Tip: Looking for answers? Try searching our database.

JMS messaging question

Thread view: 
Blake Essing - 15 Sep 2006 00:24 GMT
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 + ".");
     }

}
Rob - 15 Sep 2006 08:42 GMT
>    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
[quoted text clipped - 4 lines]
> 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
Lakshmi Ashok - 15 Sep 2006 10:44 GMT
>> 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 ?


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.