3.4.5.1.1.1 Receiving a TXUSER_BEGINNER_MTAG_BEGIN Message

When the transaction manager communicating with an application facet receives a TXUSER_BEGINNER_MTAG_BEGIN (section 2.2.8.1.1.2) message, the transaction manager communicating with an application facet MUST perform the following actions:

  • If the connection state is Idle:

    • Set the connection state to Beginning Transaction.

    • If the transaction manager does not have sufficient memory available to process the message:

      • Send a TXUSER_BEGINNER_MTAG_BEGIN_NO_MEM (section 2.2.8.1.1.4) message using the connection.

      • Set the connection state to Ended.

    • Otherwise:

      • Create a transaction object using the transaction settings provided in the message:

        • Use the isoLevel field as the Isolation Level value of the transaction.

        • Use the dwTimeout field as the Timeout value of the transaction.

        • Use the szDesc field as the Description value of the transaction.

        • Use the isoFlags field as the Isolation Flags value of the transaction.

      • Create a new GUID as specified in [RFC4122] and assign it to the Transaction Object.Identifier field of the transaction object.

      • Add the connection to the connection list of the transaction.

      • Set the Transaction field of the connection to the transaction object.

      • Create a new Enlistment object with the following values:

        • The transaction manager communicating with an application facet

        • The transaction object

        • The connection

      • Set the Enlistment field of the connection to the new Enlistment object.

      • Signal the Create Transaction (section 3.2.7.13) event on the Core Transaction Manager Facet (section 1.3.3.3.1) with the Enlistment object.

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