The transaction object supports ITransaction for committing or aborting a transaction directly. This enables the consumer to commit or abort at other than the current (lowest) level of a nested transaction. Calling ITransactionLocal::Commit or ITransactionLocal::Abort on the session is equivalent to calling ITransaction::Commit or ITransaction::Abort on a transaction object associated with the current transaction.
Calling Commit or Abort on the transaction object with the fRetaining flag set to TRUE implicitly begins a new unit of work and the transaction object remains valid. Calling Commit or Abort with fRetaining set to FALSE terminates the transaction and the transaction object enters a zombie state. At this point, the only valid action that can be performed on the transaction object is to release it.