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

IBM WebSphere MQ – Common install/uninstall issues for MQ Version on Windows - Middleware News

Creating a log file when you install or uninstall WebSphere MQ WebSphere MQ for Windows is installed using the Microsoft Installer (MSI). If you install the MQ server or client through launchpad , MQPARMS or setup.exe , then a log file is automatically generated in %temp% during installation. Alternatively you can supply parameters on the installation MSI command msiexec to generate a log file, or enable MSI logging system-wide (which generates MSI logs for all install and uninstall operations). If you uninstall through the Windows Add/Remove programs option, no log file is generated. You should either uninstall from the MSI command line and supply parameters to generate a log file, or enable MSI logging system-wide (which generates MSI logs for all install and uninstall operations). For details on how to enable MSI logging, see the following article in the WebSphere MQ product documentation: Advanced installation using msiexec For details on how to enable system-w