1#ifndef _COSTRANSACTIONS_IDL 2#define _COSTRANSACTIONS_IDL 3 4#pragma prefix "omg.org" 5 6module CosTransactions { 7 8// DATATYPES 9 enum Status { 10 StatusActive, 11 StatusMarkedRollback, 12 StatusPrepared, 13 StatusCommitted, 14 StatusRolledBack, 15 StatusUnknown, 16 StatusNoTransaction, 17 StatusPreparing, 18 StatusCommitting, 19 StatusRollingBack 20 }; 21 22 enum Vote { 23 VoteCommit, 24 VoteRollback, 25 VoteReadOnly 26 }; 27 28 // Forward references for interfaces defined later in module 29 interface Control; 30 interface Terminator; 31 interface Coordinator; 32 interface Resource; 33 interface RecoveryCoordinator; 34 interface SubtransactionAwareResource; 35 interface TransactionFactory; 36 interface TransactionalObject; 37 // interface Synchronization; 38 39 // Structure definitions 40 struct otid_t { 41 long formatID; /*format identifier. 0 is OSI TP */ 42 long bqual_length; 43 sequence <octet> tid; 44 }; 45 struct TransIdentity { 46 Coordinator coord; 47 Terminator term; 48 otid_t otid; 49 }; 50 struct PropagationContext { 51 unsigned long timeout; 52 TransIdentity current; 53 sequence <TransIdentity> parents; 54 any implementation_specific_data; 55 }; 56 // interface Current; 57 58 // Standard exceptions 59 // Defined in orber/include/corba.hrl 60 // exception TransactionRequired {}; 61 // exception TransactionRolledBack {}; 62 // exception InvalidTransaction {}; 63 64 // Heuristic exceptions 65 exception HeuristicRollback {}; 66 exception HeuristicCommit {}; 67 exception HeuristicMixed {}; 68 exception HeuristicHazard {}; 69 70 // Exception from Orb operations 71 exception WrongTransaction {}; 72 73 // Other transaction-specific exceptions 74 exception SubtransactionsUnavailable {}; 75 exception NotSubtransaction {}; 76 exception Inactive {}; 77 exception NotPrepared {}; 78 exception NoTransaction {}; 79 exception InvalidControl {}; 80 exception Unavailable {}; 81 exception SynchronizationUnavailable {}; 82 83 interface TransactionFactory { 84 Control create(in unsigned long time_out); 85 Control recreate(in PropagationContext ctx); 86 }; 87 88 interface Control { 89 Terminator get_terminator() 90 raises(Unavailable); 91 Coordinator get_coordinator() 92 raises(Unavailable); 93 }; 94 95 interface Terminator { 96 void commit(in boolean report_heuristics) 97 raises( HeuristicMixed, 98 HeuristicHazard ); 99 void rollback(); 100 }; 101 102 interface Coordinator { 103 104 Status get_status(); 105 Status get_parent_status(); 106 Status get_top_level_status(); 107 108 boolean is_same_transaction(in Coordinator tc); 109 boolean is_related_transaction(in Coordinator tc); 110 boolean is_ancestor_transaction(in Coordinator tc); 111 boolean is_descendant_transaction(in Coordinator tc); 112 boolean is_top_level_transaction(); 113 114 unsigned long hash_transaction(); 115 unsigned long hash_top_level_tran(); 116 117 RecoveryCoordinator register_resource(in Resource r) 118 raises(Inactive); 119 120// void register_synchronization (in Synchronization sync) 121// raises(Inactive, SynchronizationUnavailable); 122 123 void register_subtran_aware(in SubtransactionAwareResource r) 124 raises(Inactive, NotSubtransaction); 125 126 void rollback_only() 127 raises(Inactive); 128 129 string get_transaction_name(); 130 Control create_subtransaction() 131 raises(SubtransactionsUnavailable, Inactive); 132 133 PropagationContext get_txcontext () 134 raises(Unavailable); 135 }; 136 137 138 interface RecoveryCoordinator { 139 Status replay_completion(in Resource r) 140 raises(NotPrepared); 141 }; 142 143 interface Resource { 144 Vote prepare() 145 raises(HeuristicMixed, 146 HeuristicHazard); 147 void rollback() 148 raises( HeuristicCommit, 149 HeuristicMixed, 150 HeuristicHazard ); 151 void commit() 152 raises( NotPrepared, 153 HeuristicRollback, 154 HeuristicMixed, 155 HeuristicHazard ); 156 void commit_one_phase() 157 raises( HeuristicHazard, 158 HeuristicRollback, 159 HeuristicMixed); 160 void forget(); 161 }; 162 163// interface TransactionalObject { 164// }; 165 166// interface Synchronization : TransactionalObject { 167// void before_completion(); 168// void after_completion(in CosTransactions::Status status); 169// }; 170 171 interface SubtransactionAwareResource : Resource { 172 void commit_subtransaction(in Coordinator parent); 173 void rollback_subtransaction(); 174 }; 175 176}; // End of CosTransactions Module 177 178module ETraP { 179 180 // interface Server 181 interface Server : 182 CosTransactions::Coordinator, CosTransactions::Resource, 183 CosTransactions::RecoveryCoordinator, CosTransactions::Control { 184 }; 185// interface Server : 186// CosTransactions::Coordinator, CosTransactions::Resource, 187// CosTransactions::RecoveryCoordinator, CosTransactions::Control, 188// CosTransactions::Synchronization { 189// }; 190 191}; // End of ETraP Module 192 193#endif 194