3.2.5.6.1 Receiving an XAUSER_XACT_MTAG_OPEN Message

When the XA Subordinate Transaction Manager Facet receives an XAUSER_XACT_MTAG_OPEN message, it MUST perform the following actions:

  • If the connection state is Idle:

    • Set the connection state to Processing Open Request.

    • Attempt to find an XA Superior Object in the XA Superior Table referenced by this connection keyed by the guidXaRm field of the message.

    • If an Object is not found:

    • Otherwise:

      • Attempt to find XA Superior Enlistment Object in XA Superior Enlistment Table referenced by the XA Superior Object that meets one of the following conditions:

        • The XID field is set to the XAIdentifier field of the message.

        • The Coupling field of the XA Superior Enlistment Object is set to Tight and the XA Global Transaction Identifier field of the XID field of the XA Superior Enlistment Object is set to the GUID structure contained within the Data field of the XA_XID structure (section 2.2.1.3) contained within the XAIdentifier field of the XA_UOW structure (section 2.2.1.4) contained within the XAUow field of the message.

      • If an Object is not found:

        • Send an XAUSER_XACT_MTAG_OPEN_NOT_FOUND message using the connection.

        • Set the connection state to Ended.

      • Otherwise:

        • If the Child Branch Table referenced by the XA Superior Enlistment Object does not contain an XA Superior Child Branch Enlistment Object with a XID field set to the value of the XAIdentifier field of the message.

          • Send an XAUSER_XACT_MTAG_REQUEST_FAILED_BAD_PROTOCOL using the connection.

        • Otherwise:

          • Set the State field of receiving connection to Active.

          • Set the State field of the XA Superior Child Branch Enlistment Object to Active.

          • Set the XA Superior Child Branch Enlistment Object reference of the receiving connection to the found XA Superior Child Branch Enlistment Object.

          • Send an XAUSER_XACT_MTAG_OPENED message with the following argument:

  • Otherwise, the message MUST be processed as an invalid message as specified in section 3.1.6.