[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
};
};