1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
//File: CosTransactions.idl
//Part of the Transaction Service
#ifndef _COS_TRANSACTIONS_IDL_
#define _COS_TRANSACTIONS_IDL_
// omniORB specific pragmas to insert extra includes into the stub header.
#pragma hh #include "COS_sysdep.h"
#include <orb.idl>
#pragma prefix "omg.org"
module CosTransactions {
// Forward references for interfaces defined later in module
#ifdef __DEFINE_CURRENT__
interface Current;
#endif
interface TransactionFactory;
interface Control;
interface Terminator;
interface Coordinator;
interface RecoveryCoordinator;
interface Resource;
interface Synchronization;
interface SubtransactionAwareResource;
interface TransactionalObject;
// DATATYPES
enum Status {
StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
enum Vote {
VoteCommit,
VoteRollback,
VoteReadOnly
};
// 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;
};
// Heuristic exceptions
exception HeuristicRollback {};
exception HeuristicCommit {};
exception HeuristicMixed {};
exception HeuristicHazard {};
// Other transaction-specific exceptions
exception SubtransactionsUnavailable {};
exception NotSubtransaction {};
exception Inactive {};
exception NotPrepared {};
exception NoTransaction {};
exception InvalidControl {};
exception Unavailable {};
exception SynchronizationUnavailable {};
#ifdef __DEFINE_CURRENT__
// Current transaction
interface Current : CORBA::Current {
void begin()
raises(SubtransactionsUnavailable);
void commit(in boolean report_heuristics)
raises(
NoTransaction,
HeuristicMixed,
HeuristicHazard
);
void rollback()
raises(NoTransaction);
void rollback_only()
raises(NoTransaction);
Status get_status();
string get_transaction_name();
void set_timeout(in unsigned long seconds);
Control get_control();
Control suspend();
void resume(in Control which)
raises(InvalidControl);
};
#endif
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
);
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
#endif /* ifndef _COS_TRANSACTIONS_IDL_ */
|