Interstage Application Server J2EE ユーザーズガイド |
目次 索引 |
第3部 EJB編 | > 第9章 EJBサービスの機能 | > 9.3 Message-driven Beanの実行環境 |
トランザクション管理種別がContainerで、かつ、トランザクション属性がRequiredの場合、Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外が発生すると、コンテナはトランザクションをロールバックします。
この場合、ロールバックされたメッセージは再度Message-driven Beanに送信され、処理がループする場合があります。
この現象を回避するために、異常時のメッセージ退避機能を使用してください。
Message-driven Bean内でRuntimeExceptionやErrorなどのシステム例外がリトライ回数+1回連続して発生すると、コンテナがメッセージをバックアップ用のDestinationへ送信します。
異常時ループ対処用のJMSコネクションファクトリ名とDestination名が指定されていない場合や、指定が間違えているなどの場合には、メッセージはシリアライズされ、シリアライズファイルが作成されます。
シリアライズに失敗した場合は、プロセスを停止します。
[異常時メッセージ退避定義]の“リトライカウント”、“JMSコネクションファクトリ名”、“Destination名”は、Interstage管理コンソールで設定します。
設定方法の詳細は、Interstage管理コンソールのヘルプを参照してください。
以下に、シリアライズファイルのファイル名と格納先を示します。
MSG_[EJBアプリケーション名]_[プロセスID]_[スレッドID]_[数字].ser |
C:\Interstage\EJB\var |
/opt/FJSVejb/var |
以下に、この機能を使用した場合の処理イメージを示します。
シリアライズされたJMSメッセージを復元するための記述例を示します。
FileInputStream fis = new FileInputStream("シリアライズファイル名"); |
以下の場合には、異常が発生したメッセージではないメッセージが退避の対象となる可能性がありますので、使用しないでください。
以下に該当する場合、リトライ回数を超過してもメッセージ受信を繰り返す可能性があります。
イベントチャネルのイベントデータをメモリにキャッシュする数は、以下の式が成立するように設定してください。
イベントチャネルのイベントデータをメモリにキャッシュする数 > イベントチャネルに蓄積できるイベントデータの最大値 |
設定はイベントサービス運用コマンドを使用して行います。詳細は“リファレンスマニュアル(コマンド編)”の“essetcnf”および“essetcnfchnl”を参照してください。
目次 索引 |