JNDI 操作のパフォーマンスを向上させるために、 WebSphere Application Server の JNDI インプリメンテーションは、 キャッシングを使用して、ルックアップ操作のためのネーム・サーバーへのリモート呼び出しの数を減らします。 ほとんどの場合、デフォルト・キャッシュ設定を使用します。
InitialContext オブジェクトのインスタンスが生成されると、 InitialContext インスタンスとキャッシュの間で関連付けが行われます。 初期コンテキストおよび初期コンテキストについてのルックアップから直接的または間接的に戻されたコンテキストは、 すべてその同じキャッシュ・インスタンスと関連付けられます。 デフォルトでは、関連付けはプロバイダー URL、特にホスト名とポートに基づいています。 呼び出し元は、このデフォルトの動作をオーバーライドするキャッシュ名を指定することができます。 指定された名前のキャッシュ・インスタンスは、その名前 (事実上同じコンテキスト・クラス・ローダーで作成された) のキャッシュを使用するために構成された InitialContext のすべてのインスタンスが共用します。 同一サーバー内で稼働している 2 つの EJB アプリケーションは、異なるコンテキスト・クラス・ローダーを使用している場合、キャッシュ名が同じでも、独自のキャッシュ・インスタンスを使用します。
InitialContext のインスタンスとキャッシュの間の関連付けが行われた後は、この関連付けは変更されません。ルックアップ操作から戻された javax.naming.Context オブジェクトは、 そのルックアップ操作が実行された Context オブジェクトのキャッシュ関連付けを継承します。 Context.addToEnvironment() や Context.removeFromEnvironment() メソッドを使用してキャッシュのプロパティー値を変更しても、 キャッシュの振る舞いには影響がありません。 指定したキャッシュのインスタンスに影響のあるプロパティーは、 InitialContext のそれぞれのインスタンス生成で変更できます。
キャッシュは 1 つのプロセスに制限され、そのプロセスの存続期間を超えて持続することはありません。 キャッシュに入れられたオブジェクトがルックアップ操作で戻るのは、 キャッシュの最長キャッシュ存続期間に到達するまで、 またはオブジェクトのキャッシュ・エントリーの 最長エントリー存続期間に達するまでです。この後は、オブジェクトのルックアップを行うと、 そのオブジェクトのキャッシュ・エントリーがリフレッシュされます。 デフォルトでは、キャッシュとキャッシュ・エントリーは無制限の存続期間を持ちます。
通常、キャッシュに入れられたオブジェクトは比較的静的なエンティティーであり、 オブジェクトが失効した場合にも問題はありません。ただし、キャッシュの内容が定期的にリフレッシュされるように、 キャッシュ・エントリーまたはキャッシュにタイムアウト値を設定しておくことができます。
オブジェクトに対してバインド操作または再バインド操作を実行しても、 バインドまたは再バインドを発行したコンテキストに関連付けられたキャッシュ以外には、 変更は反映されません。 複数の互いに異なるプロセスは同じキャッシュを共用しませんが、 1 つのプロセスにおけるすべてのスレッド内のコンテキスト・オブジェクトは、通常、 特定のネーム・サービス・プロバイダー用として 1 つの同じキャッシュ・インスタンスを共用するため、 たいていの場合、このシナリオは、複数のプロセスが関与している場合に発生することが多くなります。