2.13.6 EJBのリモートインタフェースの呼び出しに関する注意事項

EJBのリモートインタフェースの呼び出しに関する注意事項について説明します。

<この項の構成>
(1) ローカル呼び出しの最適化適用時の注意事項
(2) EJBのリモートインタフェースの通信障害発生時の動作設定時の注意事項
(3) ネーミング管理機能でのキャッシング機能を有効にしている場合の注意事項

(1) ローカル呼び出しの最適化適用時の注意事項

(2) EJBのリモートインタフェースの通信障害発生時の動作設定時の注意事項

システムプロパティのejbserver.container.rebindpolicyキーで"NO_RECONNECT"(再接続なし/再送なし)を選択した場合,通信障害によってコネクションが切断されると,再接続が抑止されているため該当するオブジェクトリファレンスは再利用できなくなります。このため,EJBクライアントでは,次回Enterprise Beanのメソッド呼び出しをする場合には,EJBホームオブジェクトのときはlookupメソッド,EJBオブジェクトのときはcreateメソッドを再実行したあと,メソッド呼び出しを実行してください。なお,Enterprise Beanのメソッド呼び出し中にコネクションが切断された場合,メソッドは次のどちらかの例外を送出します。

java.rmi.RemoteException
detailフィールドがorg.omg.CORBA.REBINDのインスタンス
java.rmi.MarshalException
detailフィールドがorg.omg.CORBA.COMM_FAILUREのインスタンス

これらの例外をキャッチするクライアントのコーディング例を次に示します。

try {
    //JNDI.lookup()
    //EJBHome.create()
    //EJBObject.invoke()
   } catch (java.rmi.MarshalException e) {
     if (e.detail instanceof org.omg.CORBA.COMM_FAILURE) {
       //通信障害に対応する処理
     }
   } catch (java.rmi.RemoteException e) {
     if (e.detail instanceof org.omg.CORBA.REBIND) {
       //通信障害に対応する処理
     }
   }

(3) ネーミング管理機能でのキャッシング機能を有効にしている場合の注意事項

ネーミング管理機能でのキャッシング機能を有効にしている場合,コネクション切断後にlookupメソッドを実行すると,キャッシュ上の無効なオブジェクトリファレンスが取得されます。この場合,取得したオブジェクトリファレンスを使用してjavax.rmi.PortableRemoteObject.narrowメソッドやcreateメソッドを実行したときに,CORBA例外(org.omg.CORBA.OBJECT_NOT_EXISTなど)が発生することがあります。

コネクション切断後の無効なキャッシュはクリアしてください。手順については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.6.2 ネーミングで使用したキャッシュのクリア」を参照してください。