Skip to main content

THE WMQ JAVA CLIENT THROWS A MQRC 2010 WHEN THE SPECIFIED BUFFERLENGTH IS LARGER THAN MAXMSGL ON THE CHANNEL - Middleware News

THE WMQ JAVA CLIENT THROWS A MQRC 2010 WHEN THE SPECIFIED BUFFERLENGTH IS LARGER THAN MAXMSGL ON THE CHANNEL - Middleware News


Error description


* If a WebSphere MQ classes for Java client specifies a
BufferLength value on a MQGET call that is larger than the
value that is defined for the MaxMsgLength (MAXMSGL) on the
channel, then it must result in a reason code of 2010
MQRC_DATA_LENGTH_ERROR and the message must remain on the
queue.

The V6 WebSphere MQ classes for Java Client allows the
application to receive the message from the queue. Although the
2010 error is thrown in the V6 client, it is consumed
internally and a second MQGET is performed with the
BufferLength reduced to a value equal to the channel's
MaxMsgLength. This means only a portion of the
message is delivered to the application and the rest of the
data is lost if MQGMO_ACCEPT_TRUNCATED_MSG option has been used
in the MQGMO structure.

Under similar circumstances, a V7.0 WebSphere MQ classes for
Java client also results in a 2010 error to be thrown and
consumed internally. After the 2010 is consumed internally, a
second MQGET is performed, but with the BufferLength reduced to
a zero(0) size. The V7.0 WebSphere MQ classes for Java then
provides the receiving application a 0 bytes length message,
and a 2079 MQRC_TRUNCATED_MSG_ACCEPTED exception:

com.ibm.mq.MQException: MQJE001: Completion Code '1', Reason
'2079'.

Local fix

* Here are 3 ways to avoid this problem:

1. Specify a Buffer Length value that is less than the MAXMSGL
property of the channel.
2. Increase the MAXMSGL property on the channel to a value
greater than the BufferLength specified in the get() call.
3. Do not use the MQGMO_ACCEPT_TRUNCATED_MSG option in the
MQGMO structure.

Problem summary

****************************************************************

USERS AFFECTED:

This issue affects users of the WebSphere MQ classes for Java
(both V6 and V7.0) who do a get() with
MQGMO_ACCEPT_TRUNCATED_MSG and BufferLength specified, and with
the MAXMSGL on the channel set to a value less than this
bufferLength size.

Platforms affected:

All Distributed (iSeries, all Unix and Windows) +Java
****************************************************************

PROBLEM SUMMARY:

When a WebSphere MQ classes for Java application performed a
get() with MQGMO_ACCEPT_TRUNCATED_MSG and BufferLength
specified, when the specified BufferLength was greater than the
MAXMSGL size defined on the channel, then the following
occurred:

(a) The V6 WebSphere MQ classes for Java client performed a
second MQGET to retrieve the message of length only up to
the channel's MAXMSGL value.

(b) The V7.0 WebSphere MQ classes for Java client performed a
second MQGET to retrieve a message of 0 bytes in length.


This resulted in the application receiving:

in case (a): A part of the message which was smaller than the
specified BufferLength

in case (b): A zero-byte length message

In both cases, this resulted in the application not being
provided with the full message, as stored on the the queue, and
with the message getting removed from the queue.

Problem conclusion

* The following changes have been made to the client code:

(a) When the specified BufferLength is greater than the
MaxMsgLength on the channel, the V6 WebSphere MQ classes for
Java client has been changed so that the user can now configure
the client classes to provide the application with a
MQCC_FAILED and MQRC_DATA_LENGTH_ERROR error codes, and prevent
the client from receiving the message.

This fix introduces a new system property called:

com.ibm.mq.alertAboutDataLengthError

This property can be set by passing it as a JVM argument, for
example:

java -Dcom.ibm.mq.alertAboutDataLengthError=true MyApplication

The default value of alertAboutDataLengthError is false, which
retains the client behaviour prior to this code change.

When com.ibm.mq.alertAboutDataLengthError=true is defined, the
V6 WebSphere MQ classes for Java informs the application of
the problem using a MQRC_DATA_LENGTH_ERROR code, and does not
allow the application to remove the message from the queue.

