Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

5.11.3 EJBのリモートインタフェースの通信障害発生時の動作

EJBクライアントからリモートインタフェースとして定義されたEJBメソッドが呼び出しを実施している際に通信障害が発生したときのクライアント側の動作を次のどちらかから選択できます。

なお,この機能を使用するための設定は,J2EEサーバ,WebコンテナサーバまたはEJBクライアントアプリケーションのプロパティとして設定します。設定方法については,マニュアル「Cosminexus システム構築ガイド」の次の説明を参照してください。

なお,EJBクライアントアプリケーションの場合は,API(java.lang.SystemクラスのsetPropertyメソッドなど)で設定することもできます。java.lang.System.setPropertyメソッドで定義する場合は,EJBクライアントアプリケーションのプロセス起動後,最初にEnterprise Beanのメソッドを呼び出す前に定義してください。

<この項の構成>
(1) 設定が有効になる通信
(2) 推奨する設定
(3) 注意事項

(1) 設定が有効になる通信

通信障害発生時の動作は,リモートインタフェースとして定義されたEJBメソッドの呼び出しで通信障害が起きた場合に有効になります。EJBメソッドの呼び出しとは,次の呼び出しを指します。

設定が有効となる通信を次の図に示します。

図5-28 設定が有効になる通信

[図データ]

なお,次の場合は無効になるので注意してください。

(2) 推奨する設定

システムの形態によって,次のように設定することをお勧めします。

検索および参照系のシステムの場合
コネクションを再接続して,リクエストを再送信する設定にすることをお勧めします。これによって,リクエストを失敗させることなく,結果を取得できるようになります。

更新系のシステムの場合
コネクションの再接続も,リクエストの再送信もしない設定にすることをお勧めします。更新系のシステムの場合,コネクションの再接続およびリクエストの再送信ありの設定をすると,リクエストの二重送信をするおそれがあります。

(3) 注意事項

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

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

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) {
        //通信障害に対応する処理
      }
    }