TUX.ALL - Global Transaction Timeout when using IBM MQ Series RM (Doc ID 766933.1)

Last updated on DECEMBER 05, 2016

Applies to:

Oracle Tuxedo
Information in this document applies to any platform.
Information in this document applies to any platform

Goal

DESCRIPTION:

When using IBM MQ Series Resource Manager, a transaction timeout occurs when MQPUT() is called. This happens when, inTuxedo, multiple processes are all contained within the same transaction. Two or more processes coordinated by Tuxedo in a single global transaction attempt to access MQSeries using the same transaction branch ID, or XID. However, the MQ Series Transaction Manager allows only one process to work on a transaction branch XID at a time. If Tuxedo attempts to start work on a transaction branch in one process while a previous process is still accessing it, MQSeries will block the second processes's xa_start call until the first has completed its work with the transaction. Therefore, on the Tuxedo side, this process that is blocked out by MQ Series ultimately times out.

According to the Tuxedo Development group, IBM MQ Series TM has mis-interpreted the XA specification. MQSeries allows only one process to work on a transaction branch XID at a time. This is a violation of the XA specs.

The manual page for xa_start() states:

"If another thread is accessing the calling thread's resource manager for the same branch, xa_start() may block and wait for the active thread to release control of the branch (via xa_end())."

and three paragraphs later states:

"An RM must guarantee that tightly-coupled threads are treated as a single entity with respect to its isolation policies and that no deadlock occurs within the branch among these tightly coupled threads."

Solution

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms