22.11.2 PortableServer::POAのメソッド
-
PortableServer::ObjectId* activate_object(
PortableServer::Servant _p_servant);
このメソッドは,バイト配列で構成されるオブジェクトIDを生成して返します。
生成したオブジェクトIDと,_p_servantに指定したサーバントは,アクティブオブジェクトマップに登録されます。POAにUNIQUE_IDポリシーがあり,_p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は,ServantAlreadyActive例外が発生します。
このメソッドを使用するには,POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。もしSYSTEM_IDポリシーとRETAINポリシーがなければ,WrongPolicy例外が発生します。
-
_p_servant
アクティブオブジェクトマップに登録するサーバント
-
-
const PortableServer::ObjectId& _oid,
PortableServer::Servant _p_servant);
このメソッドは,_oidで指定したオブジェクトを活性化して,そのオブジェクトを_p_servantで指定したサーバントにアクティブオブジェクトマップの中で対応づけます。アクティブオブジェクトマップの中で,すでに_oidにバインドされたサーバントがある場合は,ObjectAlreadyActive例外が発生します。POAにUNIQUE_IDポリシーがあり,_p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は,ServantAlreadyActive例外が発生します。
このメソッドを使用するには,POAにRETAINポリシーが必要です。RETAINポリシーがなければWrongPolicy例外が発生します。
-
_oid
活性化するオブジェクトのオブジェクトID
-
_p_servant
アクティブオブジェクトマップに登録するサーバント
-
-
PortableServer::ImplicitActivationPolicy_ptr
create_implicit_activation_policy(
PortableServer::ImplicitActivationPolicyValue _value);
このメソッドは,_valueに指定したImplicitActivationPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にImplicitActivationPolicyを指定しなかった場合のデフォルトは,NO_IMPLICIT_ACTIVATIONです。
-
_value
IMPLICIT_ACTIVATIONを設定すると,POAはサーバントの暗黙的活性化をサポートします。この場合,SYSTEM_IDポリシーとRETAINポリシーも必要です。NO_IMPLICIT_ACTIVATIONを設定すると,POAはサーバントの暗黙的活性化をサポートしません。
-
-
CORBA::Object_ptr create_reference(
const char* _intf);
このメソッドは,POAが生成したObjectIdの値と_intfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。_intfは生成されるオブジェクトリファレンスのtype_idになります。_intfにNULLを指定することもできます。このメソッドを呼び出しても活性化は起こりません。_intfに指定した値が,オブジェクトの最下位派生インタフェースを識別するものでもなく,派生元インタフェースのどれかを識別するものでもない場合は,このメソッドの動作は不定です。返されたオブジェクトのPOA::reference_to_idメソッドを呼び出すとObjectIdが取得できます。
このメソッドを使用するには,POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。SYSTEM_IDポリシーとRETAINポリシーがなければWrongPolicy例外が発生します。
-
_intf
生成するオブジェクトのクラスのリポジトリインタフェースID
-
-
CORBA::Object_ptr create_reference_with_id(
const PortableServer::ObjectId& _oid, const char* _intf);
このメソッドは,_oidに指定した値と_intfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。_intfは生成されるオブジェクトリファレンスのtype_idになります。_intfにNULLを指定することもできます。intfに指定した値が,オブジェクトの最下位派生インタフェースを識別するものでもなく,派生元インタフェースのどれかを識別するものでもない場合は,このメソッドの動作は不定です。このメソッドを呼び出しても活性化は起こりません。必要であれば,このメソッドが返すオブジェクトリファレンスを複数のクライアントに渡して,そのリファレンスをクライアントからリクエストすることによってオブジェクトを活性化したり,デフォルトサーバントを使用したりできます。それは適用するポリシーに依存します。
POAにSYSTEM_IDポリシーがあり,ObjectId値がシステムによって,またはPOA用に生成されていない場合は,BAD_PARAMシステム例外が発生することがあります。
-
_oid
リファレンスを生成するオブジェクトのオブジェクトID
-
_intf
生成するオブジェクトのクラスのリポジトリインタフェースID
-
-
PortableServer::IdAssignmentPolicy_ptr
PortableServer::IdAssignmentPolicyValue _value);
このメソッドは,_valueに指定したIdAssignmentPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にIdAssignmentPolicyを指定しなかった場合,デフォルトはSYSTEM_IDです。
-
_value
USER_IDを設定すると,POAで生成したオブジェクトに,アプリケーションだけがオブジェクトIDを割り当てます。SYSTEM_IDを設定すると,POAで生成したオブジェクトに,POAだけがオブジェクトIDを割り当てます。
-
-
PortableServer::IdUniquenessPolicy_ptr
PortableServer::IdUniquenessPolicyValue _value);
このメソッドは,_valueに指定したIdUniquenessPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にIdUniquenessPolicyを指定しなかった場合,デフォルトはUNIQUE_IDです。
-
_value
UNIQUE_IDを設定すると,POAが活性化するサーバントはすべてオブジェクトIDを一つだけサポートします。MULTIPLE_IDを設定すると,POAが活性化するサーバントはそれぞれ一つ以上のオブジェクトIDをサポートできます。
-
-
PortableServer::LifespanPolicy_ptr create_lifespan_policy(
PortableServer::LifespanPolicyValue _value);
このメソッドは,_valueに指定したLifespanPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にLifespanPolicyを指定しなかった場合,デフォルトはTRANSIENTです。
-
_value
TRANSIENTを設定した場合,POAに実装されたオブジェクトは,そのオブジェクトを最初に作成したPOAインスタンスより長くは存続できません。一度トランジェントPOAを非活性化したあとで,そのPOAから生成したオブジェクトリファレンスを使用しようとすると,OBJECT_NOT_EXIST例外が発生します。PERSISTENTを設定した場合,POAに実装されたオブジェクトは,そのオブジェクトを最初に作成したPOAインスタンスより長く存続できます。
-
-
PortableServer::POA_ptr create_POA(
const char* _adapter_name,
PortableServer::POAManager_ptr _a_POAManager,
const CORBA::PolicyList& _policies);
このメソッドは,_a_POAManagerに指定したオブジェクトの子オブジェクトとして,POAを_adapter_nameに指定した名前で新規作成します。指定した親オブジェクトにすでに同名の子POAがある場合は,PortableServer::AdapterAlreadyExists例外が発生します。
_policiesに指定したポリシーは,新規作成したPOAに対応づけられ,新規作成したPOAの動作を制御します。矛盾したポリシーを設定した場合は,InvalidPolicy例外が発生します。
-
_adapter_name
新規作成するPOAを指定する名前
-
_a_POAManager
新規作成するPOAの親POAオブジェクト
-
_policies
新規作成するPOAに適用するポリシーの一覧
-
-
PortableServer::RequestProcessingPolicy_ptr
create_request_processing_policy(
PortableServer::RequestProcessingPolicyValue _value);
このメソッドは,_valueに指定したRequestProcessingPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にRequestProcessingPolicyを指定しなかった場合,デフォルトはUSE_ACTIVE_OBJECT_MAP_ONLYです。
-
_value
USE_ACTIVE_OBJECT_MAP_ONLYを設定し,オブジェクトIDがアクティブオブジェクトマップにない場合は,OBJECT_NOT_EXIST例外をクライアントに返します。RETAINポリシーも必要です。
USE_DEFAULT_SERVANTを設定し,オブジェクトIDがアクティブオブジェクトマップになく(またはNON_RETAINポリシーがあり),デフォルトサーバントがset_servantメソッドでPOAに登録されている場合は,リクエストをデフォルトサーバントにディスパッチします。デフォルトサーバントが登録されていない場合は,OBJ_ADAPTER例外をクライアントに返します。MULTIPLE_IDポリシーも必要です。
USE_SERVANT_MANAGERを設定し,オブジェクトIDがアクティブオブジェクトマップになく(またはNON_RETAINポリシーがあり),サーバントマネージャがset_servant_managerメソッドでPOAに登録されている場合は,そのサーバントマネージャはサーバントを捜し出すか,例外を発生します。サーバントマネージャが登録されていない場合,OBJ_ADAPTER例外をクライアントに返します。
-
-
PortableServer::ServantRetentionPolicy_ptr
create_servant_retention_policy(
PortableServer::ServantRetentionPolicyValue _value);
このメソッドは,_valueに指定したServantRetentionPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にServantRetentionPolicyを指定しなかった場合,デフォルトはRETAINです。
-
_value
RETAINを設定した場合,POAは活性化したサーバントをアクティブオブジェクトマップの中に保持します。NON_RETAINを設定した場合,POAはサーバントを保持しません。
-
-
PortableServer::ThreadPolicy_ptr create_thread_policy(
PortableServer::ThreadPolicyValue _value);
このメソッドは,_valueに指定したThreadPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると,アプリケーションは,Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にThreadPolicyを指定しなかった場合,デフォルトはORB_CTRL_MODELです。
-
_value
ORB_CTRL_MODELを設定すると,ORBは,ORBが制御するPOAのリクエストをスレッドに割り当てます。マルチスレッド環境では,複数のスレッドを使用して,同時に複数のリクエストを送信できます。
SINGLE_THREAD_MODELを設定すると,POAへのリクエストは一つずつ順次処理されます。マルチスレッド環境では,POAからサーバントとサーバントマネージャに出されたすべてのリクエストは,マルチスレッドに透過的なコードを保証する方法で実行されます。
-
-
const PortableServer::ObjectId& _oid);
このメソッドは,_oidで指定したオブジェクトを非活性化します。非活性化したあとも,そのオブジェクトに対するアクティブなリクエストがすべてなくなるまでは,そのオブジェクトはリクエストの処理を続けます。そのオブジェクトに対して実行中のリクエストがすべて終了したときに,そのオブジェクトのObjectIdがアクティブオブジェクトマップから削除されます。
サーバントマネージャがPOAに対応づけられている場合は,ObjectIdがアクティブオブジェクトマップから削除されたあとで,ServantActivator::etherealizeメソッドが,そのオブジェクトと,対応づけられたサーバントに対して呼び出されます。エーテライズが完了するまで,必要に応じて,そのオブジェクトの再活性化は抑止されます。ただし,このメソッドは,リクエストやエーテライズの完了を待たないで,常に指定したオブジェクトを非活性化した直後にリターンします。
このメソッドを使用するには,POAにRETAINポリシーが必要です。RETAINポリシーがない場合,WrongPolicy例外が発生します。
-
_oid
非活性化するオブジェクトのオブジェクトID
-
-
CORBA::Boolean _etherealize_objects,
CORBA::Boolean _wait_for_completion);
このメソッドは,該当するPOAオブジェクトとそのすべての子POAを破棄します。最初に子POAを破棄し,最後にカレントコンテナPOAを破棄します。必要であれば,破棄したあとで同じプロセスに同じ名前でPOAを作成できます。
-
_etherealize_objects
このパラメタにTRUEを設定し,POAにRETAINポリシーがあり,サーバントマネージャがPOAに登録されている場合,アクティブオブジェクトマップ中の各アクティブオブジェクトでetherealizeメソッドが呼び出されます。etherealizeメソッドが呼び出される前に,見かけ上,POAの破棄が発生します。このため,POAにメソッドを呼び出すetherealizeメソッドは,OBJECT_NOT_EXIST例外を発生します。
-
_wait_for_completion
このパラメタにTRUEを設定し,カレントスレッドがPOAからディスパッチされた呼び出しでない場合,destroyメソッドは,アクティブなリクエストとetherealizeメソッドの呼び出しがすべて完了したあとでリターンします。
このパラメタにTRUEを設定し,カレントスレッドがPOAからディスパッチされた呼び出しの場合,destroyメソッドは,BAD_INV_ORDER例外が発生し,POAの破棄は発生しません。
-
-
PortableServer::POA_ptr find_POA(
const char* _adapter_name, CORBA::Boolean _activate_it);
このメソッドの呼び出し先のPOAオブジェクトが,指定した_adapter_nameのPOAの親である場合,子POAを返します。
-
_adapter_name
該当するPOAに対応するAdapterActivatorの名前
-
_activate_it
このパラメタにTRUEを設定し,_adapter_nameで指定したPOAの子POAがない場合は,POAのAdapterActivator(NULL以外の場合)が呼び出されます。子POAの活性化に成功した場合,そのPOAを返します。それ以外の場合は,AdapterNonExistent例外が発生します。
-
-
PortableServer::Servant get_servant();
このメソッドは,POAに対応づけられたデフォルトサーバントを返します。対応づけられたサーバントがない場合,NoServant例外が発生します。このメソッドを使用するには,POAにUSE_DEFAULT_SERVANTポリシーが必要です。USE_DEFAULT_SERVANTポリシーがない場合,WrongPolicy例外が発生します。
-
PortableServer::ServantManager_ptr get_servant_manager();
このメソッドは,POAに対応づけられたServantManagerオブジェクトへのポインタを返します。対応づけられたサーバントマネージャがない場合,NULLを返します。このメソッドを使用するには,POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合,WrongPolicy例外が発生します。
-
CORBA::Object_ptr id_to_reference(
PortableServer::ObjectId& _oid);
このメソッドは,_oidに指定したオブジェクトがアクティブであればオブジェクトリファレンスを返します。アクティブでなければ,ObjectNotActive例外が発生します。このメソッドを使用するには,POAにRETAINポリシーが必要です。RETAINポリシーがない場合,WrongPolicy例外が発生します。
-
_oid
リファレンスの取得対象オブジェクトのオブジェクトID
-
-
PortableServer::Servant id_to_servant(
PortableServer::ObjectId& _oid);
このメソッドの動作には次の3種類があります。
-
POAにRETAINポリシーがあり,アクティブオブジェクトマップに指定したオブジェクトがある場合,そのオブジェクトに対応づけられたサーバントを返します。
-
POAにUSE_DEFAULT_SERVANTポリシーがあり,POAにデフォルトサーバントが登録されている場合,登録されているデフォルトサーバントを返します。
-
上記以外の場合は,ObjectNotActive例外を出力します。
このメソッドを使用するには,POAにUSE_DEFAULT_SERVANTポリシーまたはRETAINポリシーが必要です。どちらのポリシーもない場合,WrongPolicy例外が発生します。
パラメタの意味を次に示します。
-
_oid
サーバントの取得対象オブジェクトのオブジェクトID
-
-
PortableServer::Servant reference_to_servant(
CORBA::Object_ptr _reference);
このメソッドの動作には次の3種類があります。
-
POAにRETAINポリシーがあり,アクティブオブジェクトマップに指定したオブジェクトがある場合,そのオブジェクトに対応づけられたサーバントを返します。
-
POAにUSE_DEFAULT_SERVANTポリシーがあり,POAにデフォルトサーバントが登録されている場合,登録されているデフォルトサーバントを返します。
-
上記以外の場合は,ObjectNotActive例外を出力します。
このメソッドを使用するには,POAにRETAINポリシー,またはUSE_DEFAULT_SERVANTポリシーが必要です。どちらのポリシーもない場合,WrongPolicy例外が発生します。
reference_to_servantで引数となるreferenceが,そのPOAで作られていないとWrongAdapter例外が発生します。
パラメタの意味を次に示します。
-
_reference
サーバントの取得対象オブジェクト
-
-
PortableServer::ObjectId* reference_to_id(
CORBA::Object_ptr _reference);
このメソッドは,_referenceに指定したオブジェクトにカプセル化されているObjectIdの値を返します。このメソッドは,_referenceに指定したオブジェクトを作成したPOAに対して呼び出した場合だけ有効です。このメソッドの呼び出し先POAが,指定したオブジェクトを作成したPOAと異なる場合,WrongAdapter例外が発生します。このメソッドを呼び出すときに,_referenceパラメタで指定するオブジェクトがアクティブになっている必要はありません。
このメソッドがWrongPolicy例外も出力するようにIDLでは規定されていますが,それは将来的な拡張性を考慮してのことです。
-
_reference
ObjectIdの取得対象オブジェクト
-
-
PortableServer::ObjectId* servant_to_id(
PortableServer::Servant _p_servant);
このメソッドの動作には次の4種類があります。
-
POAにUNIQUE_IDポリシーがあり,_p_servantに指定したサーバントがアクティブである場合,そのサーバントに対応づけられたObjectIdを返します。
-
POAにIMPLICIT_ACTIVATIONポリシーがあり,MULTIPLE_IDポリシーがあるか,または_p_servantに指定したサーバントがアクティブでない場合,POAが生成したObjectId,およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して,そのObjectIdを返します。
-
POAにUSE_DEFAULT_SERVANTポリシーがあり,_p_servantに指定したサーバントがデフォルトサーバントである場合,現在の呼び出しに対応づけられたObjectIdを返します。
-
上記以外の場合は,ServantNotActive例外を出力します。
このメソッドを使用するには,USE_DEFAULT_SERVANTポリシーが必要です。このポリシーがない場合でも,RETAINポリシーと,UNIQUE_IDポリシー,またはIMPLICIT_ACTIVATIONポリシーの組み合わせがあればこのメソッドを使用できます。この条件を満たしていない場合は,WrongPolicy例外が発生します。
パラメタの意味を次に示します。
-
_p_servant
ObjectIdの取得対象サーバント
-
-
CORBA::Object_ptr servant_to_reference(
PortableServer::Servant _p_servant);
このメソッドの動作には次の4種類があります。
-
POAにRETAINポリシーとUNIQUE_IDポリシーがあり,_p_servantに指定したサーバントがアクティブな場合,そのサーバントを活性化するための情報をカプセル化しているオブジェクトリファレンスを返します。
-
POAにRETAINポリシーとIMPLICIT_ACTIVATIONポリシーがあり,さらに,MULTIPLE_IDポリシーがあるか,または_p_servantに指定したサーバントがアクティブでない場合,POAが生成したObjectId,およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して,オブジェクトリファレンスを返します。
-
このメソッドが,_p_servantに指定したサーバントへのリクエストを実行するコンテキストの中で呼び出された場合,現在の呼び出しに対応づけられたリファレンスを返します。
-
上記以外の場合は,ServantNotActive例外を出力します。
POAがディスパッチしたメソッドのコンテキストの外でこのメソッドを呼び出す場合は,RETAINポリシーと,UNIQUE_IDポリシーまたはIMPLICIT_ACTIVATIONポリシーが必要です。このメソッドが,_p_servantに指定したサーバントに対するリクエストを実行するコンテキストの中で呼び出されないで,さらに,上記のポリシーもない場合は,WrongPolicy例外が発生します。
パラメタの意味を次に示します。
-
_p_servant
リファレンスの取得対象サーバント
-
-
PortableServer::Servant _p_servant);
このメソッドは,POAに対応するデフォルトサーバントを設定します。指定したサーバントは,アクティブオブジェクトマップの中にサーバントが登録されていないすべてのリクエストに対して適用されます。
このメソッドを使用するには,POAにUSE_DEFAULT_SERVANTポリシーが必要です。USE_DEFAULT_SERVANTポリシーがない場合,WrongPolicy例外が発生します。
-
_p_servant
デフォルトとして使用する,POAに対応するサーバント
-
-
PortableServer::ServantManager_ptr _imagr);
このメソッドは,POAに対応するデフォルトサーバントマネージャを設定します。このメソッドは,POAが生成されたときだけ呼び出せます。POAに対応するサーバントマネージャがすでに設定されているときにこのメソッドを呼び出すと,BAD_INV_ORDER例外が発生します。
このメソッドを使用するには,POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合,WrongPolicy例外が発生します。
-
_imagr
POAのデフォルトとして使用するサーバントマネージャ
-
-
PortableServer::AdapterActivator_ptr the_activator();
このメソッドは,POAに対応づけられたアダプタアクティベータを返します。POAの作成直後は,POAにはアダプタアクティベータがありません。つまり,属性がNULLになります。システムによっては,ルートPOAの持つアクティベータの一つをアプリケーションに割り当てさせることができます。
-
void the_activator(
PortableServer::AdapterActivator_ptr _val);
このメソッドは,POAに対応するアダプタアクティベータを,指定されたものに設定します。
-
_val
POAに対応づけるアダプタアクティベータ
-
-
このメソッドは,POAを識別する属性を返します。この属性は,親POAを基準にPOAを識別する,read-onlyの属性です。この属性は,POAを作成したときに割り当てられたものです。ルートPOAの名前はシステムに依存し,アプリケーションには依存しません。
-
PortableServer::POA_ptr the_parent();
このメソッドは,該当するPOAの親POAへのポインタを返します。ルートPOAの親はnullです。
-
PortableServer::POAManager_ptr the_POAManager();
このメソッドは,POAに対応づけられたPOAマネージャへのポインタであるread-onlyの属性を返します。