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