CORBA CosNaming インターフェースを使用して WebSphere Application Server ネーム・サーバーから EJB ホームまたは他の CORBA オブジェクトのルックアップを行うことができます。
初期コンテキストで resolve または resolve_str を呼び出したり、ORB で string_to_object を呼び出すことができます。 どのネーム・サーバーでルックアップが実行されても名前を解決できるよう修飾名を使用したり、 実際にオブジェクト・バインディングを含むネーム・サーバー上のサーバー・ルート・コンテキストでのみ解決を行う非修飾名を使用することができます (修飾名は、指定されたサーバー・ルート・コンテキストへの統合済みシステムのネーム・スペースを全探索します)。
各アプリケーション・サーバーは、ネーム・サーバーを含んでいます。EJB ホームなどの システム成果物は、そのネーム・サーバーにバインドされています。各種のネーム・サーバーが、 システムのネーム・スペース構造により統合されています。異なるサーバーのオブジェクトをルックアップするには、 修飾名を使用する方法をお勧めします。
修飾名は、オブジェクトを含むクラスターまたはシングル・サーバーおよびノードの名前に基づいて、トポロジー・ベースの名前にすることができます。
オブジェクトに、修飾された固定名を定義することができます。修飾名を定義すると、 システムのネーム・スペース構造を全探索して、 異なるサーバーにあるオブジェクトを同じ初期コンテキストからルックアップできます。または、 非修飾名を使用することもできますが、この場合、 オブジェクトのアプリケーション・サーバーに関連したネーム・サーバーのみを使用して解決が行われます。
初期コンテキストが WebSphere Application Server セルの いずれかのネーム・サーバーからのものである場合、 修飾名を使用して CORBA オブジェクトをルックアップすることができます。 ターゲット・オブジェクトのネーム・サーバーの 追加のホストおよびポート情報は必要ありません。
または、corbaname URL を渡して、ORB で string_to_object を呼び出し、 オブジェクトをルックアップすることもできます。 初期コンテキストに必要なブートストラップ・アドレス情報が URL に含まれるよう、IIOP タイプ URL を指定します。修飾または非修飾の stringified 名を使用できますが、 非修飾名では、オブジェクトがバインドされているネーム・サーバーからの初期コンテキストの場合にのみ解決が行われます。
以下の例は、トポロジー・ベースの修飾ルックアップ名および非修飾ルックアップ名を使用した 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);
オブジェクトを含むネーム・サーバーで解決オペレーションが行われる場合、 システムのネーム・スペースを全探索する必要はなく、非修飾ルックアップ名を使用することができます。この名前は、 他のネーム・サーバーでは名前解決を行わないことに注意してください。非修飾名が指定された場合、オブジェクト・キーを 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);