Summarizing XA calls

Here is a list of the calls that are made to the XA functions in a database client library as a result of the various MQI calls that control global units of work. This is not a complete description of the protocol described in the XA specification; it is provided as a brief overview.

Note that xa_start and xa_end calls are always called by IBM MQ code in the application process, whereas xa_prepare, xa_commit, and xa_rollback are always called from the queue manager agent process, amqzlaa0.

The xa_open and xa_close calls shown in this table are all made from the application process. The queue manager agent process calls xa_open in the circumstances described in Error conditions.

MQI call XA calls made with dynamic registration XA calls made without dynamic registration
First MQBEGIN
xa_open
xa_open
xa_start
Subsequent MQBEGIN No XA calls
xa_start
MQCMIT ( without ax_reg being called during the current global unit of work) No XA calls
xa_end
xa_prepare
xa_commit
xa_rollback
MQCMIT ( with ax_reg being called during the current global unit of work)
xa_end
xa_prepare
xa_commit
xa_rollback
Not applicable. No calls are made to ax_reg in non-dynamic mode.
MQBACK ( without ax_reg being called during the current global unit of work) No XA calls
xa_end
xa_rollback
MQBACK ( with ax_reg being called during the current global unit of work)
xa_end
xa_rollback
Not applicable. No calls are made to ax_reg in non-dynamic mode.
MQDISC, where MQCMIT or MQBACK was called first. If they were not, MQCMIT processing is first done during MQDISC.
xa_close
xa_close
Notes:
  1. For MQCMIT, xa_commit is called if xa_prepare is successful. Otherwise, xa_rollback is called.

Parent topic: XA dynamic registration