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.

Table 1. Summary of XA function calls
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.