オブジェクトリファレンスは、以下の方法で生成できます。
■Servantオブジェクトの活性化前に作成する方法(直接作成)
サーバアプリケーションは、直接オブジェクトリファレンスをPOAオブジェクトのcreate_reference()/create_reference_with_id()メソッドで作成できます。この操作は、オブジェクトリファレンスだけを作成します。実際のアクティブなServantオブジェクトは、後からServantManagerオブジェクトで生成される場合もあります。
例
// オブジェクトリファレンスの生成 org.omg.CORBA.Object Obj = Poa.create_reference( "IDL:Intfid11:1.0" ); // ID指定によるオブジェクトリファレンスの生成 String userid = "USERID"; org.omg.CORBA.Object Obj = Poa.create_reference_with_id( userid.getBytes(), "IDL:Intfid11:1.0" );
注)ソース内のPoa:POAクラスのインスタンス
“IDL:Intfid11:1.0”:インタフェースリポジトリID
■Servantオブジェクトの活性化後に作成する方法(間接作成)
サーバアプリケーションは、activate_object()/activate_object_with_id()メソッドよりServantオブジェクトを活性化します。一度、Servantオブジェクトが活性化されると、サーバアプリケーションはServantオブジェクト/オブジェクトIDを指定し、servant_to_reference()/id_to_reference()メソッドを発行することにより容易にオブジェクトリファレンスを作成できます。また、POAオブジェクトがIMPLICIT_ACTIVATIONポリシで作成されていれば、servant_to_reference()を使用してリファレンスを生成した場合、自動的にServantオブジェクトがactivateされて、リファレンスが有効となります。
例
// Servantの生成 org.omg.PortableServer.Servant svt = new UserServant(); // IMPLICIT_ACTIVATIONポリシを指定している場合、自動的にactivateされる org.omg.CORBA.Object Obj = Poa.servant_to_reference( svt );
注) ソース内のPoaオブジェクト:POAクラスのインスタンス
一度オブジェクトリファレンスがクライアントに通知されると、クライアントの側からみるとそのオブジェクトリファレンスはオブジェクトの身元を持っていることになります。クライアントプログラムがそのリファレンスを使う限り、そのオブジェクトリファレンスで作られるリクエストは同一のオブジェクトのインスタンスに送信されます。