IBM Support

IC75662: MQQUEUE.PUT() FAILS WITH RC 2334 MQRC_RFH_ERROR WHEN USING THE WEBSPHERE MQ V7.0 CLASSES FOR JAVA

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • When using the WebSphere MQ V7 classes for Java, the
    application putting messages to a queue fail with MQRC 2334
    (MQRC_RFH_ERROR).
    
    If WebSphere MQ File Transfer Edition (FTE) is moving messages
    to the Database Logger Reject Queue when the issue occurs, the
    FTE error logs will show the following messages:
    
    BFGDB0003E: A problem occurred with the database. The database
    driver reported the following details SQL State ?23000?,Error
    Code ?1400?, Message ?ORA-01400: cannot insert NULL into
    ("string")
    
    BFGDB0018E: An MQ problem occurred while the database logger
    was rejecting a message onto the reject queue. The reported
    reason code was MQRC_RFH_ERROR and the reported message
    text was: MQJE001: Completion Code '2', Reason '2334'.
    

Local fix

Problem summary

  • ****************************************************************
    USERS AFFECTED:
    This issue affects:
    
    - Users of WebSphere MQ File Transfer Edition (WMQ FTE) that
    have configured the Database Logger component with a Reject
    Queue and who process WebSphere MQ messages that have
    numerical data encoded in Encoding 546 (0x222), as indicated
    by the WebSphere MQ MQMD property Encoding.
    
    - Users of the WebSphere MQ V7 classes for Java that have
    applications which perform the following actions:
    
    - Get a message that does not contain an RFH2 header from
    a queue, using one of the following methods:
    * MQQueue.get(MQMessage)
    * MQQueue.get(MQMessage, MQGetMessageOptions)
    * MQQueue.get(MQMessage, MQGetMessageOptions, int)
    - Add a property to the message using one of the methods
    shown below:
    * MQMessage.setBooleanProperty(String, boolean)
    * MQMessage.setBooleanProperty(String,
    MQPropertyDescriptor, boolean)
    * MQMessage.setByteProperty(String, byte)
    * MQMessage.setByteProperty(String,
    MQPropertyDescriptor, byte)
    * MQMessage.setBytesProperty(String, byte[])
    * MQMessage.setBytesProperty(String,
    MQPropertyDescriptor, byte[])
    * MQMessage.setDoubleProperty(String, double)
    * MQMessage.setDoubleProperty(String,
    MQPropertyDescriptor, double)
    * MQMessage.setFloatProperty(String, float)
    * MQMessage.setFloatProperty(String,
    MQPropertyDescriptor, float)
    * MQMessage.setInt2Property(String,
    MQPropertyDescriptor, short)
    * MQMessage.setInt2Property(String, short)
    * MQMessage.setInt4Property(String, value)
    * MQMessage.setInt4Property(String,
    MQPropertyDescriptor, int)
    * MQMessage.setInt8Property(String, long)
    * MQMessage.setInt8Property(String,
    MQPropertyDescriptor, long)
    * MQMessage.setIntProperty(String, int)
    * MQMessage.setIntProperty(String,
    MQPropertyDescriptor, int)
    * MQMessage.setLongProperty(String, long)
    * MQMessage.setLongProperty(String,
    MQPropertyDescriptor, long)
    * MQMessage.setObjectProperty(String,
    MQPropertyDescriptor, Object)
    * MQMessage.setObjectProperty(String, Object)
    * MQMessage.setShortProperty(String,
    MQPropertyDescriptor, short)
    * MQMessage.setShortProperty(String, short)
    * MQMessage.setStringProperty(String,
    MQPropertyDescriptor, String)
    * MQMessage.setStringProperty(String, String)
    - Put the message to a new queue on a WebSphere MQ V7
    queue manager using one of the methods shown below:
    * MQQueue.put(MQMessage)
    * MQQueue.put(MQMessage, MQPutMessageOptions)
    
    where the Encoding property of the message is set to 546
    (0x222).
    
    Platforms affected:
    All Distributed (iSeries, all Unix and Windows) +Java
    ****************************************************************
    PROBLEM SUMMARY:
    When the WebSphere MQ FTE Database Logger moves a message to
    the Reject Queue, it uses the WebSphere MQ V7 classes for Java
    to:
    
    - Get the message from the queue it is currently on.
    - Add the String property:
    
    usr.WMQFTE_ReasonForRejection
    
    to the message, by calling the method:
    
    MQMessage.setStringProperty(String, String)
    
    - Put the new message to the Reject Queue by calling the
    method:
    
    MQQueue.put(MQMessage)
    
    
    When WebSphere MQ File Transfer Edition called:
    
    MQQueue.put(MQMessage)
    
    or an application using the WebSphere MQ V7 classes for Java
    called one of the following methods:
    
    MQQueue.put(MQMessage)
    MQQueue.put(MQMessage, MQPutMessageOptions)
    
    the classes for Java added an RFH2 header to the message,
    immediately after the MQMD, to store the message properties.
    String data in the header was written using Coded Character Set
    1208 and numerical data was encoded using Encoding 1.
    
    Due to the way header chaining works in WebSphere MQ, the Coded
    Character Set and Encoding properties within the MQMD indicate
    how the character set and numerical data in the next header
    should be interpreted.
    
    However, when the WebSphere MQ V7 classes for Java added the
    RFH2 header, they did not update the Coded Character Set and
    Encoding properties within the MQMD. This meant that the
    information in the MQMD was incorrect.
    
    When the WebSphere MQ V7 classes for Java eventually issued the
    MQPUT call, the queue manager looked at the value of the
    Version property within the RFH2. This is numerical data, so
    the queue manager used the Encoding property in the MQMD to
    determine how this data should be interpreted.
    
    The data in the RFH2 was encoding using Encoding 1. As the
    Encoding property in the MQMD was set to 546 (0x222) and not 1,
    then the WebSphere MQ queue manager was unable to read the
    Version property in the RFH2 correctly, and returned an
    MQException to either WebSphere MQ File Transfer Edition or the
    application using the WebSphere MQ V7 classes for Java,
    containing the Reason Code 2334 (MQRC_RFH_ERROR).
    

Problem conclusion

  • The WebSphere MQ V7 classes for Java have been updated to
    ensure that the Coded Character Set properties within the MQMD
    are updated correctly if an RFH2 header is added to store
    property information prior to the message being put onto a
    queue hosted by a WebSphere MQ V7 queue manager.
    
    The values of the Coded Character Set and Encoding properties
    that were originally in the MQMD are now copied into the Coded
    Character Set and Encoding properties in the RFH2 as well, to
    ensure that the header chaining works correctly.
    
    ---------------------------------------------------------------
    The fix is targeted for delivery in the following PTFs:
    
                       v7.0
    Platform           Fix Pack 7.0.1.6
    --------           --------------------
    Windows            U200328
    AIX                U840698
    HP-UX (PA-RISC)    U841555
    HP-UX (Itanium)    U841560
    Solaris (SPARC)    U841556
    Solaris (x86-64)   U841562
    iSeries            tbc_p700_0_1_6
    Linux (x86)        U841557
    Linux (x86-64)     U841561
    Linux (zSeries)    U841558
    Linux (Power)      U841559
    
    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

    IC75662

  • 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-04-07

  • Closed date

    2011-04-27

  • Last modified date

    2011-04-27

  • 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":"BU048","label":"IBM Software"},"Product":{"code":"SSCPQ63","label":"APAR \/ Maintenance"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"7.0","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
27 April 2011