Voting on a Transaction
As mentioned before, a transactional object votes whether to commit or abort the transaction by setting the value of a bit in the context object. That bit is called the consistency bit. The name is appropriate. Consistency is the only transaction property under the application’s objects control. COM+ can manage atomicity and the resource managers guarantee isolation and durability, but only the objects know whether the changes they make to the system state are consistent or if they encounter errors that merit aborting the transaction.
When COM+ creates a transactional object, it puts it in its own
private context and sets the context object consistency bit to
TRUE. As a result, if the object makes no explicit
attempt to set the consistency bit to FALSE, the
object’s votes to commit the transaction.
Tip
An object can actually share its context with other objects whose transaction setting is set to Disabled.
The object can set the value of the consistency bit by accessing the
context object and getting
hold of
IContextState
interface, defined as:
enum tagTransactionVote
{
TxCommit= 0,
TxAbort = TxCommit + 1
}TransactionVote;
interface IContextState : IUnknown
{
HRESULT SetDeactivateOnReturn([in] BOOL bDeactivate);
HRESULT GetDeactivateOnReturn([out]BOOL* pbDeactivate);
HRESULT SetMyTransactionVote ([in]TransactionVote txVote);
HRESULT GetMyTransactionVote ([out]TransactionVote* ptxVote);
}
IContextState is also discussed in Chapter 3, in the context of deactivating ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access