Author |
Message
|
rconn2 |
Posted: Thu Mar 31, 2011 1:12 pm Post subject: JMS get message error: convert CCSID 500 to 1208? |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
When I try to get a JMS message using a custom Java application that has worked without problems for a few years, it now reports the following error:
Code: |
main: com.ibm.msg.client.jms.DetailedMessageFormatException: JMSWMQ2002: Failed to get a message from destination 'TESTQ1'. WebSphere MQ classes for
JMS attempted to perform an MQGET; however WebSphere MQ reported an error. Use the linked exception to determine the cause of this error.
main: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '1' ('MQCC_WARNING') reason '2119' ('MQRC_NOT_CONVERTED'). |
The source queue manager is running on MQ v. 6.0.2.7 and the destination queue manager is on MQ v. 7.0.1.3. Both are on AIX boxes running v. 5.3.
The MQ error log on the destination shows a problem converting CCSID 500 to 1208.
I did a web search for this problem, and there's an IBM explanation that character sets used to be converted within the JVM, but with MQ v. 7, it is done by the channel agent.
In any case, there was no (for me anyway) simple solution provided. I'm not a UNIX guru. I don't know how to fix this problem, and also, the best way to fix it. Any help would be greatly appreciated! |
|
Back to top |
|
 |
mvic |
Posted: Thu Mar 31, 2011 3:27 pm Post subject: Re: JMS get message error: convert CCSID 500 to 1208? |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
|
Back to top |
|
 |
skoobee |
Posted: Thu Mar 31, 2011 9:04 pm Post subject: |
|
|
Acolyte
Joined: 26 Nov 2010 Posts: 52
|
The error might mean that you do not have the AIX fileset bos.iconv.ucs.ebcdic installed, which contains the 500 -> 1208 conversion tables. |
|
Back to top |
|
 |
