10.2.1 バインドプロセス中に行われる動作
サーバプログラムがcreate_POA()を実行すると,生成したPOAがスマートエージェントに登録されます。
この状態で,クライアントプログラムが静的bind()メソッドを呼び出した場合,VisiBroker ORBはプログラムのために幾つかの機能を実行し,スマートエージェントからオブジェクトインプリメンテーションの位置情報を得られます。クライアントとスマートエージェントの相互動作を図10-1に示します。
-
VisiBroker ORBは,リクエストされたインタフェースを提供するオブジェクトインプリメンテーションを探すためにスマートエージェントにコンタクトします。_bind()メソッド(C++)またはbind()メソッド(Java)の呼び出し時にオブジェクト名が指定されていたら,その名前はディレクトリサービス検索で使用します。「15. オブジェクト活性化デーモンの使用」で説明するOAD(オブジェクト活性化デーモン)にサーバオブジェクトが登録されている場合は,OADを起動しておく必要があります。
-
オブジェクトインプリメンテーションが見つかると,VisiBroker ORBは見つけたオブジェクトインプリメンテーションとクライアントプログラム間のコネクション確立を試みます。
-
コネクションの確立が成功すると,VisiBroker ORBはプロキシオブジェクトを生成して,そのオブジェクトのリファレンスを返します。クライアントはサーバオブジェクトと相互動作するプロキシオブジェクトのメソッドを呼び出します。
図10‒1 クライアントとスマートエージェントの相互動作
- 注
-
クライアントプログラムがサーバクラスのコンストラクタを呼び出すことはありません。その代わり,静的_bind()メソッド(C++),または静的bind()メソッド(Java)呼び出しによってオブジェクトリファレンスを取得できます。
- コードサンプル10-3 バインド呼び出しの例(C++)
. . . PortableServer::ObjectId_var manager_id = PortableServer::string_to_ObjectId("BankManager"); Bank::AccountManager_var = Bank::AccountManager::_bind("/bank_agent_poa", manager_id); . . .
- コードサンプル10-4 バインド呼び出しの例(Java)
. . . Bank.AccountManager manager = Bank.AccountManagerHelper.bind(orb, "/bank_agent_poa", "BankManager".getBytes()); . . .