オブジェクトが活性状態とは、POAオブジェクトの管理するAOM(Active Object Map)に、あるServantオブジェクトがオブジェクトIDと関連付けられて登録されている状態のことです。
Servantオブジェクトは、インスタンスとして生成されただけでは、POAオブジェクトに認識されないため、activate_object()やactivate_object_with_id()メソッドを使用して、オブジェクトIDとの関連付けをPOAオブジェクトに登録する必要があります。Servantオブジェクトを活性化する方法を以下に示します。
■明示的にServantオブジェクトを活性化する方法
Servantオブジェクトの作成(new)後に、activate_object()またはactivate_object_with_id()メソッドでAOMに登録できます。
【例】
// Servantの生成 org.omg.PortableServer.Servant svt = new UserServant(); // Servantの活性化 Poa.activate_object ( svt ); // ID指定によるServantの活性化 String userid = "USERID"; Poa.activate_object_with_id( userid.getBytes(), svt );
注)ソース内のPoaオブジェクトはPOAクラスのインスタンス
なお、活性化の際にはオブジェクトIDが必要になりますが、オブジェクトIDの割り付けは、IdAssignmentPolicyに従って処理されます。
SYSTEM_IDの場合
POAオブジェクトが自動的にオブジェクトIDを割り付けます。Servantオブジェクトを活性化する場合、activate_object()を使用してください。
USER_IDの場合
ユーザがオブジェクトIDを割り付けます。Servantオブジェクトを活性化する場合、activate_object_with_id()を使用してください。
■暗黙的にServantオブジェクトを活性化する方法
POAオブジェクトがIMPLICIT_ACTIVATIONポリシを持っている場合、servant_to_reference()メソッドを使用してリファレンスを生成すると、自動的にServantオブジェクトが活性化され、オブジェクトリファレンスが通知されます。暗黙的活性化については、“5.13.8 暗黙的活性化(Implicit Activation)”を参照してください。
【例】
// Servantの生成 org.omg.PortableServer.Servant svt = new UserServant(); // IMPLICIT_ACTIVATIONポリシを指定している場合 // 自動的にactivateされる org.omg.CORBA.Object Obj = Poa.servant_to_reference( svt );
注) ソース内のPoaオブジェクトはPOAクラスのインスタンス
なお、暗黙的活性化の場合、オブジェクトIDはPOAオブジェクトにより自動的に割り付けます。このため、IdAssignmentPolicyはSYSTEM_IDに設定しておく必要があります。