例: プロバイダー URL プロパティーの設定による初期コンテキストの取得
通常、Java™ Naming and Directory Interface (JNDI) クライアントは、正しい環境が既に構成されているため、明示的にプロパティー値を設定して、これらを InitialContext コンストラクターに渡す必要はないことを前提としています。 しかし、JNDI クライアントは、 その環境で識別された名前空間以外の名前空間にアクセスしなければならない場合があります。 このような場合は、InitialContext コンストラクターが使用する java.naming.provider.url (プロバイダー URL) プロパティーを明示的に設定する必要があります。 プロバイダー URL には、 初期コンテキストを取得するために、 初期コンテキスト・ファクトリーが使用できるブートストラップ・サーバー情報が入っています。 InitialContext コンストラクターに直接渡されたプロパティー値はいずれも、 その環境内の他のところで検出された同じプロパティーの設定より優先されます。
- CORBA オブジェクト URL
- IIOP URL
CORBA オブジェクト URL は IIOP URL よりも柔軟性があり、 使用する場合の推奨 URL フォーマットです。 CORBA オブジェクト URL は、OMG CosNaming Interoperable Naming Specification の一部です。 例えば、corbaname URL には、 初期コンテキストおよび検索名の 情報を含めることができるので、 他の初期コンテキストを明示的に取得せずに、 検索名として使用することができます。 IIOP URL は、JNDI のレガシー・フォーマットですが、 WebSphere Application Server の 初期コンテキスト・ファクトリーによって、引き続きサポートされています。
以下の例は、これらの URL の使用法を示しています。
CORBA オブジェクト URL の使用
次の例は、CORBA オブジェクト URL を示しています。
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "corbaloc:iiop:myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);
...
複数のネーム・サーバー・アドレスを持つ CORBA オブジェクト URL の使用
CORBA オブジェクト URL は、 複数のブートストラップ・アドレスを持つことができます。 この機能は、 サーバー・クラスターから初期コンテキストを取得しようとするときに使用できます。 URL 内のクラスターのすべてのサーバーに、ブートストラップ・アドレスを 指定することができます。少なくとも 1 つのサーバーが実行されている場合、オペレーションは正常に 処理され、Single Point of Failure (SPOF) を回避できます。アドレス・リストの処理は、必ずしも所定の順序で行われるとは限りません。 例えば、 リストの 1 番目のブートストラップ・アドレスのサーバーが使用可能であったとしても、 初期コンテキストを取得するのに 2 番目のブートストラップ・アドレスが使用される場合があります。
非 z/OS システム上のサーバーを解決する複数のアドレスを持つプロバイダー URL は、ノード・エージェント・プロセスに対するブートストラップ・アドレスを含むことができません。 これは、ノード・エージェントへのブートストラッピングが非 WLM 対応初期コンテキストを返すためです。 その結果、WLM は使用されません。 代わりに、初期コンテキストを WLM 対応にするために、URL には同じクラスターのメンバーのブートストラップ・アドレスのみを含める必要があります。 URL に複数のクラスターのブートストラップ・アドレスが含まれていると、正しくない動作が行われる可能性があります。 与えられた名前が解決されなかったり、すべてのクラスターで同じオブジェクトに解決されることがあります。 z/OS® では、ノード・エージェントは WLM 対応の初期コンテキストを戻すため、z/OS オペレーティング・システム上で稼働しているサーバーとして解決される URL は、ノード・エージェント・プロセスのブートストラップ・アドレスを含むことができます。
以下の例は、複数のアドレスを持つ corbaloc URL を示しています。
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
// All of the servers in the provider URL below are members of
// the same cluster.
env.put(Context.PROVIDER_URL,
"corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810");
Context initialContext = new InitialContext(env);
...
WebSphere Application Server 以外の JNDI 実装から CORBA オブジェクト URL を使用する
CosNaming JNDI プラグイン実装の初期コンテキスト・ファクトリー (WebSphere Application Server の 初期コンテキスト・ファクトリーを除く) は、 ほとんどの場合、オブジェクト・キー NameService を使用して、 初期コンテキストを取得します。 このようなコンテキスト・ファクトリーを使用して、WebSphere Application Server ネーム・サーバーから初期コンテキストを取得する場合、 初期コンテキストはセル・ルート・コンテキストになります。 サーバーに関連した EJB ホームなどのシステム成果物は、サーバーのサーバー・ルート・コンテキストの下にバインドされるので、JNDI オペレーションで使用される名前は修飾されている必要があります。 相対名を使用する場合、初期コンテキストが、ターゲット・オブジェクトのバインドされているサーバー・ルート・コンテキストであることを確認してください。サーバー・ルート・コンテキストを初期コンテキストにするには、オブジェクト・キー NameServiceServerRoot を使用して corbaloc プロバイダー URL を指定します。
この例の CORBA オブジェクト・タイプ URL は、 WebSphere Application Server 以外の JNDI 実装のものです。 この例では、WebSphere Application Server 以外の JNDI 実装によって、CORBA オブジェクト URL が 完全にサポートされていることが前提となります。 オブジェクト・キー NameServiceServerRoot は、初期コンテキストが、指定したサーバーのサーバー・ルート・コンテキストになるように指定します。
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.somecompany.naming.TheirInitialContextFactory");
env.put(Context.PROVIDER_URL,
"corbaname:iiop:myhost.mycompany.com:9810/NameServiceServerRoot");
Context initialContext = new InitialContext(env);
...
修飾名が指定された場合は、NameService のデフォルト・キーを使用することができます。
IIOP URL の使用
IIOP タイプの URL は、レガシー・フォーマットであり、CORBA オブジェクト URL ほど柔軟性はありません。 しかし、このタイプの URL はまだサポートされています。 以下の例は、プロバイダー URL として IIOP タイプの URL を示しています。
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "iiop://myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);
...