The transaction voter interfaces are designed to provide mechanisms to notify application servers of distributed transaction outcomes and to veto atomic commitment during the first phase of the two-phase commit protocol. Transaction voters are application server components that support both these functions. Transaction voters are short-lived because they maintain no durable transaction state, however, they are allowed to vote against the commitment of a transaction if an object is in an inconsistent state on initiation of the prepare phase of the two-phase commit protocol.
The veto and event notification mechanisms are provided by transaction voter and transaction notification objects. These objects implement the ITransactionVoterBallotAsync and ITransactionVoterNotifyAsync interfaces, respectively. The ITransactionVoterBallotAsync interface is implemented by the MS DTC proxy and the ITransactionVoterNotifyAsync interface is implemented by a transaction voter. Both interfaces are exchanged as sinks when a transaction voter object is created. The following figure illustrates the creation of the transaction voter object.
Creation of a transaction voter object