Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第3部 EJB編> 第10章 EJBサービスの機能> 10.3 Message-driven Beanの実行環境

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管理コンソールのヘルプを参照してください。

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

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

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


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

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


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

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

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

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

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


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED