//PORTABLE OBJECT ADAPTER, Chapter 9 #include "CORBA_POA.idl" //added by umejava for making html #pragma prefix "omg.org" module PortableServer { interface Servant{}; interface Cookie{}; // forward reference interface POA; //native Servant; typedef sequence ObjectId; exception ForwardRequest { Object forward_reference; }; // ********************************************** // // Policy interfaces // // ********************************************** 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{ }; 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 ); }; // ************************************************** // // 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; Servant preinvoke( in ObjectId oid, in POA adapter, in CORBA::Identifier operation, out Cookie the_cookie ) raises ( ForwardRequest ); void postinvoke( in ObjectId oid, in POA adapter, in CORBA::Identifier 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; //-------------------------------------------------- // // Servant Manager 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 // // ************************************************** Object create_reference ( in CORBA::RepositoryId intf ) raises ( WrongPolicy ); Object create_reference_with_id ( in ObjectId oid, in CORBA::RepositoryId 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 ); }; // ************************************************** // // Current interface // // ************************************************** interface Current : CORBA::Current { exception NoContext { }; POA get_POA( ) raises ( NoContext ); ObjectId get_object_id( ) raises ( NoContext ); }; };