Author |
Message
|
bhumulas |
Posted: Fri Jun 22, 2007 3:28 am Post subject: JMSMessageID and MQMD.MessageID mismatch.. |
|
|
Apprentice
Joined: 17 Feb 2006 Posts: 41
|
Hi,
I have an issue with JMS MessageId.
We have requirement in which I have to copy the JMS Message ID which is coming from WPS system. The same Message ID should be copied to JMS Correlation ID and send it back to WPS system.
The application on WPS is waiting on the CorrelationID for further processing.
Now the problem is JMS Message ID is coming as "ID:12345" . After JMSMQTranform node the message got converted as MQ message and the JMSMessageID is copied to MQMD.MessageID. But when I see the MQMD.MessageID, the charactes "ID" are truncated. The value is showing as "12345" only. So If i send the same MQMD.MessageID to the WPS system.. it is failing in the WPS system (The correlatinsID is coming as "12345" instead of "ID:12345") because of mismatch of CorrelationID.
Can any one suggest how to fix this?
Please let me know do I need concat "ID" characters or anyother possible solutions
My Broker ans WPS is on Solaris.
Regards,
Subhash |
|
Back to top |
|
 |
AkankshA |
Posted: Fri Jun 22, 2007 3:55 am Post subject: |
|
|
 Grand Master
Joined: 12 Jan 2006 Posts: 1494 Location: Singapore
|
i also faced this problem...
you need to do some change at receiving end.... or else hard code ID: in the begining which is a very dirty solution i know  _________________ Cheers |
|
Back to top |
|
 |
elvis_gn |
Posted: Fri Jun 22, 2007 4:25 am Post subject: |
|
|
 Padawan
