| Author | 
		  Message
		 | 
		
		  | APCGR | 
		  
		    
			  
				 Posted: Mon Jan 21, 2002 10:17 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 28 Oct 2001 Posts: 7
  
  | 
		  
		    
			  
				I'm trying to JMSCorrelationID to correlate requests to responses. The strategy is simple: 
 
1. The request is sent without concern for the JMSCorrelationID but the JMSMessageID is recorded after it is 'set by the Send Method'.
 
2. The request is received and the JMSMessageID is used to set the JMSCorrelationID of the response.
 
3.The response is received and the JMSCorrelationID is matched to the JMSMessageID.
 
Hence: we have the response matched with the original request.
 
 
Problem: When the original request is received the JMSMessageID has changed even though I had checked it after the publish??? 
 
Secondary Problem: If I respMsg.setJMSCorrelationID(reqMsg.getMessageID()) and
 
producer.publish(respMsg) when I receive the message the JMSCorrelationID has changed???
 
 
 
 
 | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | APCGR | 
		  
		    
			  
				 Posted: Mon Jan 21, 2002 7:21 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 28 Oct 2001 Posts: 7
  
  | 
		  
		    
			  
				I found the problem.... like most things it is very simple once you know.
 
 
This is what I was doing:
 
 
     respMsg.setJMSCorrelationID(reqMsg.getMessageID()) 
 
 
This is what I needed to do:
 
     String correlID = reqMsg.getJMSMessageID();
 
     correlID = correlID.substring(correlID.indexOf(":")+1);
 
     respMsg.setJMSCorrelationID(correlID); 
 
 
The getJMSMessageID() returns a String with the messageID prefixed with "ID:". I never looked at it... I just used it. The correlationID must be considered invalid at publication time and is therefore overwritten.
 
 
It is interesting to note that getCorrelationID() is NOT prefixed with the "ID:". This little incompatibility really bytes.
 
 | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | kolban | 
		  
		    
			  
				 Posted: Mon Jan 21, 2002 9:55 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand Master
 
 Joined: 22 May 2001 Posts: 1072 Location: Fort Worth, TX, USA 
  | 
		  
		    
			  
				| I'm not saying your wrong... if this is what happens then something is badly broken.  The Message ID and Correlation ID should be able to be assigned from one to the other without interpretation.  I noticed you mentioned publish and not send as the activities.  One normally associates request/reply with point-to-point and not pubsub.   Can you clarify? | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | APCGR | 
		  
		    
			  
				 Posted: Tue Jan 22, 2002 5:48 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 28 Oct 2001 Posts: 7
  
  | 
		  
		    
			  
				Yes I'm using publish and subscribe. This probably seems a little odd that we are using pub/sub and request/reply together but it fits our needs. We have cases where we receive multiple replies to a single request.
 
 
I backed out the change to insure that I wasn't dreaming and sure enough the "ID:" came back. To back out the change I did the following (commented line 2):
 
 
 String correlID = reqMsg.getJMSMessageID(); 
 
 // correlID = correlID.substring(correlID.indexOf(":")+1); 
 
 respMsg.setJMSCorrelationID(correlID); 
 
 
You can see it if you do a toString() on the TextMessage (i.e. respMsg.toString()):
 
 
Here is the primary message: (Notice the JMSMessageID)
 
 
JMS Message class: jms_text
 
  JMSType:         null
 
  JMSDeliveryMode: 2
 
  JMSExpiration:   0
 
  JMSPriority:     4
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c22700e00
 
  JMSTimestamp:    1011702263140
 
  JMSCorrelationID:null
 
  JMSDestination:  topic://MYAPC.Ping.Request
 
  JMSReplyTo:      null
 
  JMSRedelivered:  false
 
  JMSXAppID:MQSeries Client for Java
 
  JMSXUserID:MUSR_MQADMIN
 
  JMSXDeliveryCount:0
 
  JMS_IBM_PutApplType:28
 
<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE Ping SYSTEM "./ping.dtd" >
 
<Ping   messageSequenc
 
