3.3.4.15 Resolving a Transaction
If the higher-layer business logic determines that it needs to manually resolve the outcome of a transaction, the application MUST perform the following steps:
If the transaction is not in either the Failed to Notify (section 3.2.1.3.13) or the In Doubt (section 3.2.1.3.12) state:
Return a failure result to the higher-layer business logic.
Otherwise:
Initiate a new CONNTYPE_TXUSER_RESOLVE (section 2.2.8.3.2) connection using the Transaction Manager Name field of the application.
If the transaction is in the Failed to Notify (section 3.2.1.3.13) state:
Send a TXUSER_RESOLVE_MTAG_FORGET_COMMITTED (section 2.2.8.3.2.5) message using the connection:
The guidTx field MUST be set to the Transaction Object.Identifier of the provided transaction.
Set the connection state to Awaiting Forget Response (section 3.3.1.11.3).
Otherwise, if the transaction is in the In Doubt (section 3.2.1.3.12) state:
If the higher-layer business logic wants to manually resolve the transaction outcome as Commit:
Send a TXUSER_RESOLVE_MTAG_CHILD_COMMIT (section 2.2.8.3.2.3) message using the connection:
The guidTx field MUST be set to the Transaction Object.Identifier of the provided transaction.
Set the connection state to Awaiting Commit Response (section 3.3.1.1.4).
Otherwise, if the higher-layer business logic wants to manually resolve the transaction outcome as Abort:
Send a TXUSER_RESOLVE_MTAG_CHILD_ABORT (section 2.2.8.3.2.2) message using the connection:
The guidTx field MUST be set to the Transaction Object.Identifier of the provided transaction.
Set the connection state to Awaiting Abort Response (section 3.3.1.1.5).