特定の条件の下では、国際化対応サービスが開始されなかったり、 アプリケーションの実行中に java.lang.IllegalStateException 例外が発行されたり、 またはデフォルトの振る舞いが実行される場合があります。
国際化対応タイプがコンテナー管理国際化対応 (CMI) に設定されているサーバー・アプリケーション・コンポーネントが、起動コンテキストを設定しようとすると、必ず IllegalStateException 例外が発行されます。この振る舞いは、CMI ポリシー違反であり、CMI ポリシーではサーブレットおよび Enterprise Bean は、それぞれの起動国際化対応コンテキストを変更できません。
例えば、国際化対応サービスの初期化が適切でない場合に、 UserInternationalization URL 属性に対して Java Naming and Directory Interface (JNDI) ルックアップを実行すると、 IllegalStateException インスタンスを含む javax.naming.NameNotFoundException 例外が発行されます。
予期しないまたは例外の振る舞いが発生した場合、その問題は、大抵これらの状態のいずれかに関連しています。 これらの状態を調査するにはトレース・ログを調べる必要があります。 そのためには、国際化対応サービス機能に関するメッセージを生成するよう、診断トレース・サービスを構成する 必要があります。 ロギングおよびトレースを始めるには、トレースおよびロギングの構成 を参照してください。
com.ibm.ws.i18n.context.*=all=enabled:com.ibm.websphere.i18n.context.*=all=enabled
始動時の設定が消去されている場合は、国際化対応サービスは初期化されません。国際化対応サービスは、それが有効か無効かを示すメッセージを生成します。 アプリケーションは、サービスが無効の場合は国際化対応 API にアクセスできません。アプリケーションが JNDI ルックアップを実行して UserInternationalization 参照を取得しようとした場合、ルックアップは失敗し、参照を見つけられなかったことを示す NamingException 例外が発生します。さらにサービスは、着信 (発信) ビジネス・メソッドの呼び出し時に、国際化対応コンテキストをスコープ宣言 (伝搬) しません。
国際化対応サービスは、STARTED 状態にあるときは常に作動可能です。 例えば、アプリケーションが国際化対応コンテキストにアクセスしようとしたときに、そのサービスが開始されていない場合、API は IllegalStateException 例外を発行します。 さらにサービスは、サーブレットおよびエンタープライズ Bean のランタイム・サポートを提供していません。
アプリケーション・サーバーは、そのライフ・サイクルを通して、国際化対応サービスを初期化、開始、停止、そして終了 (破棄) します。 初期化中に異常が発生した場合は、サービスは開始されません。サービスが開始された後に重大なエラーが発生すると、状態が BLOCKED に切り替わる場合があります。 サービスは、すべての状態変更に対してメッセージを生成します。
トレース・メッセージにサービスが開始されていないと示されている場合、 問題を判別するために直前のメッセージを調べてください。 例えば、国際化対応サービスは、アクティビティー・サービスが使用不可の場合には開始されず、これについて 国際化対応サービスの初期化中にメッセージが表示されます。
アプリケーション・サーバーが非同期 Bean をサポートしていると推測される場合は、asynchbeans.jar および asynchbeansimpl.jar ファイルがクラスパスに存在していることを確認し、非同期 Bean に関連するエラー状態がないかトレース・ログを調べてください。
サービスは、無効な国際化対応コンテキスト・エレメントを検出しました。 例えば、国際化対応サービスは、java.util.SimpleTimeZone 以外のタイプの TimeZone インスタンスをサポートしません。 サービスは、使用できないエレメントを検出した場合、メッセージをログに記録し、JVM の対応するデフォルト・エレメントを代わりに使用します。
サービスは、欠落した国際化対応コンテキスト・エレメントを検出しました。 (例えば、国際化対応サービスをサポートしていないアプリケーション・サーバーからの) 着信要求に、国際化対応コンテキストが欠落しています。サービスが呼び出し元の国際化対応コンテキスト・エレメント (この場合は存在しない) に アクセスしようとする場合、サービスはメッセージをログに記録し、Java 仮想マシン (JVM) の対応するデフォルトのエレメントを代わりに使用します。
可能な場合は常に、国際化対応しているエンタープライズ・アプリケーションを構成するすべてのクライアントおよびホスト・アプリケーション・サーバー内で、国際化対応サービスを使用可能にしてください。詳しくは、国際化対応サービスの管理 を参照してください。
国際化対応サービスは、 アプリケーション・デプロイメント記述子内で誤った形式の国際化対応ポリシーを検出しました。 国際化対応サービスは、誤った形式の属性を適切なデフォルトに置き換えます。例えば、サーブレットまたは EJB ビジネス・メソッド呼び出しの実行中に、 Entity Bean の国際化対応タイプが「アプリケーション」に設定された場合、サービスはその不整合をログに記録し、代わりに「コンテナー」設定を指定します。
また、AMI アプリケーション・コンポーネントも、暗黙のコンテナー国際化対応属性を備えています。 これらは、デフォルトでサーバーとして稼働します。 サービスは、暗黙のポリシー [AMI, RunAsServer] を自動的に指定し、 このことを示すメッセージをログに記録します。
「ロケール」フィールドおよび「時間帯 ID」フィールドを指定する場合は、 無効なコンテナー国際化対応属性が指定されることがあります。 属性に無効なロケールおよび時間帯 ID を検出すると、サービスは、それぞれの値を JVM の対応するデフォルト・エレメントで置き換えます。 必ず、国際化対応アプリケーションのアセンブル に記載されているガイドラインに従ってください。
サービスは、欠落した国際化対応ポリシーを検出しました。 国際化対応サービスは、欠落しているポリシーを適切なデフォルトに置き換えます。例えば、サーブレットまたは Enterprise Bean の国際化対応タイプがない場合、 サービスは属性を「コンテナー」に設定します。
「コンテナー」国際化対応属性は、CMI アプリケーション・コンポーネントに対しては強制されません。 CMI サーブレットまたは EJB ビジネス・メソッドに「コンテナー」国際化対応属性がない場合、 サービスは暗黙のポリシー [CMI, RunAsCaller] を自動的に指定します。
アプリケーションのデプロイメント記述子に国際化対応ポリシーがない場合、 またはメタデータ・サポートが使用できない場合、サービスは、 すべてのサーブレット・サービス・メソッドおよび EJB ビジネス・メソッドの呼び出し時に、 メッセージをログに記録し、ポリシー [CMI, RunAsCaller] を適用します。