[Up: Design and Implementation of]
[Previous: POA] [Next: Bibliography]
// -*- c++ -*- #include <mico/policy.idl> #include <mico/current.idl> #pragma prefix "omg.org" module PortableServer { // forward reference interface POA; native Servant; typedef sequence<octet> ObjectId; exception ForwardRequest { Object forward_reference; }; /* * ************************************************** * * Policy Interfaces * * ************************************************** */ const CORBA::PolicyType THREAD_POLICY_ID = 16; const CORBA::PolicyType LIFESPAN_POLICY_ID = 17; const CORBA::PolicyType ID_UNIQUENESS_POLICY_ID = 18; const CORBA::PolicyType ID_ASSIGNMENT_POLICY_ID = 19; const CORBA::PolicyType IMPLICIT_ACTIVATION_POLICY_ID = 20; const CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21; const CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22; enum ThreadPolicyValue { ORB_CTRL_MODEL, SINGLE_THREAD_MODEL }; interface ThreadPolicy : CORBA::Policy { readonly attribute ThreadPolicyValue value; }; enum LifespanPolicyValue { TRANSIENT, PERSISTENT }; interface LifespanPolicy : CORBA::Policy { readonly attribute LifespanPolicyValue value; }; enum IdUniquenessPolicyValue { UNIQUE_ID, MULTIPLE_ID }; interface IdUniquenessPolicy : CORBA::Policy { readonly attribute IdUniquenessPolicyValue value; }; enum IdAssignmentPolicyValue { USER_ID, SYSTEM_ID }; interface IdAssignmentPolicy : CORBA::Policy { readonly attribute IdAssignmentPolicyValue value; }; enum ImplicitActivationPolicyValue { IMPLICIT_ACTIVATION, NO_IMPLICIT_ACTIVATION }; interface ImplicitActivationPolicy : CORBA::Policy { readonly attribute ImplicitActivationPolicyValue value; }; enum ServantRetentionPolicyValue { RETAIN, NON_RETAIN }; interface ServantRetentionPolicy : CORBA::Policy { readonly attribute ServantRetentionPolicyValue value; }; enum RequestProcessingPolicyValue { USE_ACTIVE_OBJECT_MAP_ONLY, USE_DEFAULT_SERVANT, USE_SERVANT_MANAGER }; interface RequestProcessingPolicy : CORBA::Policy { readonly attribute RequestProcessingPolicyValue value; }; /* * ************************************************** * * POAManager interface * * ************************************************** */ interface POAManager { exception AdapterInactive {}; enum State { HOLDING, ACTIVE, DISCARDING, INACTIVE }; void activate () raises (AdapterInactive); void hold_requests (in boolean wait_for_completion) raises (AdapterInactive); void discard_requests (in boolean wait_for_completion) raises (AdapterInactive); void deactivate (in boolean etherealize_objects, in boolean wait_for_completion) raises (AdapterInactive); State get_state (); // begin-mico-extension void add_managed_poa (in POA managed); void del_managed_poa (in POA managed); // end-mico-extension }; /* * ************************************************** * * AdapterActivator interface * * ************************************************** */ interface AdapterActivator { boolean unknown_adapter (in POA parent, in string name); }; /* * ************************************************** * * ServantManager interface * * ************************************************** */ interface ServantManager {}; interface ServantActivator : ServantManager { Servant incarnate (in ObjectId oid, in POA adapter) raises (ForwardRequest); void etherealize (in ObjectId oid, in POA adapter, in Servant serv, in boolean cleanup_in_progress, in boolean remaining_activations); }; interface ServantLocator : ServantManager { native Cookie; // typedef string Identifier; Servant preinvoke (in ObjectId oid, in POA adapter, in string operation, out Cookie the_cookie) raises (ForwardRequest); void postinvoke (in ObjectId oid, in POA adapter, in string operation, in Cookie the_cookie, in Servant the_servant); }; /* * ************************************************** * * POA interface * * ************************************************** */ interface POA { exception AdapterAlreadyExists {}; exception AdapterInactive {}; exception AdapterNonExistent {}; exception InvalidPolicy { unsigned short index; }; exception NoServant {}; exception ObjectAlreadyActive {}; exception ObjectNotActive {}; exception ServantAlreadyActive {}; exception ServantNotActive {}; exception WrongAdapter {}; exception WrongPolicy {}; /* * ************************************************** * * POA creation and destruction * * ************************************************** */ POA create_POA (in string adapter_name, in POAManager a_POAManager, in CORBA::PolicyList policies) raises (AdapterAlreadyExists, InvalidPolicy); POA find_POA (in string adapter_name, in boolean activate_it) raises (AdapterNonExistent); void destroy (in boolean etherealize_objects, in boolean wait_for_completion); /* * ************************************************** * * Factories for Policy objects * * ************************************************** */ ThreadPolicy create_thread_policy (in ThreadPolicyValue value); LifespanPolicy create_lifespan_policy (in LifespanPolicyValue value); IdUniquenessPolicy create_id_uniqueness_policy (in IdUniquenessPolicyValue value); IdAssignmentPolicy create_id_assignment_policy (in IdAssignmentPolicyValue value); ImplicitActivationPolicy create_implicit_activation_policy (in ImplicitActivationPolicyValue value); ServantRetentionPolicy create_servant_retention_policy (in ServantRetentionPolicyValue value); RequestProcessingPolicy create_request_processing_policy (in RequestProcessingPolicyValue value); /* * ************************************************** * * POA attributes * * ************************************************** */ readonly attribute string the_name; readonly attribute POA the_parent; readonly attribute POAManager the_POAManager; attribute AdapterActivator the_activator; /* * ************************************************** * * ServantManager registration * * ************************************************** */ ServantManager get_servant_manager () raises (WrongPolicy); void set_servant_manager (in ServantManager imgr) raises (WrongPolicy); /* * ************************************************** * * operations for the USE_DEFAULT_SERVANT policy * * ************************************************** */ Servant get_servant () raises (NoServant, WrongPolicy); void set_servant (in Servant p_servant) raises (WrongPolicy); /* * ************************************************** * * object activation and deactivation * * ************************************************** */ ObjectId activate_object (in Servant p_servant) raises (ServantAlreadyActive, WrongPolicy); void activate_object_with_id (in ObjectId id, in Servant p_servant) raises (ServantAlreadyActive, ObjectAlreadyActive, WrongPolicy); void deactivate_object (in ObjectId oid) raises (ObjectNotActive, WrongPolicy); /* * ************************************************** * * reference creation operations * * ************************************************** */ // typedef string RepositoryId; Object create_reference (in string intf) raises (WrongPolicy); Object create_reference_with_id (in ObjectId oid, in string intf) raises (WrongPolicy); /* * ************************************************** * * Identity mapping operations * * ************************************************** */ ObjectId servant_to_id (in Servant p_servant) raises (ServantNotActive, WrongPolicy); Object servant_to_reference (in Servant p_servant) raises (ServantNotActive, WrongPolicy); Servant reference_to_servant (in Object reference) raises (ObjectNotActive, WrongAdapter, WrongPolicy); ObjectId reference_to_id (in Object reference) raises (WrongAdapter, WrongPolicy); Servant id_to_servant (in ObjectId oid) raises (ObjectNotActive, WrongPolicy); Object id_to_reference (in ObjectId oid) raises (ObjectNotActive, WrongPolicy); // begin-mico-extension Object activate_for_this (in Servant serv); void poa_manager_callback (in POAManager::State newstate, in boolean etherealize_objects, in boolean wait_for_completion); Servant preinvoke (in Object for_obj); void postinvoke (); // end-mico-extension }; /* * ************************************************** * * Current interface * * ************************************************** */ interface Current : CORBA::Current { exception NoContext {}; POA get_POA () raises (NoContext); ObjectId get_object_id () raises (NoContext); // begin-mico-extension Object make_ref (); boolean iscurrent (); Servant get_serv (); // end-mico-extension }; };