Joined: 08 Oct 2004 Posts: 1905 Location: Dubai
|
Hi bhumulas,
You are receiving a JMS message, converting to MQ and not replying back as JMS ? Isn't the string(JMS Id's) and bytes(MQ Id's) creating an issue if the above is true ?
Regards. |
|
Back to top |
|
 |
bhumulas |
Posted: Fri Jun 22, 2007 4:34 am Post subject: |
|
|
Apprentice
Joined: 17 Feb 2006 Posts: 41
|
elvis_gn wrote: |
Hi bhumulas,
You are receiving a JMS message, converting to MQ and not replying back as JMS ? Isn't the string(JMS Id's) and bytes(MQ Id's) creating an issue if the above is true ?
Regards. |
I am again converting message as JMS message using MQJMSTranform node and sending it to WPS system.
Regards,
Subhash |
|
Back to top |
|
 |
AkankshA |
Posted: Fri Jun 22, 2007 4:38 am Post subject: |
|
|
 Grand Master
Joined: 12 Jan 2006 Posts: 1494 Location: Singapore
|
Then your MQ JMS transform node should have taken care of that.. atleast it is in my env
which version of Mb u running?? _________________ Cheers |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri Jun 22, 2007 4:42 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
The JMS* nodes only exist in v6.
It's worth checking the APAR list for fixes in this area if you're running anything less than FP3.
Otherwise, what are you doing with the Msg/CorrelID between the JMSTransform nodes? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
bhumulas |
Posted: Fri Jun 22, 2007 4:50 am Post subject: |
|
|
Apprentice
Joined: 17 Feb 2006 Posts: 41
|
Hi Akanksha,
The scenario is like
JMSInputQ---->JMSMQTranform ---->Compute---> OutputQ(QL) (This is one flow)
In the above flow before JMSMQTranformNode I can see the JMSMessageID as "ID:12345" after JMSMQTranform node JMSMessageID is coped into MQMD.MessageID and the value coming as "ID:12345"...
In my flow I am copying the MQMD.MessageID to
SET OutputRoot.MQRFH2.usr.ParentBusTID = InputRoot.MQMD.MsgId;
Now my second flow looks like
MQInputQ(QL)--->compute--->MQJMSTranform--->JMSOutput
In this flow I am copying the
SET OutputRoot.JMSTransport.Transport_Folders.Header_Values.JMSCorrelationID = InputRoot.MQRFH2.usr.ParentBusTID;
Here also I can see the InputRoot.MQRFH2.usr.ParentBusTID value as "12345"
After MQJMSTransform the same value is carry forwarded to WPS.
mqsiservice -v
BIPv600 en US POSIX
ucnv Console CCSID 1208 dft ucnv CCSID 1208
ICUW US-ASCII ICUA US-ASCII
BIP8996I: Version: 6002
BIP8997I: Product: WebSphere Message Brokers
BIP8998I: CMVC Level: S600-CSD02 DH600-CSD02
BIP8999I: Build Type: Production
Regards,
Subhash |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri Jun 22, 2007 4:55 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Try setting OutputRoot.Properties.CorrelID = InputRoot.MQRFH2.usr.ParentBusTID. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
jbanoop |
Posted: Fri Jun 22, 2007 7:13 am Post subject: |
|
|
Chevalier
Joined: 17 Sep 2005 Posts: 401 Location: SC
|
A workaround would be:
Get the message id after the JMSInput node (when it is showing properly, if it is showing properly), store it somewhere(like in the environment ) and after that do the transformation.
Once the transform has been completed, reassign the value you stored to the corel id.
It may also be the case that an incoming message id > max allowable size of MQMD.MsgId, is causing the MsgId to get truncated. |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri Jun 22, 2007 7:21 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Two flows - Environment can't be used. That's why Akansha is using the RFh2 usr folder.
I wouldn't expect that a truncation would occur at the "left" of the id, if it was too long. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
jbanoop |
Posted: Fri Jun 22, 2007 8:03 am Post subject: |
|
|
Chevalier
Joined: 17 Sep 2005 Posts: 401 Location: SC
|
OK. I missed that.
and yes ..left truncation does not sound all to logical.
Maybe like Jeff said, setting the corel id field in MQMD and then asking MQJMS transform to transform the message might do the trick.
What does a trace of the incoming message (after the MQInput node) in the second flow show about the usr field ParentBusTID ?
maybe you should stop the secod flow, read the message that comes in using RFHUTIL and have a look at the ParentBusTID field to see if the "ID:" part is coming at all. |
|
Back to top |
|
 |
bhumulas |
Posted: Wed Jul 04, 2007 5:02 am Post subject: |
|
|
Apprentice
Joined: 17 Feb 2006 Posts: 41
|
Hi All,
Thanks for all your responses and suggestions.
Finally we have decided to concat the "ID" characters. It is working fine now. We raised a PMR, IBM also suggested the same thing.
But they also agreed on this point.
When JMSMessageId is coming as "ID:XYZ"... they are truncating "ID" and sending it as "XYZ", after JMSMQ Transform node. The same way they have to concat "ID" to the XYZ in MQJMSTransform node, because in my case "ID" characters are mandatory.
Now I am wondering how request/response kind applications will work if some one depends on JMSMessageID and CorrelatioID.
Regards
Subhash |
|
Back to top |
|
 |
fjb_saper |
Posted: Wed Jul 04, 2007 7:32 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
bhumulas wrote: |
Hi All,
Thanks for all your responses and suggestions.
Finally we have decided to concat the "ID" characters. It is working fine now. We raised a PMR, IBM also suggested the same thing.
But they also agreed on this point.
When JMSMessageId is coming as "ID:XYZ"... they are truncating "ID" and sending it as "XYZ", after JMSMQ Transform node. The same way they have to concat "ID" to the XYZ in MQJMSTransform node, because in my case "ID" characters are mandatory.
Now I am wondering how request/response kind applications will work if some one depends on JMSMessageID and CorrelatioID.
Regards
Subhash |
That's an easy one to answer and it is all documented in the Using Java manual. Here it is from memory...
The MessageID is a 24byte array that is represented in hex(48 chars) and prefixed by 'ID:' as this is the provider form of identification.
The correlation Id can be more than 24 bytes but if there is no RFH header present it will be truncated to 24 bytes. If it is not present on the RFH header it will display the correlId from the MQMD header (same rules as for messageid display). The set method will take a string (including provider form where set.JMSCorrelId(get.JMSMessageId());. You can also use the alternate method to pass a bytearray...
Performance consideration: always use the provider native form: (ID:xxxx) as this will guarantee the fastest resolution and processing.
My personal advice: Use the anonymous identifier pattern and NEVER try to pass any meaning in those fields. _________________ MQ & Broker admin |
|
Back to top |
|
 |
|