Fixes are available
APAR status
Closed as program error.
Error description
A Message Driven Bean (MDB) running inside a J2EE application server is driven by an activation specification that is using the v7 WebSphere MQ Resource Adapter to trigger the MDB with messages on a WebSphere MQ queue. Whilst messages are flowing, the channel being used by the activation specification is stopped and restarted. Occasionally this results in one of the in-flight messages being removed from the WebSphere MQ queue, but not processed by the MDB. The following exception message is seen in the application server system output logs: WorkImpl) [:/44444444] Caught exception: java.lang.RuntimeException: JMSCC0110: An exception ' Message : com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0031: 'MQOPEN' failed for the queue manager when handling a poison message. When requeuing a poison message, 'MQOPEN' failed when attempting to inquire about the queue manager. Please see the linked exception for more information on the failures and/or warnings. Class : class com.ibm.msg.client.jms.DetailedIllegalStateException Stack : com.ibm.msg.client.wmq.common.internal.Reason .reasonToException(Reason.java:496) : com.ibm.msg.client.wmq.common.internal.Reason .createException(Reason.java:236) : com.ibm.msg.client.wmq.internal.WMQPoison .checkJmqiCallSuccess(WMQPoison.java:1111) : com.ibm.msg.client.wmq.internal.WMQPoison .access$2200(WMQPoison.java:84) : com.ibm.msg.client.wmq.internal.WMQPoison$QmAttrs .<init>(WMQPoison.java:1381) : com.ibm.msg.client.wmq.internal.WMQPoison$QmAttrs .<init>(WMQPoison.java:1365) : com.ibm.msg.client.wmq.internal.WMQPoison .<init>(WMQPoison.java:153) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .initialisePoison(WMQConsumerShadow.java:1176) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .getMsg(WMQConsumerShadow.java:1301) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .getMsg(WMQConsumerShadow.java:1211) : com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow .receive(WMQSyncConsumerShadow.java:366) : com.ibm.msg.client.wmq.internal.WMQSession .loadMessageReference(WMQSession.java:1318) : com.ibm.msg.client.jms.internal.JmsSessionImpl .consume(JmsSessionImpl.java:2940) : com.ibm.msg.client.jms.internal.JmsSessionImpl .run(JmsSessionImpl.java:2631) : com.ibm.mq.jms.MQSession.run(MQSession.java:862) : com.ibm.mq.connector.inbound.WorkImpl.run(WorkImpl.java:265) : com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:399) : com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550) Caused by [1] --> Message : com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2202' ('MQRC_CONNECTION_QUIESCING'). Class : class com.ibm.mq.MQException Stack : com.ibm.msg.client.wmq.common.internal.Reason .createException(Reason.java:223) : com.ibm.msg.client.wmq.internal.WMQPoison .checkJmqiCallSuccess(WMQPoison.java:1111) : com.ibm.msg.client.wmq.internal.WMQPoison .access$2200(WMQPoison.java:84) : com.ibm.msg.client.wmq.internal.WMQPoison$QmAttrs .<init>(WMQPoison.java:1381) : com.ibm.msg.client.wmq.internal.WMQPoison$QmAttrs .<init>(WMQPoison.java:1365) : com.ibm.msg.client.wmq.internal.WMQPoison .<init>(WMQPoison.java:153) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .initialisePoison(WMQConsumerShadow.java:1176) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .getMsg(WMQConsumerShadow.java:1301) : com.ibm.msg.client.wmq.internal.WMQConsumerShadow .getMsg(WMQConsumerShadow.java:1211) : com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow .receive(WMQSyncConsumerShadow.java:366) : com.ibm.msg.client.wmq.internal.WMQSession .loadMessageReference(WMQSession.java:1318) : com.ibm.msg.client.jms.internal.JmsSessionImpl .consume(JmsSessionImpl.java:2940) : com.ibm.msg.client.jms.internal.JmsSessionImpl .run(JmsSessionImpl.java:2631) : com.ibm.mq.jms.MQSession.run(MQSession.java:862) : com.ibm.mq.connector.inbound.WorkImpl.run(WorkImpl.java:265) : com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:399) : com.ibm.ws.util.ThreaPool$Worker.run(ThreadPool.java:1550)
Local fix
Problem summary
**************************************************************** USERS AFFECTED: This problem affects users of the v7 WebSphere MQ Resource Adapter who are using activation specifications to drive an MDB with messages from a WebSphere MQ queue. This includes users of the v7 WebSphere Application Server. Platforms affected: All Distributed (iSeries, all Unix and Windows) +Java **************************************************************** PROBLEM SUMMARY: This problem concerned a small timing window between when a message had been destructively removed from the source WebSphere MQ queue, and before the message was handed off to the user MDB's application for processing, that is, before the onMessage(Message)method was invoked. If a problem occurred during the retrieving and subsequent processing of the WebSphere MQ message BEFORE calling the application's onMessage(Message) method, an exception describing the problem would be seen in the application server's log files. It would then be expected that in the transactional environment the transaction would subsequently roll-back, making the message available again on the queue. However a code defect meant that if the application server's transaction manager was notified to commit the destructive get, resulting in the message being lost from the system. This problem could be encountered whenever the v7 WMQ Resource Adapter was being used to drive an MDB, and a problem was encountered after a destructive get had been completed to remove the message from the source queue, but before the application's onMessage() method was invoked. Any exceptions that occurred once onMessage() had been invoked would result in the application server correctly managing the transactional context; for example, when appropriate, the transaction would be marked as roll-back and the message made visible again on the source queue. The problem (and the specific stack trace listed above) was found by the WebSphere MQ test team, during a test case which involved the restarting of the queue manager channel during the operation of WebSphere Application Server. However, there are numerous reasons that could result in this message loss being encountered. The following scenarios have resulted in this issue being observed: 1) Channel stop initiated after a message with a backout count greater than 1 was received. Further communication is required with the queue manager to determine the destination backout threshold for poison message processing. This communication fails due to the channel quiescing, leading to the exception stack being printed to the application server log files, and the transaction being committed, losing the message. (2) The Resource Adapter receives a message containing String data encoded in a character set that the application server JVM cannot process. APAR IC72897 was introduced to change the default behaviour of the WMQ JMS client such that MQGET calls are performed without using the MQGMO_CONVERT option. This results in the messages arriving from the queue manager in their native CCSID encoding as stored on the queue. If this CCSID is not valid, or the application server JVM cannot correlate this to a valid Java CharacterSet, an exception is thrown to indicate the conversion failure. The destructive get of the message from the source queue is then committed, losing the message.
Problem conclusion
The code was altered such that when an exception occurs between getting the message from the queue and invoking the onMessage(Message) method, the transaction is marked for roll-back. This subsequent transactional roll-back ensures that the message is not lost from the system. --------------------------------------------------------------- The fix is targeted for delivery in the following PTFs: v7.0 Platform Fix Pack 7.0.1.5 -------- -------------------- Windows U200324 AIX U839183 HP-UX (PA-RISC) U839621 HP-UX (Itanium) U839626 Solaris (SPARC) U839622 Solaris (x86-64) U839628 iSeries tbc_p700_0_1_5 Linux (x86) U839623 Linux (x86-64) U839627 Linux (zSeries) U839624 Linux (Power) U839625 The latest available maintenance can be obtained from 'WebSphere MQ Recommended Fixes' http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006037 If the maintenance level is not yet available, information on its planned availability can be found in 'WebSphere MQ Planned Maintenance Release Dates' http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006309 ---------------------------------------------------------------
Temporary fix
Comments
APAR Information
APAR number
IC74733
Reported component name
WMQ WINDOWS V7
Reported component ID
5724H7220
Reported release
700
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2011-02-28
Closed date
2011-03-25
Last modified date
2011-03-25
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
WMQ WINDOWS V7
Fixed component ID
5724H7220
Applicable component levels
R700 PSY
UP
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSDEZSF","label":"IBM WebSphere MQ Managed File Transfer for z\/OS"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"7.0","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
31 March 2023