Another 280 character(s) omitted
 
 
Here is the response message: (Notice that the JMSCorrelationID has the extra "ID:" now.)
 
 
JMS Message class: jms_text
 
  JMSType:         null
 
  JMSDeliveryMode: 2
 
  JMSExpiration:   0
 
  JMSPriority:     4
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3cf2d20d00
 
  JMSTimestamp:    1011702263150
 
  JMSCorrelationID:ID:414d512067726567672e71756575652e06014c3c12600e00
 
  JMSDestination:  topic://MYAPC.Ping.Request
 
  JMSReplyTo:      null
 
  JMSRedelivered:  false
 
  JMS_IBM_MsgType:8
 
  JMSXAppID:gregg.queue.manager
 
  JMSXUserID:MUSR_MQADMIN
 
  JMSXDeliveryCount:1
 
  JMS_IBM_PutApplType:26
 
  JMS_IBM_Format:MQSTR
 
 
[ This Message was edited by: APCGR on 2002-01-22 05:53 ] | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | kolban | 
		  
		    
			  
				 Posted: Tue Jan 22, 2002 8:31 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand Master
 
 Joined: 22 May 2001 Posts: 1072 Location: Fort Worth, TX, USA 
  | 
		  
		    
			  
				Still not with you, I see the following:
 
 
JMSCorrelationID:ID:414d512067726567672e71756575652e06014c3c12600e00 
 
 
This seems to show that property
 
"JMSCorrelationID" has the value "ID:414d512067726567672e71756575652e06014c3c12600e00".
 
 
Nothing odd with that?  In JMS, all message ids and correlation ids are strings and start with the code "ID:"
 
 | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | APCGR | 
		  
		    
			  
				 Posted: Tue Jan 22, 2002 2:36 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 28 Oct 2001 Posts: 7
  
  | 
		  
		    
			  
				Sorry for the confusion. 
 
 
The example that I showed you in my previous posting is without my fix. When that message is actually published the underlying mqjms implementation will throw-up on the "ID:" string in the correlationID and will overwrite correlationID with some unexpected value.
 
 
I understand that you are saying messageID and correlationID should be comaptible but they are not. If you don't strip the "ID:" off the front of the messageID the underlying mqjms implementation will overwrite the correlationID.
 
 
Here is a bad sceanrio followed by a good scenario. I trimmed out all the extraneous stuff. I am also using a very simple correlationID. In the bad scenario I use "ID:1111" and the good scenanrio "1111".
 
 
Bad Scenario:
 
Request message published:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c22a01900
 
  JMSTimestamp:    1011734599150
 
  JMSCorrelationID:null
 
 
Request message received:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c62f81800
 
  JMSTimestamp:    1011734599160
 
  JMSCorrelationID:ID:414d512067726567672e71756575652e06014c3c12901900
 
 
Response message published:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c22e01900
 
  JMSTimestamp:    1011734599480
 
  JMSCorrelationID:ID:1111   <<<< notice the "ID:"
 
 
Response message received:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c42fa1800
 
  JMSTimestamp:    1011734599480
 
  JMSCorrelationID:ID:414d512067726567672e71756575652e06014c3c22b01900 <<< created by mqjms
 
End of Bad scenario:
 
 
Good scenario:
 
Request message published:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c22101a00
 
  JMSTimestamp:    1011735158970
 
  JMSCorrelationID:null
 
 
Request message received:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3cc2fa1800
 
  JMSTimestamp:    1011735158980
 
  JMSCorrelationID:ID:414d512067726567672e71756575652e06014c3c12001a00
 
 
Response message published:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3c22501a00
 
  JMSTimestamp:    1011735159400
 
  JMSCorrelationID:1111
 
 
Response message received:
 
  JMSMessageID:    ID:414d512067726567672e71756575652e06014c3ca2fc1800
 
  JMSTimestamp:    1011735159400
 
  JMSCorrelationID:1111
 
End of Good scenario:
 
 
 
 
[ This Message was edited by: APCGR on 2002-01-22 15:00 ] | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |