IBM Support

IT11534: V8: JAVA APPLICATION TRIES TO GET A MESSAGE WITH A SPECIFIC MESSAGE ID AND GETS THE FIRST ONE ON THE QUEUE

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • A Java application connects to a z/OS queue manager the BINDINGS
    transport, and calls MQQueue.get(MQMessage) requesting a message
    with a specific message identifier. Instead of the message that
    it requested, the application is actually given the first
    message on the queue.
    

Local fix

  • n/a
    

Problem summary

  • ****************************************************************
    USERS AFFECTED:
    This issue affects two categories of users:
    
    Category 1:
    -------------------
    Users of the IBM MQ V8 classes for Java who have applications
    which connect to an MQ for z/OS V800 queue manager using the
    BINDINGS transport and call either of the methods shown below:
    
    - MQQueue.get(MQMessage)
    - MQQueue.get(MQMessage, MQGetMessageOptions)
    
    to get a message with a specific message identifier, which is
    larger than 4kb, from a queue.
    
    Category 2:
    -------------------
    Users of the IBM MQ V8 classes for JMS who have applications
    which connect to an MQ for z/OS V800 queue manager using the
    BINDINGS transport, set a message selector for the property
    JMSMessageID to receive a specific message (which is larger than
    4kb) from a destination, and then call one of the following
    methods:
    
    - MessageConsumer.receive()
    - MessageConsumer.receive(long timeout)
    - MessageConsumer.receiveNoWait()
    
    
    Platforms affected:
    z/OS
    
    ****************************************************************
    PROBLEM DESCRIPTION:
    When a MQ classes for Java or classes for JMS application tried
    to get a message from a destination, where the message was
    larger than 4kb, the following sequence of events occurred:
    
    - The Java Message Queueing Interface (JMQI), used internally by
    the classes for Java and classes for JMS to communicate with a
    queue manager, issued an MQGET call using a 4kb buffer (the
    default buffer size used whenever either the classes for Java
    and classes for JMS try to get a message) , and the
    GetMessageOptions MQGMO_MATCH_MSG_ID and MQGMO_MATCH_CORREL_ID
    set.
    - As the message was larger than 4kb, the queue manager returned
    MQRC 2079 (MQRC_TRUNCATED_MSG_FAILED) back to the JMQI in
    response to the MQGET. The GetMessageOptions structure that the
    queue manager passed back to the JMQI contained a message token
    for that message, and the OriginalLength field in the MQMD that
    was passed back was set to the size of the message.
    - The JMQI then resized the internal buffer from 4kb to the size
    specified in the MQMD's OriginalLengh field, and then issued a
    second MQGET call. This MQGET call was made with the the new
    larger buffer and a GetMessageOptions structure that had the
    MQGMO_MATCH_MSG_TOKEN option set. However, the GetMessageOptions
    structure did not include the message token that was passed back
    from the queue manager.
    - The queue manager received the MQGET call that contained a
    GetMessageOptions structure which had the MQGMO_MATCH_MSG_TOKEN
    option set and no message token, and returned the first message
    on the queue.
    - The JMQI received the message returned by the queue manager
    and passed it back to the application.
    

Problem conclusion

  • The JMQI (used by the MQ classes for Java and classes for JMS)
    has been updated to ensure that when the BINDINGS transport is
    being used and an MQGET operation completes, the output fields
    in the GetMessageOptions structure:
    
    - GroupStatus
    - MsgToken
    - ResolvedQName
    - ReturnedLength
    - Segmentation
    - SegmentStatus
    
    passed back by the queue manager are reused for any subsequent
    MQGET calls that need to be issued by the JMQI in order to get
    the message requested by the application.
    
    ---------------------------------------------------------------
    The fix is targeted for delivery in the following PTFs:
    
    Version    Maintenance Level
    v8.0       8.0.0.4
    
    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

    IT11534

  • Reported component name

    WMQ BASE MULTIP

  • Reported component ID

    5724H7251

  • Reported release

    800

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2015-10-05

  • Closed date

    2015-10-09

  • Last modified date

    2015-10-09

  • 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 BASE MULTIP

  • Fixed component ID

    5724H7251

Applicable component levels

  • R800 PSY

       UP

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSYHRD","label":"IBM MQ"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"8.0.0.0","Edition":"","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

Document Information

Modified date:
09 October 2015