|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
JMS, VB and CCSID |
« View previous topic :: View next topic » |
Author |
Message
|
PeterPotkay |
Posted: Wed Feb 24, 2010 11:27 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
Solved!
On the putting side it was acting weird because we are dealing with a bug in MQ.
http://www-01.ibm.com/support/docview.wss?uid=swg1IZ64472&myns=swgws&mynp=OCSSFKSJ&mync=E
Quote: |
Error description
If MQMessage.characterSet is not explicitly set by the putting
application, it defaults to the Coded Character Set ID (CCSID)
of the queue manager. The message body can become corrupt if
the queue manager's CCSID is different to that of the client and
a conversion is carried out when the message is retrieved from
the queue.
|
I got a hold of the getting applications code and they weren't using MQGMO_CONVERT. How they were getting a conversion error is beyond me, but once they set the convert option the QM converted the messages from 1208 to 437 before sending them down to the client, and now it works.
Phew! _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
PeterPotkay |
Posted: Sat Mar 20, 2010 4:04 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
I had a call with the L3 in Hursley and here are the meeting minutes taken from the PMR:
Quote: |
For a JMS Client, there are 3 CCSIDs in play:
.
1. The Client and QM's "service messages". You never see these
really.
.
2. The MQMD's, which is what encoding will be used for the
following data, be it message payload or an RFH2 header
.
3. The RFH2 Header's CCSID
.
.
In the JMS Object (QCF and Destination), you cannot set 0 for
CCSID. The Base Java and C client API do allow 0, which means
give me the QM CCSID, which really means for MQ Clients give
me the CCSID of the platform I am on (but see below about the
current exception in this behavior for base Java MQ 7 clients).
.
If you don't specify a CCSID in your JMSAdmin input, you get a
1208 in MQ 6 and MQ 7 as the defaults.
.
If you are using Base Java and you don't specify a CCSID, the
default for MQ 6 is 819 and the default for MQ 7 is 1208.
.
The JMS Destination CCSID is used for the RFH2 CCSID, if present.
If no RFH2 header is requested (Target Client = MQ), then the
Destination CCSID goes into theMQMD CCSID.
.
The QCF CCSID is used for the 1st Control message CCSID, and then
it picks up the QM CCSID. This CCSID is used for the MQMD CCISD
if there is an RFH2 header.
.
.
In base Java (not JMS), in MQ 7.0, when u put a message, and you
do not specify a CCSID, you get 0, which is allowed. That means
give me the QM CCSID. Typically for MQ Clients this really means
use the CCSID of the client platform and not the QM, which makes
sense - you want the CCSID to match the CCSID of the data coming
from the client. But the bug in MQ 7.0 means for a Java MQ client
(not JMS) you get the QM's actual CCSID, which is contrary to
MQ 6 and contrary to how the C Client works in MQ 7. This will
be fixed in 7.0.1.3 (probably, depends when the APAR makes it
into the release cycle) so the MQ 7 base Java MQ Client
acts like it did in MQ 6 and like the C client does.
.
.
JMS does allow a convert on put. If you set the Destination
CCSID to a value other than the client platform's CCSID, and the
JVM supports the CCSID you chose, then the message wil be converted
on the put. The IBM JVM supports a lot more CCSIDs than the SUN
JVM. If you specify a valid CCSID but one the JVM does not support,
you will get an exception before the MQPUT is even attempted. |
_________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|