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

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

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

 トランザクション管理種別がContainerで、かつ、トランザクション属性がRequiredの場合、Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外が発生すると、コンテナはトランザクションをロールバックします。
 この場合、ロールバックされたメッセージは再度Message-driven Beanに送信され、処理がループする場合があります。

 この現象を回避するために、異常時のメッセージ退避機能を使用してください。

 Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外がリトライ回数+1回連続して発生すると、コンテナがメッセージをバックアップ用のDestinationへ送信します。

 異常時ループ対処用のJMSコネクションファクトリ名とDestination名が指定されていない場合や、指定が間違えているなどの場合には、メッセージはシリアライズされ、シリアライズファイルが作成されます。
 シリアライズに失敗した場合は、プロセスを停止します。

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

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

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


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

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


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


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

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

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

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


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

All Rights Reserved, Copyright(C) 富士通株式会社 2005