When com.ibm.mq.alertAboutDataLengthError=false, the V6
WebSphere MQ classes for Java behaves as before. The client
allows the application to receive the message from the queue.
Although the 2010 error is thrown in the V6 client, it is
consumed internally and a second MQGET is performed with the
BufferLength reduced to a value equal to the channel's
MaxMsgLength. This removes the message from the queue, with
the client application receiving only a portion of the message,
limited by the size of MaxMsgLength.

(b) When the specified BufferLength is greater than the
MaxMsgLength on the channel, the V7.0 WebSphere MQ classes for
Java will hereby inform the application using MQCC_FAILED and
MQRC_DATA_LENGTH_ERROR, and not allow it to receive the message
from the queue. There is no property which can override this
behaviour.

Comments

adsrerrapop

Popular posts from this blog

IBM Websphere MQ interview Questions Part 5

MQ Series: - It is an IBM web sphere product which is evolved in 1990’s. MQ series does transportation from one point to other. It is an EAI tool (Middle ware) VERSIONS:-5.0, 5.1, 5.3, 6.0, 7.0(new version). The currently using version is 6.2 Note: – MQ series supports more than 35+ operating systems. It is platform Independent. For every OS we have different MQ series software’s. But the functionality of MQ series Default path for installing MQ series is:- C: programfiles\BM\clipse\SDK30 C: programfiles\IBM\WebsphereMQ After installation it will create a group and user. Some middleware technologies are Tibco, SAP XI. MQ series deals with two things, they are OBJECTS, SERVICES. In OBJECTS we have • QUEUES • CHANNELS • PROCESS • AUTHENTICATION • QUERY MANAGER. In SERVICES we have LISTENERS. Objects: – objects are used to handle the transactions with the help of services. QUEUE MANAGER maintains all the objects and services. QUEUE: – it is a database structure ...

IBM Websphere MQ Reason code list / mq reason codes / websphere mq error codes / mq error messages

Reason code list ================= The following is a list of reason codes, in numeric order, providing detailed information to help you understand them, including: * An explanation of the circumstances that have caused the code to be raised * The associated completion code * Suggested programmer actions in response to the code * 0 (0000) (RC0): MQRC_NONE * 900 (0384) (RC900): MQRC_APPL_FIRST * 999 (03E7) (RC999): MQRC_APPL_LAST * 2001 (07D1) (RC2001): MQRC_ALIAS_BASE_Q_TYPE_ERROR * 2002 (07D2) (RC2002): MQRC_ALREADY_CONNECTED * 2003 (07D3) (RC2003): MQRC_BACKED_OUT * 2004 (07D4) (RC2004): MQRC_BUFFER_ERROR * 2005 (07D5) (RC2005): MQRC_BUFFER_LENGTH_ERROR * 2006 (07D6) (RC2006): MQRC_CHAR_ATTR_LENGTH_ERROR * 2007 (07D7) (RC2007): MQRC_CHAR_ATTRS_ERROR * 2008 (07D8) (RC2008): MQRC_CHAR_ATTRS_TOO_SHORT * 2009 (07D9) (RC2009): MQRC_CONNECTION_BROKEN * 2010 (07DA) (RC2010): MQRC_DATA_LENGTH_ERROR * 2011 (07DB) (RC2011): MQRC_DYNAMIC_Q_NAME_ERROR * 2012 (07DC) (RC201...

Installing IBM Integration Bus on Linux - Middleware News

Before you begin Check the readme.html file for any updates to these installation instructions; see the product readmes web page. Check that you have enough memory and disk space; see IBM Integration Bus system requirements. Check that you have completed any prerequisite steps; see Preparing the system. If you are using Red Hat Linux 6.5 with WebKitGTK version webkitgtk.x86_64 1.2.6-5.el6, complete the steps in the following topic to work around problems with the Eclipse SWT browser: IBM Integration Toolkit on RedHat 6.5 crashes with "JVM terminated. Exit code=160" error. If you are using Red Hat Linux 6.x or 7.x, you might need the GTK2 32-bit drivers installed on Linux; for more information, see IBM Integration Toolkit on Linux becomes unresponsive after opening a DFDL or XSD file. If you are using Red Hat Linux 7.1, complete the steps in the following topic to work around problems with the Eclipse SWT browser: Internal web browser in IBM Integration Toolkit ...