国際化対応コンテキストの有効範囲は、暗黙的です。 すべての Enterprise JavaBeans (EJB) クライアント・アプリケーション、サーブレット・サービス・メソッド、 および EJB ビジネス・メソッドの呼び出しには、それらが実行される 2 つの国際化対応コンテキストがあります。
各アプリケーション・コンポーネントの呼び出しでは、コンテナーは、実際のインプリメンテーションに委任される前に、 適切な国際化対応ポリシーで示される、呼び出し元コンテキストと呼び出しコンテキストを有効範囲へ入力します。 インプリメンテーションが戻ると、 サービスは有効範囲からこれらのコンテキストを除去します。国際化対応サービスは、 コンポーネントが国際化対応コンテキストの有効範囲を明示的に管理するような、プログラマチックなメカニズムは提供しません。
国際化対応コンテキストは、リモート・メソッド要求について、値によるセマンティクスを監視しています。 呼び出しに有効範囲を設定された国際化対応コンテキスト・エレメントに変更を加えても、 リモート呼び出しプロセスに有効範囲を設定された国際化対応コンテキストの対応するエレメントには影響しません。また、国際化対応コンテキスト API を使用して取得したコンテキスト・エレメントに対する変更も、起動へスコープ宣言された対応エレメントに影響を与えません。
J2EE クライアント・コンテナーは、クライアント・プログラムの main メソッドを呼び出す前に、ヌル・エレメントを含む起動コンテキストおよび呼び出し元国際化対応コンテキストをいくつか有効範囲に含めます。これらのコンテキストは、プログラムの実行中は常に有効範囲に存在しています。 EJB クライアント・プログラムは、リモート・ビジネス・メソッド起動のチェーンのベースであり、 技術的には論理呼び出し元コンテキストを持ちません。呼び出し元コンテキスト・エレメントにアクセスすると、 クライアント JVM の対応するデフォルト・エレメントが生成されます。 EJB ビジネス・メソッド要求の発信時に、国際化対応サービスは、起動コンテキストをターゲット・プロセスに伝搬します。 設定されていない (ヌル) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または要求の発信によってエクスポートされたときに、JVM のデフォルト値で置換されます。
JVM のデフォルト以外の値をリモート・ビジネス・メソッドに伝搬するには、EJB クライアント・プログラム (AMI サーブレットや Enterprise Bean の場合も同様) で起動コンテキストのエレメントを設定 (オーバーライド) する必要があります。 呼び出しコンテキスト・エレメントを設定する方法については、 呼び出しロケールおよび時間帯へのアクセス を参照してください。
J2EE Web コンテナーは、サーブレットのサービス・メソッド (doGet または doPost) を起動するたびに、呼び出し元コンテキストおよび起動国際化対応コンテキストを有効範囲に含めてから、サービス・メソッドのインプリメンテーションに委任します。呼び出し元コンテキストには、 HTTP サーブレット要求で通常は Web ブラウザーから伝搬された承認済み言語が含まれています。起動コンテキストには、サーブレットに関連付けられている国際化対応ポリシーのコンテナー国際化対応属性で示されるコンテキストがすべて含まれています。 設定されていない (ヌル) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または要求の発信によってエクスポートされたときに、サーバー JVM の デフォルト値で置換されます。 呼び出し元コンテキストおよび起動コンテキストは、インプリメンテーションが戻るまで有効で、 この時点でコンテナーが有効範囲からコンテキストを除去します。
EJB ビジネス・メソッドを起動するたびに、 J2EE EJB コンテナーは、ビジネス・メソッド・インプリメンテーションへと委任する前に、 呼び出し元国際化対応コンテキストおよび起動国際化対応コンテキストを有効範囲へ導入します。 呼び出し元コンテキストには、着信 IIOP 要求からインポートされた国際化対応コンテキスト・エレメントが含まれています。 着信要求に特定の国際化対応コンテキスト・エレメントがない場合、 コンテナーはヌル・エレメントをスコープ宣言します。起動コンテキストには、ビジネス・メソッドに関連する国際化対応ポリシーのコンテナー国際化対応属性で示される コンテキストがすべて含まれています。
EJB ビジネス・メソッド要求の発信時には、サービスは、起動コンテキストをターゲット・プロセスに伝搬します。 設定されていない (ヌル) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または要求の発信によってエクスポートされたときに、サーバー JVM の デフォルト値で置換されます。呼び出し元コンテキストおよび起動コンテキストは、インプリメンテーションが戻った直後まで有効で、その時点でコンテナーがコンテキストを有効範囲から除去します。
リモートの myBeanMethod Bean メソッドを呼び出す Java クライアントを持つ簡単な EJB アプリケーションを考えてみましょう。クライアント・サイドでは、アプリケーションは国際化対応サービス API を使用して起動コンテキスト・エレメントを設定することができます。 クライアントが myBeanMethod() を呼び出すと、サービスはクライアントの起動コンテキストを発信要求へエクスポートします。サーバー・サイドでは、サービスは着信要求からインポートされたコンテキストを切り離し、それを呼び出し元コンテキストとしてメソッドにスコープ宣言します。またサービスは、関連付けられている国際化対応コンテキスト管理ポリシーによって示されるとおりに、起動コンテキストもメソッドにスコープ宣言します。 次に、EJB コンテナーは、国際化対応コンテキスト API を使用して、呼び出し元または呼び出しコンテキストの いずれかのエレメントにアクセスできる、myBeanMethod メソッドを呼び出します。myBeanMethod メソッドが戻ると、EJB コンテナーはこれらのコンテキストを有効範囲から除去します。
J2EE クライアント・コンテナーは、Web サービス・クライアント・プログラムの main メソッドを呼び出す前に、ヌル・エレメントを含む起動コンテキストおよび呼び出し元国際化対応コンテキストの両方を有効範囲に含めます。これらのコンテキストは、プログラムの実行中は常に有効範囲に存在します。 Web サービス・クライアント・プログラムは、リモート・ビジネス・メソッド起動のチェーンのベースであり、 技術的には論理呼び出し元コンテキストを持ちません。呼び出し元コンテキスト・エレメントにアクセスすると、 クライアント仮想マシンの対応するデフォルト・エレメントが生成されます。
国際化対応サービスは、発信 Web サービス要求時に、現行スレッドに関連付けられた呼び出しコンテキストを含む SOAP ヘッダー・ブロックを透過的に作成します。 これにより、呼び出しコンテキストの SOAP 表現は、要求を介してターゲット・プロセスに伝搬されます。設定されていない (すなわちヌルの) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または発信要求によってエクスポートされたときに、JVM のデフォルト・エレメントで置換されます。また、ヘッダーには時間帯 ID しか含まれていないため、起動コンテキストの時間帯オブジェクト (java.lang.SimpleTimeZone) のその他の状態は失われる可能性があります。これは、その他の状態は要求を介して伝搬されないからです。
JVM のデフォルト以外の値をリモート・ビジネス・メソッドに伝搬するには、Web サービス・クライアント・プログラム (AMI サーブレットや Enterprise Bean の場合も同様) で起動コンテキストのエレメントを設定 (オーバーライド) する必要があります。 詳しくは、呼び出しロケールおよび時間帯へのアクセス を参照してください。
Web サービス対応 Bean の各メソッド呼び出しのたびに、EJB コンテナーは、ビジネス・メソッド・インプリメンテーションに制御を委任する前に、 呼び出し元国際化対応コンテキストおよび起動国際化対応コンテキストを有効範囲に含めます。呼び出し元コンテキストには、着信要求の SOAP ヘッダー・ブロックからインポートされた国際化対応コンテキスト・エレメントが含まれています。着信要求に特定の国際化対応コンテキスト・エレメントがない場合、コンテナーはヌル・エレメントを有効範囲に含めます。起動コンテキストには、ビジネス・メソッドに関連する国際化対応ポリシーのコンテナー国際化対応属性で示される コンテキストがすべて含まれています。
EJB ビジネス・メソッド要求の発信時には、サービスは、起動コンテキストをターゲット・プロセスに伝搬します。設定されていない (すなわちヌルの) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または発信要求によってエクスポートされたときに、サーバー JVM のデフォルト・エレメントで置換されます。呼び出し元コンテキストおよび起動コンテキストは、ビジネス・メソッド・インプリメンテーションから 制御が戻されるまで有効で、この時点でコンテナーは有効範囲からコンテキストを除去します。
国際化対応サービスは、 発信 Web サービス要求において、現行スレッドに関連付けられた起動コンテキストを含む SOAP ヘッダー・ブロックを透過的に作成します。 これにより、起動コンテキストの SOAP 表現は、要求を介してターゲット・プロセスに伝搬されます。 設定されていない (すなわちヌルの) 起動コンテキスト・エレメントは、 国際化対応コンテキスト API または発信要求によってエクスポートされたときに、JVM のデフォルト・エレメントで置換されます。
Web コンテナーおよび EJB コンテナーは、メソッドのインプリメンテーションを実行するスレッドに関連付けることによって、国際化対応コンテキストをそのメソッドへスコープ宣言します。同様に、国際化対応コンテキスト API のメソッドは、これらのメソッドが実行されるスレッドにコンテキストを関連付けるか、またはそれらのスレッドに関連付けられたコンテキストを取得します。
新規のスレッドがアプリケーション・コンポーネント内部で作成される場合 (サーブレットの service メソッド内部のユーザー生成スレッド、 または AWT クライアント内のシステム生成イベント処理スレッドなど)、親スレッドに関連付けられた国際化対応コンテキストは、新規に作成されたスレッドには自動的に転送されません。 このような場合、サービスは、任意のリモート・ビジネス・メソッド要求時および新規スレッド上で実行される任意の API 呼び出し時に、 JVM のデフォルト・ロケールおよび時間帯をエクスポートします。
デフォルト・コンテキストが不適切な場合、必要な起動コンテキスト・エレメントを、InvocationInternationalization インターフェースの setXxx メソッドを使用して、新規スレッドへ明示的に関連付ける必要があります。 現行では、国際化対応コンテキスト管理ポリシーによって、起動コンテキストを、アプリケーション管理国際化対応を使用しているサーブレット内部、Session Bean 内部、およびメッセージ・ドリブン Bean 内部だけでなく、EJB クライアント・プログラム内部にも設定することができます。