CWSJY0003W warning messages in WebSphere Application Server SystemOut.log file

A CWSJY0003W warning message is logged in the WebSphere® Application Server Version 7.0 SystemOut.log file when an MDB processes JMS messages from IBM® WebSphere MQ.

Symptom

CWSJY0003W: IBM WebSphere MQ classes for JMS attempted to get a message for delivery to a message listener, that had previously been marked using browse-with-mark, however, the message is not available.

Cause

Activation specifications, and listener ports running in Application Server Facilities (ASF) mode, are used to monitor queues or topics hosted on IBM WebSphere MQ queue managers. Initially messages are browsed on either the queue or topic. When a message is found, a new thread is started which destructively gets the message and passes the message to an instance of a message-driven bean application for processing.

When the message is browsed, the queue manager marks the message for a period of time, and effectively hides the message from other application server instances. The time period that the message is marked for is determined by the queue manager attribute MARKINT, which by default is set to 5000 milliseconds (5 seconds). This means that, after an activation specification or listener port has browsed a message, the queue manager will wait for 5 seconds for the destructive get of the message to occur before allowing another application server instance to see that message and process it.

The following situation can occur:
  • An activation specification running on Application Server 1 browses message A on a queue.
  • The activation specification starts a new thread to process message A.
  • An event occurs on Application Server 1, which means that message A is still on the queue after 5 seconds.
  • An activation specification running on Application Server 2 now browses message A and starts a new thread to process message A.
  • The new thread running on Application Server 2 destructively gets message A, and passes it to a message-driven bean instance.
  • The thread running on Application Server 1 attempts to get message A, only to find that message A is no longer on the queue.
  • At this point, Application Server 1 reports the CWSJY0003W message.

Resolving the problem

There are two ways that you can resolve this issue:
  • Increase the value of queue manager attribute MARKINT to a higher value. The default value for MARKINT is 5000 milliseconds (5 seconds). Increasing this value gives an application server more time to destructively get a message after it is detected. Changing the MARKINT value affects all applications that connect to the queue manager, and browse messages before applications destructively get messages.
  • Change the value to true for the com.ibm.msg.client.wmq.suppressBrowseMarkMessageWarning property in WebSphere Application Server to suppress the CWSJY0003W warning message. To set the variable in WebSphere Application Server, open the administrative console and navigate to Servers -> Application Servers -> Java and Process Management -> Process Definition -> Java Virtual Machine -> Custom Properties -> New
    
     Name  =  com.ibm.msg.client.wmq.suppressBrowseMarkMessageWarning 
     Value = true 
Note: If an activation specification or listener port is connecting to IBM WebSphere MQ using IBM WebSphere MQ messaging provider migration mode the messages can be ignored. The design of this mode of operation means that this message can occur during normal operation.