rconn2 |
Posted: Fri Apr 01, 2011 8:36 am Post subject: |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
skoobee:
I ran the following on the destination MQ v7 Server:
lslpp -f 'bos.iconv.ucs.ebcdic'
-> fileset bos.iconv.ucs.ebcdic not installed
I also ran it on a couple source MQ v6 Servers and got the same result.
I've sent messages using MQ Explorer and amqsput from the source MQ v6 servers, and these were received okay on the destination MQ v7 server using amqsget and a custom Java JMS app.
However, when messages are sent using the custom Java JMS app from the source MQ v6 servers, the conversion error is reported when trying to receive with either amqsget or the custom Java JMS app.
The custom Java JMS app is successful sending and receiving on the MQ v7 server itself.
This custom Java JMS app has been used for a few years on multiple MQ servers in our enterprise for sending and receiving text messages and files as messages without problems from MQ v 5.x up through v 6.x on AIX.
Now, it no longer works receiving on the MQ v7 Server from other MQ servers (the others are all MQ v6).
An additional note: the messages are relayed through a Z/OS mainframe queue manager (which acts as a routing hub). The source and destination are AIX.
Would the mainframe QMgr convert JMS Header strings and text on messages that just pass through it? And, does this only occur on JMS messages (there's no problem when messages are sent w/ MQ Explorer or amqsput)?
Both source and destination QMgr CCSID's = 819. Yet, the conversion error in the log says unable to convert from 500 to 1208.
I read through the above link, but I haven't been able to make sense of it.
A last point... I can change the Java JMS code on the MQ v7 server, but the other code is deployed on multiple MQ v6 servers and this isn't feasible.
Sorry, I know this is a long and complex post... I greatly appreciate any help. |
|
Back to top |
|
 |
mvic |
Posted: Fri Apr 01, 2011 8:53 am Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
rconn2 wrote: |
I greatly appreciate any help. |
You're welcome.. did you read the link I posted? |
|
Back to top |
|
 |
mqjeff |
Posted: Fri Apr 01, 2011 9:07 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
The mainframe is clearly performing a convert, either at the channel or in the routing program.
This means that although you send the message in 819, it gets turned into 500 before it gets back to you.
So you need to install bos.iconv.ucs.ebcdic, at a minimum, if not all of the bos.iconv filesets on general principles.
Or you could choose to continue to risk this issue re-occurring with other codepages at later dates. |
|
Back to top |
|
 |
rconn2 |
Posted: Fri Apr 01, 2011 1:30 pm Post subject: |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
AIX QmgrA (v6) --> MF Qmgr --> AIX QMgrB (v7)
The message gets relayed through the MF Qmgr using a qremote on Qmgr A that specifies QmgrB as the rqmname and the xmit the xmit queue for the MF Qmgr (so the message gets sent to the MF and the MF forwards it to the destination).
All of the channels from QmgrA to the MF Qmgr to Qmgr B have the conversion property set to No.
The CCSID's on QmgrA and QMgrB are both 819.
When a JMS Message (using a custom JMS app) is sent from QmgrA to QmgrB, the error log on QmgrB reports it is unable to convert CCSID 500 to 1208.
I don't know how CCSID 500 is involved if none of the channels do a convert. So, all JMS messages are being converted to CCSID 500 when relayed through the mainframe?
But... when MQ Explorer or amqsput messages are sent the same way, there is no conversion error.
When messages are sent in the opposite direction, from QMgr B (v7) to Qmgr A (v6) as JMS or amqsput, there is no conversion error. |
|
Back to top |
|
 |
rconn2 |
Posted: Fri Apr 01, 2011 1:56 pm Post subject: |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
mqjeff - I just requested our Unix admin check/install the bos.iconv datasets. In the meantime, I'd like to understand why JMS messages are getting converted to CCSID 500 when relayed through the mainframe Qmgr. And, why this only causes a problem when the messages are received by an MQ v7 queue manager. |
|
Back to top |
|
 |
mvic |
Posted: Fri Apr 01, 2011 2:03 pm Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
You did read that link, right? MQ v7 JMS apps do get-with-convert. MQ v6 JMS apps do NOT do get-with-convert.
You can follow mqjeff's idea and install the needed fileset on the AIX where your v7 qmgr runs, or you can look at the workarounds mentioned at the link I posted. |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Apr 01, 2011 7:36 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
rconn2 wrote: |
mqjeff - I just requested our Unix admin check/install the bos.iconv datasets. In the meantime, I'd like to understand why JMS messages are getting converted to CCSID 500 when relayed through the mainframe Qmgr. And, why this only causes a problem when the messages are received by an MQ v7 queue manager. |
The messages can be converted to CCSID 500 because it is the CCSID set on the Destination used by your JMS app... You need to look at all the pieces and understand each setting that will impact conversion:
- CCSID of the connection factory putting the message
- CCSID of the destination used for the put
- CCSID of the message as inspected (do not use convert) by the tools on the destination
- CCSID of the connection factory retrieving the message
Hope I haven't left anything out. Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
zpat |
Posted: Fri Apr 01, 2011 10:03 pm Post subject: |
|
|
 Jedi Council
Joined: 19 May 2001 Posts: 5866 Location: UK
|
If your sender channel to the mainframe has convert(yes) on it then messages will be converted to CCSID 500 on the channel.
This can cause the sort of problem you describe. Since some apps may rely on this conversion, you could set up another sender channel which has convert(no) on it (using a different xmit queue) and use this channel by specifying the alternate xmit queue name on the remote queue def. |
|
Back to top |
|
 |
rconn2 |
Posted: Tue Apr 05, 2011 12:12 pm Post subject: |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
I did read the link. I copied and am using the MQ version 6 JMS jar files and messages are now being received successfully by the Java application running on the MQ v 7 server.
When fixpack 7.0.1.5 (due 2Q2011) comes out, it's supposed to changed the default behavior for the v 7 JMS classes to be the same as for v 6.
Re: the CCSID being changed to 500. The qremote definition on the AIX source specifies a queue manager on another AIX box, but it also specifies to use an xmitq that relays it first to a mainframe queue manager. (The mainframe queue manager just sends the message on its way to the destination queue manager).
QMgrA --> MainframeQmgr --> QMgrB
def qremote(destq) rname(destq) rqmname(QMgrB) xmitq(MainframeQmgr)
The SDR channels from source to destination are all Convert(NO). But, perhaps when the JMS message is created, the mainframe is seen as the destination (it's just a hop along the way, but it's the first hop). So, the message is converted to it's supposed destination (the mainframe queue manager) and an ebcdic encoding? I guess... |
|
Back to top |
|
 |
fjb_saper |
Posted: Tue Apr 05, 2011 8:00 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
If you have checked that the channels have conversion set to no, you may check the CCSID of the Destination as defined in the JNDI used by the application sending the message. The qmgr translates the message into the CCSID of the JMS Destination (when set) before putting the JMS TextMessage. If there is no CCSID set on the JMS Destination, what is the CCSID set on the connection factory used to send the message?  _________________ MQ & Broker admin |
|
Back to top |
|
 |
rconn2 |
Posted: Fri Dec 09, 2011 3:23 pm Post subject: |
|
|
Voyager
Joined: 09 Aug 2007 Posts: 79 Location: MD, USA
|
I'm re-opening this thread as a new issue has come up.
First, with MQ v 7.0.1.6, there's no longer a conversion problem with a stand-alone Java JMS application (and the 7.0.1.6 jar files). So, by this fixpack, things seem... fixed.
But, we have the same conversion issue occurring with a WAS client connection from a WAS version 7 server to an MQ v 7.0.1.6 server.
Question: is there a WAS update or fix that fixes the problem with this MQ client as has been fixed with 7.0.1.6 stand-alone JMS clients?
Or, any other recommendations or helpful explanations will be much appreciated. |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Dec 09, 2011 7:48 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
You can either use the resource adapter or the WAS native setup.
There should be a table somewhere that shows the WAS fixpack in correspondence to the WMQ fixpack. You need to use that to determine which fixpack of WAS you need to be on...  _________________ MQ & Broker admin |
|
Back to top |
|
 |
|