3.7.2.4.5 Restriction
If the object is involved in a transaction when this method is invoked, there are restrictions on what type of processing can be done based on the reason the object is invoked. If the object was involved in a transaction, the activation policy is transaction
and the reason
code for the call is:
-
DR_TRANS_ABORTED
- No invocations on any CORBA objects are allowed in the method.
No
tpcall()
is allowed. Transactions cannot be suspended or begun. -
DR_TRANS_COMMITTING
- No invocations on any CORBA objects are allowed in the method.
No
tpcall()
is allowed. Transactions cannot be suspended or begun.
The reason for these restrictions is that the deactivation of
objects with activation policy transaction is controlled by a call
to the TP Framework from the transaction manager for the
transaction. When the call with reason
code
DR_TRANS_COMMITTING
is made, the transaction manager
is executing phase 1 (prepare) of the two-phase commit. At this
stage, it is not possible to issue a call to suspend a transaction
nor to initiate a new transaction. Since a call to a CORBA object
that was in another process would require that process to join the
transaction, and the transaction manager is already executing the
prepare phase, this would cause an error
1
. Since a call to a CORBA object that had no
transactional properties would require that the current transaction
be suspended, this would also cause an error. The same is true of a
tpcall()
.
Similarly, when the invocation with reason
code
DR_TRANS_ABORTED
is made, the transaction manager is
already aborting. While the transaction manager is aborting, it is
not possible to either suspend a transaction or initiate a new
transaction. The same restrictions apply as for
DR_TRANS_COMMITTING
.
Parent topic: Tobj_ServantBase::deactivate_object()