ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

10.3.4 異常時のメッセージ退避機能

異常時のメッセージ退避機能とは

本機能は受信対象種別がJMSの場合に有効な機能です。
トランザクション管理種別がContainerで、かつ、トランザクション属性がRequiredの場合、Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外が発生すると、コンテナはトランザクションをロールバックします。
この場合、ロールバックされたメッセージは再度Message-driven Beanに送信され、処理がループする場合があります。
この現象を回避するために、異常時のメッセージ退避機能を使用してください。

Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外がリトライ回数+1回連続して発生すると、コンテナがメッセージをバックアップ用のDestinationへ送信します。
異常時ループ対処用のJMSコネクションファクトリ名とDestination名が指定されていない場合や、指定が間違えているなどの場合には、メッセージはシリアライズされ、シリアライズファイルが作成されます。
シリアライズに失敗した場合は、プロセスを停止します。

設定方法

[異常時メッセージ退避定義]の“リトライカウント”、“JMSコネクションファクトリ名”、“Destination名”は、Interstage管理コンソールまたはisj2eeadminコマンドで設定します。
設定方法の詳細は、Interstage管理コンソールのヘルプを参照してください。

シリアライズファイル

以下に、シリアライズファイルのファイル名と格納先を示します。

シリアライズファイルのファイル名

MSG_[EJBアプリケーション名]_[プロセスID]_[スレッドID]_[数字].ser

シリアライズファイルの格納先

C:\Interstage\EJB\var

/opt/FJSVejb/var

処理概要

以下に、この機能を使用した場合の処理イメージを示します。



シリアライズファイルの復元方法

シリアライズされたJMSメッセージを復元するための記述例を示します。

FileInputStream fis = new FileInputStream("シリアライズファイル名");
try {
  ObjectInputStream ois = new ObjectInputStream(fis);
  Message msg = (Message)ois.readObject();   //このmsgが退避されたメッセージです。
} finally {
  fis.close();
}

注意

  • 以下の場合には、異常が発生したメッセージではないメッセージが退避の対象となる可能性がありますので、使用しないでください。

    • Point-To-Pointモデルモデルを使用し、Message-driven BeanのDestinationに他の受信アプリケーションが存在する場合

    • JMSメッセージに以下のJMSヘッダーフィールドが指定された場合

      • JMSPriority

      • JMSExpiration

  • 以下に該当する場合、リトライ回数を超過してもメッセージ受信を繰り返す可能性があります。

イベントサービスの設定について

イベントチャネルのイベントデータをメモリにキャッシュする数は、以下の式が成立するように設定してください。

イベントチャネルのイベントデータをメモリにキャッシュする数  >
            イベントチャネルに蓄積できるイベントデータの最大値

設定はイベントサービス運用コマンドを使用して行います。詳細は“リファレンスマニュアル(コマンド編)”の“essetcnf”および“essetcnfchnl”を参照してください。