diff options
Diffstat (limited to 'lib/cosTransactions/src/CosTransactions.idl')
-rw-r--r-- | lib/cosTransactions/src/CosTransactions.idl | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/lib/cosTransactions/src/CosTransactions.idl b/lib/cosTransactions/src/CosTransactions.idl new file mode 100644 index 0000000000..11ec5cbf5b --- /dev/null +++ b/lib/cosTransactions/src/CosTransactions.idl @@ -0,0 +1,193 @@ +#ifndef _COSTRANSACTIONS_IDL +#define _COSTRANSACTIONS_IDL + +#pragma prefix "omg.org" + +module CosTransactions { + +// DATATYPES + enum Status { + StatusActive, + StatusMarkedRollback, + StatusPrepared, + StatusCommitted, + StatusRolledBack, + StatusUnknown, + StatusNoTransaction, + StatusPreparing, + StatusCommitting, + StatusRollingBack + }; + + enum Vote { + VoteCommit, + VoteRollback, + VoteReadOnly + }; + + // Forward references for interfaces defined later in module + interface Control; + interface Terminator; + interface Coordinator; + interface Resource; + interface RecoveryCoordinator; + interface SubtransactionAwareResource; + interface TransactionFactory; + interface TransactionalObject; + // interface Synchronization; + + // Structure definitions + struct otid_t { + long formatID; /*format identifier. 0 is OSI TP */ + long bqual_length; + sequence <octet> tid; + }; + struct TransIdentity { + Coordinator coord; + Terminator term; + otid_t otid; + }; + struct PropagationContext { + unsigned long timeout; + TransIdentity current; + sequence <TransIdentity> parents; + any implementation_specific_data; + }; + // interface Current; + + // Standard exceptions + // Defined in orber/include/corba.hrl + // exception TransactionRequired {}; + // exception TransactionRolledBack {}; + // exception InvalidTransaction {}; + + // Heuristic exceptions + exception HeuristicRollback {}; + exception HeuristicCommit {}; + exception HeuristicMixed {}; + exception HeuristicHazard {}; + + // Exception from Orb operations + exception WrongTransaction {}; + + // Other transaction-specific exceptions + exception SubtransactionsUnavailable {}; + exception NotSubtransaction {}; + exception Inactive {}; + exception NotPrepared {}; + exception NoTransaction {}; + exception InvalidControl {}; + exception Unavailable {}; + exception SynchronizationUnavailable {}; + + interface TransactionFactory { + Control create(in unsigned long time_out); + Control recreate(in PropagationContext ctx); + }; + + interface Control { + Terminator get_terminator() + raises(Unavailable); + Coordinator get_coordinator() + raises(Unavailable); + }; + + interface Terminator { + void commit(in boolean report_heuristics) + raises( HeuristicMixed, + HeuristicHazard ); + void rollback(); + }; + + interface Coordinator { + + Status get_status(); + Status get_parent_status(); + Status get_top_level_status(); + + boolean is_same_transaction(in Coordinator tc); + boolean is_related_transaction(in Coordinator tc); + boolean is_ancestor_transaction(in Coordinator tc); + boolean is_descendant_transaction(in Coordinator tc); + boolean is_top_level_transaction(); + + unsigned long hash_transaction(); + unsigned long hash_top_level_tran(); + + RecoveryCoordinator register_resource(in Resource r) + raises(Inactive); + +// void register_synchronization (in Synchronization sync) +// raises(Inactive, SynchronizationUnavailable); + + void register_subtran_aware(in SubtransactionAwareResource r) + raises(Inactive, NotSubtransaction); + + void rollback_only() + raises(Inactive); + + string get_transaction_name(); + Control create_subtransaction() + raises(SubtransactionsUnavailable, Inactive); + + PropagationContext get_txcontext () + raises(Unavailable); + }; + + + interface RecoveryCoordinator { + Status replay_completion(in Resource r) + raises(NotPrepared); + }; + + interface Resource { + Vote prepare() + raises(HeuristicMixed, + HeuristicHazard); + void rollback() + raises( HeuristicCommit, + HeuristicMixed, + HeuristicHazard ); + void commit() + raises( NotPrepared, + HeuristicRollback, + HeuristicMixed, + HeuristicHazard ); + void commit_one_phase() + raises( HeuristicHazard, + HeuristicRollback, + HeuristicMixed); + void forget(); + }; + +// interface TransactionalObject { +// }; + +// interface Synchronization : TransactionalObject { +// void before_completion(); +// void after_completion(in CosTransactions::Status status); +// }; + + interface SubtransactionAwareResource : Resource { + void commit_subtransaction(in Coordinator parent); + void rollback_subtransaction(); + }; + +}; // End of CosTransactions Module + +module ETraP { + + // interface Server + interface Server : + CosTransactions::Coordinator, CosTransactions::Resource, + CosTransactions::RecoveryCoordinator, CosTransactions::Control { + }; +// interface Server : +// CosTransactions::Coordinator, CosTransactions::Resource, +// CosTransactions::RecoveryCoordinator, CosTransactions::Control, +// CosTransactions::Synchronization { +// }; + +}; // End of ETraP Module + +#endif |