org.openorb.ots.Impl
Class SubCoordinator

java.lang.Object
  extended by org.omg.PortableServer.Servant
      extended by org.omg.CosTransactions.CoordinatorPOA
          extended by org.openorb.ots.Impl.Coordinator
              extended by org.openorb.ots.Impl.SubCoordinator
All Implemented Interfaces:
org.omg.CORBA.portable.InvokeHandler, CoordinatorOperations, ResourceOperations

public class SubCoordinator
extends Coordinator
implements ResourceOperations

This class is a coordinator implementation for an interposition

Author:
Jerome Daniel

Constructor Summary
SubCoordinator(Manager manager, XID xid, int time_out, Coordinator upper, org.omg.PortableServer.POA poa, org.omg.PortableServer.POA recovery_poa, org.apache.avalon.framework.logger.Logger logger)
          Constructor
 
Method Summary
 void commit_one_phase()
          If possible, the resource should commit all changes made as part of the transaction.
 void commit()
          If necessary, the resource should commit all changes made as part of the transaction.
 void forget()
          This operation is performed only if the resource raised a heuristic outcome exception to rollback, commit, or commit_one_phase.
 Vote prepare()
          This operation is invoked to begin the two-phase commit protocol on the resource.
 void removeItself()
          This operation is called to remove this object from the POA
 void rollback()
          If necessary, the resource should rollback all changes made as part of the transaction.
 
Methods inherited from class org.openorb.ots.Impl.Coordinator
commit_sub_transactions, create_subtransaction, desynchronize, get_parent_status, get_status, get_top_level_status, get_transaction_name, get_txcontext, getXID, hash_top_level_tran, hash_transaction, is_ancestor_transaction, is_descendant_transaction, is_related_transaction, is_same_transaction, is_top_level_transaction, register_resource, register_subtran_aware, register_synchronization, remove_subtran_listener, resources, rollback_only, rollback_sub_transactions, setStatus, setTerminator, subtran_resources, synchronize, updatePropagationContext
 
Methods inherited from class org.omg.CosTransactions.CoordinatorPOA
_all_interfaces, _invoke, _this, _this
 
Methods inherited from class org.omg.PortableServer.Servant
_default_POA, _get_delegate, _get_interface_def, _is_a, _non_existent, _object_id, _orb, _poa, _set_delegate, _this_object, _this_object
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SubCoordinator

public SubCoordinator(Manager manager,
                      XID xid,
                      int time_out,
                      Coordinator upper,
                      org.omg.PortableServer.POA poa,
                      org.omg.PortableServer.POA recovery_poa,
                      org.apache.avalon.framework.logger.Logger logger)
Constructor

Method Detail

prepare

public Vote prepare()
             throws HeuristicMixed,
                    HeuristicHazard
This operation is invoked to begin the two-phase commit protocol on the resource. The resource can respond in several ways, represented by the Vote result. If no persistent data associated with the resource has been modified by the transaction, the resource can return VoteReadOnly. After receiving this response, the Transaction Service is not required to perform any additional operations on this resource. Furthermore, the resource can forget all knowledge of the transaction. If the resource is able to write (or has already written) all the data needed to commit the transaction to stable storage, as well as an indication that it has prepared the transaction, it can return VoteCommit. After receiving this response, the Transaction Service is required to eventually perform either the commit or the rollback operation on this object. To support recovery, the resource should store the RecoveryCoordinator object reference in stable storage. The resource can return VoteRollback under any circumstances, including not having any knowledge about the transaction (which might happen after a crash). If this response is returned, the transaction must be rolled back. Furthermore, the Transaction Service is not required to perform any additional operations on this resource. After returning this response, the resource can forget all knowledge of the transaction. The resource reports inconsistent outcomes using the HeuristicMixed and HeuristicHazard exceptions. Heuristic outcomes occur when a resource acts as a sub-coordinator and at least one of its resources takes a heuristic decision after a VoteCommit return.

Specified by:
prepare in interface ResourceOperations
Throws:
HeuristicMixed
HeuristicHazard

rollback

public void rollback()
              throws HeuristicCommit,
                     HeuristicMixed,
                     HeuristicHazard
If necessary, the resource should rollback all changes made as part of the transaction. If the resource has forgotten the transaction, it should do nothing. The heuristic outcome exceptions are used to report heuristic decisions related to the resource. If a heuristic outcome exception is raised, the resource must remember this outcome until the forget operation is performed so that it can return the same outcome in case rollback is performed again. Otherwise, the resource can immediately forget all knowledge of the transaction.

Specified by:
rollback in interface ResourceOperations
Throws:
HeuristicCommit
HeuristicMixed
HeuristicHazard

commit

public void commit()
            throws NotPrepared,
                   HeuristicRollback,
                   HeuristicMixed,
                   HeuristicHazard
If necessary, the resource should commit all changes made as part of the transaction. If the resource has forgotten the transaction, it should do nothing. The heuristic outcome exceptions are used to report heuristic decisions related to the resource. If a heuristic outcome exception is raised, the resource must remember this outcome until the forget operation is performed so that it can return the same outcome in case commit is performed again. Otherwise, the resource can immediately forget all knowledge of the transaction. The NotPrepared exception is raised if the commit operation is performed without first performing the prepare operation.

Specified by:
commit in interface ResourceOperations
Throws:
NotPrepared
HeuristicRollback
HeuristicMixed
HeuristicHazard

commit_one_phase

public void commit_one_phase()
                      throws HeuristicHazard
If possible, the resource should commit all changes made as part of the transaction. If it cannot, it should raise the TRANSACTION_ROLLEDBACK standard exception. If a failure occurs during commit_one_phase, it must be retried when the failure is repaired. Since their can only be a single resource, the HeuristicHazard exception is used to report heuristic decisions related to that resource. If a heuristic exception is raised, the resource must remember this outcome until the forget operation is performed so that it can return the same outcome in case commit_one_phase is performed again. Otherwise, the resource can immediately forget all knowledge of the transaction.

Specified by:
commit_one_phase in interface ResourceOperations
Throws:
HeuristicHazard

forget

public void forget()
This operation is performed only if the resource raised a heuristic outcome exception to rollback, commit, or commit_one_phase. Once the coordinator has determined that the heuristic situation has been addressed, it should issue forget on the resource. The resource can forget all knowledge of the transaction.

Specified by:
forget in interface ResourceOperations

removeItself

public void removeItself()
This operation is called to remove this object from the POA

Overrides:
removeItself in class Coordinator