4.9.2 PortableServer.POAのメソッド
-
org.omg.PortableServer.Servant p_servant)
このメソッドは,バイト配列で構成されるオブジェクトIDを生成して返します。
生成したオブジェクトIDとp_servantに指定したサーバントはアクティブオブジェクトマップに登録されます。POAにUNIQUE_IDポリシーがあり,p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は,ServantAlreadyActive例外が発生します。
このメソッドを使用するには,POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。SYSTEM_IDポリシーとRETAINポリシーがない場合は,WrongPolicy例外が発生します。
-
p_servant
アクティブオブジェクトマップに登録するサーバント
-
-
byte[ ] id, org.omg.PortableServer.Servant p_servant)
このメソッドは,idで指定したオブジェクトを活性化して,そのオブジェクトをp_servantで指定したサーバントにアクティブオブジェクトマップの中で対応づけます。アクティブオブジェクトマップの中ですでにそのオブジェクトにサーバントがバインドされている場合は,ObjectAlreadyActive例外が発生します。POAにUNIQUE_IDポリシーがあり,p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は,ServantAlreadyActive例外が発生します。
このメソッドを使用するには,POAにRETAINポリシーが必要です。RETAINポリシーがない場合はWrongPolicy例外が発生します。
-
id
活性化するオブジェクトのオブジェクトID
nullを指定しても,BAD_PARAM例外は発生しません。
注
オブジェクトIDの長さは,512を2の(サーバエンジン数 -1)乗で割ったサイズ(単位:バイト)以下にしてください。
上記のサイズを超える値を指定した場合,osagentとの通信が失敗することがあります。
-
p_servant
アクティブオブジェクトマップに登録するサーバント
-
-
org.omg.PortableServer.ImplicitActivationPolicy
create_implicit_activation_policy(
org.omg.PortableServer.ImplicitActivationPolicyValue value)
このメソッドは,指定した値のImplicitActivationPolicyオブジェクトを返します。
POA生成時にImplicitActivationPolicyを指定しなかった場合のデフォルトはNO_IMPLICIT_ACTIVATIONです。
-
value
IMPLICIT_ACTIVATIONを設定すると,POAはサーバントの暗黙的活性化をサポートします。この場合,SYSTEM_IDポリシーとRETAINポリシーも必要です。NO_IMPLICIT_ACTIVATIONを設定すると,POAはサーバントの暗黙的活性化をサポートしません。
-
-
org.omg.CORBA.Object create_reference(
String intf)
このメソッドは,POAが生成したObjectIdの値とintfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。intfは生成されるオブジェクトリファレンスのtype_idになります。intfにNULL文字列を指定することもできます。このメソッドを呼び出しても活性化は起こりません。intfに指定した値が,オブジェクトの最も派生したインタフェースを識別するものでもなく,派生元インタフェースのどれかを識別するものでもない場合は,このメソッドの動作は不定です。
このメソッドを使用するには,POAにSYSTEM_IDポリシーが必要です。SYSTEM_IDポリシーがない場合はWrongPolicy例外が発生します。
-
intf
生成するオブジェクトのクラスのリポジトリインタフェースID
-
-
org.omg.CORBA.Object create_reference_with_id(
byte[ ] oid, String intf)
このメソッドは,oidに指定した値とintfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。intfは生成されるオブジェクトリファレンスのtype_idになります。intfにNULLを指定することもできます。intfに指定した値が,オブジェクトの最も派生したインタフェースを識別するものでもなく,派生元インタフェースのどれかを識別するものでもない場合は,このメソッドの動作は不定です。このメソッドを呼び出しても活性化は起こりません。必要であれば,このメソッドが返すオブジェクトリファレンスを複数のクライアントに渡して,そのリファレンスをクライアントからリクエストすることによってオブジェクトを活性化したり,デフォルトサーバントを使用したりできます。それは適用するポリシーに依存します。
-
oid
リファレンスを生成するオブジェクトのオブジェクトID
-
intf
生成するオブジェクトのクラスのリポジトリインタフェースID
-
-
org.omg.PortableServer.IdAssignmentPolicy
org.omg.PortableServer.IdAssignmentPolicyValue value)
このメソッドは,指定した値のIdAssignmentPolicyオブジェクトを返します。
POA生成時にIdAssignmentPolicyを指定しなかった場合のデフォルトはSYSTEM_IDです。
-
value
USER_IDを設定すると,POAで生成したオブジェクトに,アプリケーションだけがオブジェクトIDを割り当てます。SYSTEM_IDを設定すると,POAで生成したオブジェクトに,POAだけがオブジェクトIDを割り当てます。
-
-
org.omg.PortableServer.IdUniquenessPolicy
org.omg.Po rtableServer.IdUniquenessPolicyValue value)
このメソッドは,指定した値のIdUniquenessPolicyオブジェクトを返します。
POA生成時にIdUniquenessPolicyを指定しなかった場合のデフォルトはUNIQUE_IDです。
-
value
UNIQUE_IDを設定すると,POAが活性化するサーバントはすべてオブジェクトIDを一つだけサポートします。MULTIPLE_IDを設定すると,POAが活性化するサーバントはそれぞれ一つ以上のオブジェクトIDをサポートできます。
-
-
org.omg.PortableServer.LifespanPolicy create_lifespan_policy(
org.omg.PortableServer.LifespanPolicyValue value)
このメソッドは,指定した値のLifespanPolicyオブジェクトを返します。
POA生成時にLifespanPolicyを指定しなかった場合のデフォルトはTRANSIENTです。
-
value
TRANSIENTを設定した場合,POAにインプリメントされたオブジェクトは,そのオブジェクトを最初に作成したPOAインスタンスより長くは存続できません。一度トランジェントPOAを非活性化したあとでそのPOAから生成したオブジェクトリファレンスを使用しようとすると,OBJECT_NOT_EXIST例外が発生します。PERSISTENTを設定した場合,POAにインプリメントされたオブジェクトは,そのオブジェクトを最初に作成したPOAインスタンスより長く存続できます。
-
-
org.omg.PortableServer.POA create_POA(
String adapter_name,
org.omg.PortableServer.POAManager a_POAManager,
org.omg.CORBA.PolicyList[ ] policies)
このメソッドは,a_POAManagerに指定したオブジェクトの子オブジェクトとしてPOAをadapter_nameに指定した名前で新規作成します。新規作成したPOAは,create_POAが呼び出されたPOAオブジェクトの子オブジェクトです。指定した親オブジェクトにすでに同名の子POAがある場合は,PortableServer.AdapterAlreadyExists例外が発生します。
指定したポリシーは,新規作成したPOAに対応づけられ,新規作成したPOAの動作を制御します。
-
adapter_name
新規作成するPOAを指定する名前
- 注
-
POA名(完全階層パス名)の長さは,512を2の(サーバエンジン数 -1)乗で割ったサイズ(単位:バイト)以下にしてください。
上記のサイズを超える値を指定した場合,osagentとの通信が失敗することがあります。
-
a_POAManager
新規作成するPOAのマネージャ
-
policies
新規作成するPOAに適用するポリシーの一覧
末尾の2個のパラメタには,NULLを指定できます。PortableServer.POAManagerを指定しなかった場合は,自動的に作成されて新規作成したPOAと対応づけられます。ポリシーを指定しなかった場合は,デフォルトのポリシーが使用されます。
ただし,次のどちらかの矛盾した設定の場合は,InvalidPolicy例外が発生しません。
-
BindSupportポリシーにBY_POAを指定していて,ライフスパンポリシーにPERSISTENTを指定していない場合。
-
BindSupportポリシーにBY_INSTANCEを指定していて,ライフスパンポリシーにPERSISTENTが指定していない場合。
-
-
org.omg.PortableServer.RequestProcessingPolicy
create_request_processing_policy(
org.omg.PortableServer.RequestProcessingPolicyValue value)
このメソッドは,指定した値のRequestProcessingPolicyオブジェクトを返します。
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例外をクライアントに返します。また,サーバントマネージャを使用する場合は,サーバントでHelper.narrow( )とPOA.deactivate_object( )を実行しないでください。二つ以上のクライアントからそのサーバントを呼び出した場合に,サーバがデッドロック状態になることがあります。
-
-
org.omg.PortableServer.ServantRetentionPolicy
create_servant_retention_policy(
org.omg.PortableServer.ServantRetentionPolicyValue value)
このメソッドは,指定した値のServantRetentionPolicyオブジェクトを返します。
POA生成時にServantRetentionPolicyを指定しなかった場合のデフォルトはRETAINです。
-
value
RETAINを設定した場合,POAは活性化したサーバントをアクティブオブジェクトマップの中に保持します。NON_RETAINを設定した場合,POAはサーバントを保持しません。
-
-
org.omg.PortableServer.ThreadPolicy create_thread_policy(
org.omg.PortableServer.ThreadPolicyValue value)
このメソッドは,指定した値のThreadPolicyオブジェクトを返します。
POA生成時にThreadPolicyを指定しなかった場合のデフォルトはORB_CTRL_MODELです。
-
value
ORB_CTRL_MODELを設定すると,ORBが制御するPOAのリクエストをORBがスレッドに割り当てます。マルチスレッド環境では,同時に複数のリクエストが複数のスレッドに割り当てられることもあります。SINGLE_THREAD_MODELを設定すると,POAへのリクエストは一つずつ順次処理されます。マルチスレッド環境では,POAからサーバントとサーバントマネージャに出されたすべてのリクエストは,マルチスレッドに透過的なコードを保証する方法で実行されます。
-
-
byte[ ] oid)
このメソッドは,oidで指定したオブジェクトを非活性化します。非活性化したあとも,そのオブジェクトに対するアクティブなリクエストがすべてなくなるまでは,そのオブジェクトはリクエストの処理を続けます。そのオブジェクトに対して実行中のリクエストがすべて終了したときに,そのオブジェクトのObjectIdがアクティブオブジェクトマップから削除されます。
サーバントマネージャがPOAに対応づけられている場合は,ObjectIdがアクティブオブジェクトマップから削除されたあとで,ServantActivator.etherealizeメソッドがそのオブジェクトと,対応づけられたサーバントに対して呼び出されます。エーテライズが完了するまで,必要に応じてそのオブジェクトの再活性化は抑止されます。しかし,このメソッドは,リクエストやエーテライズの完了を待たないで常に,指定したオブジェクトを非活性化した直後にリターンします。
このメソッドを使用するには,POAにRETAINポリシーが必要です。もしRETAINポリシーがなければ,WrongPolicy例外が発生します。
-
oid
非活性化するオブジェクトのオブジェクトID
-
-
boolean etherealize_objects, 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と同じORBに属する他POAからディスパッチされた呼び出しコンテキストにカレントスレッドがない場合,destroyメソッドは,アクティブなリクエストとetherealizeメソッドの呼び出しがすべて完了したあとでリターンします。
このパラメタにTrueを設定し,該当するPOAと同じORBに属する他POAからディスパッチされた呼び出しコンテキストにカレントスレッドがある場合,BAD_INV_ORDER例外が発生し,POAの破棄は発生しません。
-
-
org.omg.PortableServer.POA find_POA(
String adapter_name,
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例外が発生します。
-
-
org.omg.PortableServer.Servant get_servant( )
このメソッドは,POAに対応づけられたデフォルトサーバントを返します。対応づけられたサーバントがない場合は,NoServant例外が発生します。
RETAINポリシーまたはUSE_DEFAULT_SERVANT_MANAGERポリシーがなければ,WrongPolicy例外が発生します。
-
org.omg.PortableServer.ServantManager get_servant_manager( )
このメソッドは,POAに対応づけられたServantManagerオブジェクトを返します。対応づけられたサーバントマネージャがない場合は,NULLを返します。
このメソッドを使用するには,POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合はWrongPolicy例外が発生します。
-
org.omg.CORBA.Object id_to_reference(
byte[ ] oid)
このメソッドは,oidに指定したオブジェクトが現在アクティブであればオブジェクトリファレンスを返します。アクティブでなければ,ObjectNotActive例外が発生します。
このメソッドを使用するには,POAにRETAINポリシーが必要です。RETAINポリシーがない場合はWrongPolicy例外が発生します。
-
oid
リファレンスの取得対象オブジェクトのオブジェクトID
-
-
org.omg.PortableServer.Servant id_to_servant(
byte[ ] oid)
このメソッドの動作には次の3種類があります。
-
POAにRETAINポリシーがあり,アクティブオブジェクトマップに指定したオブジェクトがある場合は,そのオブジェクトに対応づけられたサーバントを返します。
-
POAにUSE_DEFAULT_SERVANTがあり,POAにデフォルトサーバントが登録されている場合は,登録されているデフォルトサーバントを返します。
-
上記以外の場合は,ObjectNotActive例外を出力します。
このメソッドを使用するには,POAにRETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーが必要です。RETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーがなければWrongPolicy例外が発生します。
パラメタの意味を次に示します。
-
oid
サーバントの取得対象オブジェクトのオブジェクトID
-
-
org.omg.PortableServer.Servant reference_to_servant(
org.omg.CORBA.Object reference)
このメソッドの動作には次の3種類があります。
-
POAにRETAINポリシーがあり,アクティブオブジェクトマップに指定したオブジェクトがある場合は,そのオブジェクトに対応づけられたサーバントを返します。
-
POAにUSE_DEFAULT_SERVANTポリシーがあり,POAにデフォルトサーバントが登録されている場合は,登録されているデフォルトサーバントを返します。
-
上記以外の場合は,ObjectNotActive例外を出力します。
このメソッドを使用するには,POAにRETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーが必要です。どちらのポリシーもない場合はWrongPolicy例外が発生します。
reference_to_servantで引数となるreferenceが,そのPOAで作られていないとWrongAdapter例外が発生します。
パラメタの意味を次に示します。
-
reference
サーバントの取得対象オブジェクト
-
-
org.omg.CORBA.Object reference)
このメソッドは,referenceに指定したオブジェクトにカプセル化されているObjectIdの値を返します。このメソッドは,referenceに指定したオブジェクトを作成したPOAに対して呼び出した場合だけ有効です。このメソッドの呼び出し先POAが,指定したオブジェクトを作成したPOAと異なる場合は,WrongAdapter例外が発生します。このメソッドを呼び出すときに,referenceパラメタで指定するオブジェクトがアクティブになっている必要はありません。
このメソッドがWrongPolicy例外も出力できるようにIDLでは規定されていますが,それは将来的な拡張性を考慮してのことです。
-
reference
ObjectIdの取得対象オブジェクト
-
-
org.omg.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の取得対象サーバント
-
-
org.omg.CORBA.Object servant_to_reference(
org.omg.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
リファレンスの取得対象サーバント
-
-
org.omg.PortableServer.Servant p_servant)
このメソッドは,POAに対応するデフォルトサーバントを設定します。指定したサーバントは,アクティブオブジェクトマップの中にサーバントが登録されていないリクエストすべてに対して適用されます。
このメソッドを使用するには,POAにUSE_DEFAULT_SERVANTポリシーが必要です。このポリシーがない場合は,WrongPolicy例外が発生します。
-
p_servant
デフォルトとして使用する,POAに対応するサーバント
-
-
org.omg.PortableServer.ServantManager imagr)
このメソッドは,POAに対応するデフォルトサーバントマネージャを設定します。このメソッドは,POAが作成されているときだけ呼び出せます。POAに対応するデフォルトサーバントマネージャがすでに設定されているときにこのメソッドを呼び出すと,BAD_INV_ORDER例外が発生します。
このメソッドを使用するには,POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがなければWrongPolicy例外が発生します。
-
imagr
POAのデフォルトとして使用するサーバントマネージャ
-
-
org.omg.PortableServer.AdapterActivator the_activator( )
このメソッドは,POAに対応づけられたアダプタアクティベータを返します。POAの作成直後は,POAにはアダプタアクティベータがありません。つまり,属性がNULLになります。システムによっては,ルートPOAの持つアクティベータの一つをアプリケーションに割り当てさせることができます。
-
void the_activatorv(
org.omg.PortableServer.AdapterActivator the_activator)
このメソッドは,the_activatorに指定したアダプタアクティベータを,POAに対応づけるAdapterActivatorオブジェクトとして設定します。アプリケーションは,アクティベータをルートPOAに割り当てることができます。
-
the_activator
POAに対応づけるアダプタアクティベータ
-
-
このメソッドは,POAを識別する属性を返します。この属性は,親POAを基準にPOAを識別する,読み取り専用の属性です。この属性は,POAを作成したときに割り当てられたものです。ルートPOAの名前はシステムに依存し,アプリケーションに依存するものではありません。
-
org.omg.PortableServer.POA the_parent( )
このメソッドは,該当するPOAの親POAを返します。ルートPOAの親はNULLです。
-
org.omg.Portableserver.POAManager the_POAManager( )
このメソッドは,POAに対応づけられたPOAマネージャを返します。
-
org.omg.CORBA.Policy[ ] the_policies( )
このメソッドは,該当するPOAに有効なポリシーをすべて返します。
Borlandはこのメソッドを,POAのインプリメンテーションに追加しました。このメソッドは,将来的にはOMGによってCORBAでPOAに格納される可能性があります。