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

Troubleshooting Java/JMS SSL Configurations - Middleware News

 This document is intended to help diagnose WebSphere MQ V7 Java™ or JMS SSL setup errors. It lists most of the common configuration errors that can cause an SSL connection from a Java/JMS client to a queue manager to fail, and gives the course of action to resolve the problem. In each case the error can be diagnosed by a combination of the error seen in the client log - either a console output, trace file or SystemOut.log file - and the queue manager's error logs. The document is quite long, so the easiest way to find the potential error is to search for one of the errors seen in this list, then filter this list using the error from the opposite end of the channel. All cases here assume that 2-way authentication is being attempted (SSLCAUTH set to REQUIRED on the queue manager's SVRCONN channel). This is the default, and the errors are very similar for 1-way authentication (SSLCAUTH set to OPTIONAL). Symptom Instructions on collecting documentation...

Using telnet to test connectivity between IBM Websphere MQ Client and MQ server - Middleware News

You are having trouble connecting a WebSphere MQ client to a MQ server, receiving errors that you can not connect to the MQ queue manager. One of the first things to determine is if the two machines can communicate, and using the telnet tool is one way to accomplish it. Symptom Receiving errors which state that a queue manager is not found or not available. Connection errors. For example: AMQ9213, AMQ9524, AMQ9202 or AMQ9508 or MQRC =2059 0x0000080b MQRC_Q_MGR_NOT_AVAILABLE. Please note, this is by no means an exclusive list of errors related to this type a problem but just a sample of some of the more common error messages and codes that might occur. Cause One possible cause is that the two machines can not communicate. May be the IP address or hostname was not properly specified by the MQ client. The port number might be incorrect. A queue manager is not running at the desired host. The queue manager could be running, but the corresponding listener is not runnin...

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 ...