2.8.4 ネーミングでのキャッシングの注意事項
ネーミングのキャッシングに関する注意事項について説明します。
-
アプリケーションでEJBホームオブジェクトリファレンスやJDBCデータソースをキャッシングしている場合,ネーミングでのキャッシングを無効にすることを推奨します。
-
キャッシュを定期的にクリアするには,簡易構築定義ファイルで設定します。論理J2EEサーバ(j2ee-server)の<configuration>タグ内に,次のパラメタで設定します。
- ejbserver.jndi.cache.interval.clear.option
-
キャッシュをクリアする範囲を指定します。
- ejbserver.jndi.cache
-
キャッシュを実行するかどうかを指定します。ここでは「ON」を設定してください。
- ejbserver.jndi.cache.interval
-
キャッシュのクリア間隔を指定します。
-
論理J2EEサーバ(j2ee-server)の<configuration>タグ内で,プロパティ「ejbserver.jndi.cache.interval.clear.option」に「check」を設定している場合,CORBAネーミングサービスの監視は,プロパティ「ejbserver.jndi.cache.interval」に指定したキャッシュクリアのタイミングだけで行われます。CORBAネーミングサービスの再起動後,CORBAネーミングサービスの回復を検知するためには,最大で,プロパティ「ejbserver.jndi.cache.interval」に設定した時間が必要です。
-
キャッシング機能を使用している場合,キャッシュにEJBホームオブジェクトのオブジェクトリファレンスが保存された状態で,EJBホームオブジェクトが保存されているJ2EEサーバがダウンするか,またはJ2EEアプリケーションの再デプロイが実行されると,キャッシュに保存されているEJBホームオブジェクトのオブジェクトリファレンスは無効な情報となります。この状態でEJBホームオブジェクトの検索要求(lookup)を受けると,キャッシュ上の無効なオブジェクトリファレンスが検索要求元に返却されます。このオブジェクトリファレンスに対して,javax.rmi.PortableRemoteObject.narrow()メソッド,またはcreateメソッドなどのメソッドを実行すると,CORBA例外(org.omg.CORBA.OBJECT_NOT_EXISTなど)が発生する場合があります。なお,CORBA例外が発生した場合,キャッシュ情報はすべて削除されます。次回の検索要求(lookup)ではCORBAネーミングサービスへ接続して有効な情報が取得されます。
-
CTMを使用している場合に,指定した値の間隔で無効なキャッシュ領域だけをクリアするとき,J2EEサーバやJ2EEアプリケーションが停止していても,グローバルCORBAネーミングサービスのEJBホームオブジェクトのオブジェクトリファレンスはキャッシュ領域からクリアされません。EJBホームオブジェクトの検索要求(lookup)を受けると,クリアされなかったキャッシュ上のオブジェクトリファレンスが検索要求元に返却されます。J2EEアプリケーションが再度開始されていた場合は,キャッシュしたオブジェクトリファレンスはそのまま使用できます。J2EEアプリケーションが再度開始されていない場合は,返却されたオブジェクトリファレンスに対して,createメソッドなどのメソッドを実行すると,CORBA例外(org.omg.CORBA.NO_IMPLEMENT)などが発生します。
なお,CORBA例外が発生した場合,キャッシュ情報はすべて削除されます。J2EEアプリケーションが再開始している場合は,次回の検索要求(lookup)でグローバルCORBAネーミングサービスに接続して有効な情報が取得されます。
-
ビジネスインタフェース使用時に,プロパティ「ejbserver.jndi.cache」に「on」を設定している状態でJ2EEサーバを再起動した場合,ビジネスメソッド実行時にjavax.ejb.EJBExceptionが発生する場合があります。
なお,javax.ejb.EJBExceptionが発生した場合,次回の検索要求(lookup)ではCORBAネーミングサービスへ接続して有効な情報が取得されます。
-
キャッシング機能では,内部処理でCORBAネーミングサービスのリファレンスをキャッシュしています。 キャッシング機能が無効な場合は,CORBAネーミングサービスのリファレンスをキャッシュしないで,javax.naming.InitialContextクラスのインスタンスを生成するたびに作成します。そのため,キャッシング機能を無効にして,頻繁にjavax.naming.InitialContextクラスのインスタンスを生成した場合,javaヒープが増加することがあります。その場合,キャッシング機能を有効にしてください。