/**
* File: DomainGroupHandler.idl
* Content: UMA corba definition for the Domain Group Handler
* Author: LuisM Pena
* Date: 28th November 2000
* Version: 0.51.00
* Last change:
* 12th April 2001: state transfer inclusion
*
*
**/
#ifndef DOMAIN_GROUP_HANDLER_IDL
#define DOMAIN_GROUP_HANDLER_IDL
#include "Concurrency.idl"
#include "Properties.idl"
module sensei
{
module middleware
{
module domains
{
//bringing some declarations into scope ...
typedef sensei::middleware::gms::GroupHandler GroupHandler;
/***********************************************************************/
/************************* DOMAIN EXPULSION REASON *********************/
/***********************************************************************/
enum DomainExpulsionReason
{
GMSLeaveEvent, //event coming from the GMS, perhaps because the application has requested to leave the group
WrongPropertyAllowance, //the member uses a differente Properties policy that the group
WrongStaticSubgroupsComposition, //the member has not defined the same static subgroups that the group
WrongCoordinatorElectionPolicy, //the member uses a differente Coordinator election policy that the group
WrongBehaviourMode, //the member uses a differente Behaviour mode that the group
WrongDynamicPolicy, //the member uses a differente dynamic policy that the group
WrongSubgroupsTypes, //the member has for one or more subgroups different state transfer types than requested
SubgroupError //an error has been reported about a subgroup (exception accesing it)
};
/***********************************************************************/
/********************** SYNC CAST DOMAIN MESSAGE PROCESSED EXCEPTION ***/
/***********************************************************************/
exception SyncCastDomainMessageProcessedException
{
};
/***********************************************************************/
/************************* DOMAIN GROUP USER ***************************/
/***********************************************************************/
/**
* Interface to be implemented optionally by members using domains
*/
interface DomainGroupUser
{
/**
* Invoked when the DomainGroup is accepted into its subgroup
*/
void domainAccepted(in GroupMemberId id);
/**
* Invoked when the DomainGroup is expulsed from its subgroup
*/
void domainExpulsed(in DomainExpulsionReason reason);
/**
* Invoked when the DomainGroup is considered to have state
* @param assumed set to true if this member is assuming state, i.e, is not transfered
*/
void stateObtained(in boolean assumed);
/**
* Invoked when the a subgroup in the domain is not reachable. This
* call will be followed by a domainExpulsed call eventually.
* @param subgroupId the identity of the subgroup causing the problem
* @param reason an string explaining the problem
*/
void offendingSubgroup(in SubgroupId subgroup, in string reason);
};
/***********************************************************************/
/************************* DOMAIN GROUP HANDLER ************************/
/***********************************************************************/
/**
* GroupMember targetted as central instance to handle several subgroups
* Messages sent through this class must belong to the DomainMessage hierarchy
*
* - It allows to define several subgroups to be handled separately by one group.
* - The subgroups can be created/removed dynamically.
* - It includes the abstraction group/subgroups or domain/groups
* It supports several special features:
* -The sending of messages blocks the caller until the message is received
* -Reception of cast messages sent by the own member are not propagated to the
* subgroups: they just unblock the message sending.
* -PTP messages can be sent to all the subgroups in the group
* -State transfer support
* -Replica properties support
* -Transactions support
**/
interface DomainGroupHandler : GroupHandler, GroupMember, PropertiesHandler, SubgroupsHandler, TransactionsHandler
{
/**
* Sets the mode under view changes. It can only be set before the domain Group Handler joins a group,
* or an exception is thrown
*/
void setBehaviourMode(in BehaviourOnViewChanges mode)
raises (MemberStateException);
/**
* Sets a coordinator elector. It must be set before the DomainGroupHandler joins a group, or an
* exception is raised
*/
void setCoordinatorElector(in CoordinatorElector elector)
raises (MemberStateException);
/**
* Sets a listener to DomainGroup events. It must be set before the DomainGroupHandler joins a group, or an
* exception is raised
*/
void setDomainGroupUser(in DomainGroupUser user)
raises (MemberStateException);
/**
* Returns the list of stateful members. This operation can only be invoked on stateful members,
* or an exception is thrown
*/
GroupMemberIdList getStatefulMembers()
raises (MemberStateException);
/**
* Cast a message to the subgroup, and blocks until it is processed.
* @param normalProcessing set to true if the message is to be received through the normal
* processCastMessage. In that case, this call blocks until the message is processed.
* If it is false, the call blocks until the caller can process the operation, and
* when it finishes, it must call to syncCastDomainMessageProcessed
**/
boolean syncCastDomainMessage(in DomainMessage message, in boolean normalProcessing)
raises (MemberStateException);
/**
* Confirms that a message has been processed. Failing to call to this method after
* requesting syncCastDomainMessage with normalProcessing equal to false will avoid the
* normal flow of messages into the application, excluding eventually the member from the group
**/
void syncCastDomainMessageProcessed() raises(MemberStateException, SyncCastDomainMessageProcessedException);
};
};
};
};
#endif