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