/** * File: Concurrency.idl * Content: corba definition of monitors and transactions * Author: LuisM Pena * Date: 28th November 2000 * Version: 0.51.00 * Last change: * **/ #ifndef CONCURRENCY_IDL #define CONCURRENCY_IDL #include "DomainMessage.idl" #include "StateTransfer.idl" module sensei { module middleware { module domains { typedef sensei::middleware::gms::GroupMemberIdList GroupMemberIdList; /***********************************************************************/ /************************* MONITOR *************************************/ /***********************************************************************/ exception MonitorException{}; interface Monitor { /** * Locks the monitor. * This locking is reentrant: the member acquiring it can lock it again. * As a consequence, if the member intends to access the monitor from * different threads, it will have to include the synchronization * by itself **/ void lock() raises (MemberStateException); /** * Unlocks the monitor; * @throws MonitorException if the monitor was not locked by this member **/ void unlock() raises (MonitorException, MemberStateException); }; /***********************************************************************/ /************************* GROUP MONITOR ******************************/ /***********************************************************************/ interface GroupMonitor : Monitor, ExtendedCheckpointable { }; /***********************************************************************/ /************************* TRANSACTIONS HANDLER ************************/ /***********************************************************************/ /** * Exception sent during a startTransaction operation when the group handler associated does not * allow transactions (behaviour is not MembersOnTransferExcludedFromGroup) */ exception TransactionException{}; interface TransactionsHandler { /** * Starts a transaction, locking first the given monitor. * Transactions can be nested, but nested transactions only end when the initial transaction * is finished. * A system on a transaction does not start any state transfer, and all the messages * sent by the group handler are queued until the transaction ends. As the result, messages * can be seen by other members in different views, and this interface is therefore only * allowed under mode MembersOnTransferExcludedFromGroup. * @exception MonitorException if the monitor is not valid * @exception TransactionException if transactions are not allowed */ void startTransaction(in Monitor locker) raises (MonitorException, TransactionException, MemberStateException); /** * Ends a transaction, unlocking the given monitor. The operation only takes place, in case * of nested transactions, when the initial transaction ends. * @exception MonitorException if the monitor used for the transaction has been unlocked inside * the transaction * @exception TransactionException if transactions are not allowed, or there is not any current transaction */ void endTransaction() raises (MonitorException, TransactionException, MemberStateException); }; }; }; }; #endif