通常、JNDI クライアントは、正しい環境が既に構成されているため、 明示的にプロパティー値を設定して、 これらを InitialContext コンストラクターに渡す必要はないことを前提としています。しかし、JNDI クライアントは、 その環境で識別されたネーム・スペース以外のネーム・スペースにアクセスしなければならない場合があります。 このような場合は、InitialContext コンストラクターが使用する java.naming.provider.url (プロバイダー URL) プロパティーを明示的に設定する必要があります。 プロバイダー URL には、 初期コンテキストを取得するために、 初期コンテキスト・ファクトリーが使用できるブートストラップ・サーバー情報が入っています。 InitialContext コンストラクターに直接渡されたプロパティー値はいずれも、 その環境内の他のところで検出された同じプロパティーの設定より優先されます。
CORBA オブジェクト URL は IIOP URL よりも柔軟性があり、 使用する場合の推奨 URL 形式です。 CORBA オブジェクト URL は、OMG CosNaming Interoperable Naming Specification の一部です。 例えば、corbaname URL には、 初期コンテキストおよびルックアップ名の 情報を含めることができるので、 他の初期コンテキストを明示的に取得せずに、 ルックアップ名として使用することができます。 IIOP URL は、JNDI のレガシー・フォーマットですが、 WebSphere Application Server の 初期コンテキスト・ファクトリーによって、引き続きサポートされています。
以下の例は、これらの 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 は、 複数のブートストラップ・アドレスを持つことができます。 この機能は、 サーバー・クラスターから初期コンテキストを取得しようとするときに使用できます。 URL 内のクラスターのすべてのサーバーに、ブートストラップ・アドレスを 指定することができます。少なくとも 1 つのサーバーが実行されている場合、オペレーションは正常に 処理され、Single Point of Failure (SPOF) を回避できます。アドレス・リストの処理は、必ずしも所定の順序で行われるとは限りません。 例えば、 リストの 1 番目のブートストラップ・アドレスのサーバーが使用可能であったとしても、 初期コンテキストを取得するのに 2 番目のブートストラップ・アドレスが使用される場合があります。
非 z/OS システム上のサーバーを解決する複数のアドレスを持つプロバイダー URL は、ノード・エージェント・プロセスに対するブートストラップ・アドレスを含むことができません。 URL には、同じクラスターのメンバーのブートストラップ・アドレスのみが含まれる必要があります。 そうでない場合は、誤った振る舞いが発生する可能性があります。 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); ...
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 は、レガシー・フォーマットであり、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); ...