W3C home > Mailing lists > Public > public-soap-jms@w3.org > June 2010

Re: Please don't rely on JMSMessageID for Protocol 2038.

From: Eric Johnson <eric@tibco.com>
Date: Wed, 16 Jun 2010 11:34:04 -0700
Message-ID: <4C19191C.5060001@tibco.com>
To: David Naramski <david@naramski.net>
CC: public-soap-jms@w3.org
Hi David,

Thanks for your input.

I've put this into the working group issue tracker as
http://www.w3.org/2002/ws/soapjms/tracker/issues/39

A response will follow, but it may take a few weeks for us to meet,
discuss, and resolve the question.

-Eric

On 06/15/2010 02:37 PM, David Naramski wrote:
> I have a problem with Protocol-2038
> <http://www.w3..org/TR/2009/CR-soapjms-20090604/#Protocol-2038>.
>
> It works well when you have the client (C) and the server (S) without
> intermediary.
>
> 1) C sends the message. The JMSMessageId "originalId" is then
> generated by the producer.
> 2) S receives directly the message. Then S copies the JMSMessageId 
> "originalId" in the JMSCorrelationId of the response. S sends the
> message in the reply queue. 
> 3) C waits for a message with JMSCorrelationId = "originalId"
>
> But if you have a less ideal infrastructure such as, two JMS brokers
> linked together, you can have something like this :
>
> C  ----> brokerA ------> bridge ------> brokerB ------> S
>
> Then C cannot rely on the JMSMessageID to correlate the response.
> Actually, the bridge will read the original message and send it to the
> brokerB. A new JMSMessageID = "newId" is then generated by the JMS
> provider. The server S will respond with JMSCorrelationID = "newId"
> and the client C will not be able to correlate the message, because it
> waits on the "JMSCorrelationID = 'originalId'" selector.
>
> A solution will be to set the JMSCorrelationId at the client level.
> The JMSCorrelationId will be preserved during all the cycle.
>
> The protocol 2038 can be rewriten as follows  :
>
> - If no JMSCorrelationID is set in the request, then S MUST copy the
> JMSMessageID from the original request to the JMSCorrelationID of the
> response.
> - If a JMSCorrelationID is set in the request, S MUST copy the
> JMSCorrelationID from original request to the JMSCorrelationID of the
> response.
>
> Alternatively, the protocol 2038 could be simplified as follows:
> - S MUST copy the JMSCorrelationID from original request to the
> JMSCorrelationID of the response.
>
> I have not seen the Protocol 2038 discussed in the mailing list, so I
> hope this issue is not a duplicate.
>
> I'm not sure how to sent my comments. I'm trying the mailing list, but
> if you think another way will be more appropriate, feel free to give
> me any instruction in that respect.
>
> You can see in |*setJMSMessageID
> <http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html#setJMSMessageID%28java.lang.String%29>
> that the *|JMS providers set this field when a message is sent.
> More, you can see in |*setJMSCorrelationID
> <http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html#setJMSCorrelationID%28java.lang.String%29>*|
> that JMSCorrelation is a mean to the client for correlating the
> request and the response.
>
> I hope the above is helpful and remain a your disposal for any queries
> you may have.
>
> Kind regards,
>
> David Naramski
Received on Wednesday, 16 June 2010 18:34:10 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 18 December 2010 18:16:24 GMT