例: CosNaming を使用した EJB ホームの検索
CORBA CosNaming インターフェースを使用して、WebSphere® Application Server ネーム・サーバーから EJB ホームまたは他の CORBA オブジェクトの検索を行うことができます。
初期コンテキストで resolve または resolve_str を呼び出したり、ORB で string_to_object を呼び出すことができます。 どのネーム・サーバーで検索が実行されても名前を解決できるよう修飾名を使用したり、 実際にオブジェクト・バインディングを含むネーム・サーバー上のサーバー・ルート・コンテキストでのみ解決を行う非修飾名を使用することができます (修飾名は、指定されたサーバー・ルート・コンテキストへの統合済みシステムの名前空間を全探索します)。
修飾名と非修飾名
各アプリケーション・サーバーは、ネーム・サーバーを含んでいます。EJB ホームなどの システム成果物は、そのネーム・サーバーにバインドされています。各種のネーム・サーバーが、 システムの名前空間構造により統合されています。異なるサーバーのオブジェクトを検索するには、 修飾名を使用する方法をお勧めします。
修飾名は、オブジェクトを含むクラスターまたはシングル・サーバーおよびノードの名前に基づいて、トポロジー・ベースの名前にすることができます。
オブジェクトに、修飾された固定名を定義することができます。修飾名を定義すると、 システムの名前空間構造を全探索して、 異なるサーバーにあるオブジェクトを同じ初期コンテキストから検索できます。または、 非修飾名を使用することもできますが、この場合、 オブジェクトのアプリケーション・サーバーに関連したネーム・サーバーのみを使用して解決が行われます。
CosNaming.resolve (および resolve_str) と ORB.string_to_object
初期コンテキストが WebSphere Application Server セルの いずれかのネーム・サーバーからのものである場合、 修飾名を使用して CORBA オブジェクトを検索することができます。 ターゲット・オブジェクトのネーム・サーバーの 追加のホストおよびポート情報は必要ありません。
または、corbaname URL を渡して、ORB で string_to_object を呼び出し、 オブジェクトを検索することもできます。 初期コンテキストに必要なブートストラップ・アドレス情報が URL に含まれるよう、IIOP タイプ URL を指定します。修飾または非修飾の stringified 名を使用できますが、 非修飾名では、オブジェクトがバインドされているネーム・サーバーからの初期コンテキストの場合にのみ解決が行われます。
以下の例は、トポロジー・ベースの修飾検索名および非修飾検索名を使用した CosNaming の解決オペレーションを示しています。
修飾名を使用した CosNaming 解決オペレーション
オブジェクトのトポロジー・ベースの修飾名は、オブジェクトが単一サーバーまたはサーバー・クラスターにバインドされているかどうかによって異なります。以下に、それぞれの例を示します。
単一サーバー
以下の例は、単一サーバーで実行されている EJB ホームの検索を示しています。検索されるエンタープライズ Bean は、ノード Node1 上のサーバー MyServer で実行されています。
// Get the initial context as shown in the previous example
// Using the form of lookup name below, it doesn't matter which
// server in the cell is used to obtain the initial context.
...
// Look up the home interface using the name under which the EJB home is bound
org.omg.CORBA.Object ejbHome = initialContext.resolve_str(
"cell/nodes/Node1/servers/MyServer/mycompany/accounting/AccountEJB");
accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);
サーバー・クラスター
以下の例は、クラスターで実行されている EJB ホームの検索を示しています。検索されるエンタープライズ Bean は、クラスター Cluster1 で実行されています。名前解決は、いずれかのクラスター・メンバーが実行されている場合に可能です。
// Get the initial context as shown in the previous example
// Using the form of lookup name below, it doesn't matter which
// server in the cell is used to obtain the initial context.
...
// Look up the home interface using the name under which the EJB home is bound
org.omg.CORBA.Object ejbHome = initialContext.resolve_str(
"cell/clusters/Cluster1/mycompany/accounting/AccountEJB");
accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);
非修飾 stringified 名を使用した ORB string_to_object オペレーション
オブジェクトを含むネーム・サーバーで解決オペレーションが行われる場合、 システムの名前空間を全探索する必要はなく、非修飾検索名を使用することができます。この名前は、 他のネーム・サーバーでは名前解決を行わないことに注意してください。非修飾名が指定された場合、オブジェクト・キーを NameServiceServerRoot として、正しい初期コンテキストが選択されるようにする必要があります。 修飾名が指定された場合は、NameService のデフォルト・キーを使用することができます。
以下の例は、EJB ホームのルックアップを示しています。 検索されるエンタープライズ Bean は、ポート 2809 のホスト myHost 上で実行されている ネーム・サーバーにバインドされています。オブジェクト・キーは NameServiceServerRoot であることに注意してください。
// Assume orb is an existing ORB instance
...
// Look up the home interface using the name under which the EJB home is bound
org.omg.CORBA.Object ejbHome = orb.string_to_object(
"corbaname:iiop:myHost:2809/NameServiceServerRoot#mycompany/accounting");
accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);