■異常処理の実行の注意点
トランザクションのロールバックを繰り返し、最大リトライ回数に達した場合、異常処理機能により、補償ルートまたはメッセージ退避が実行されます。それらの異常処理機能は、ロールバックされたメッセージ(異常が生じたアプリケーションの実行直前のメッセージ)を用いて行われます。例外を発行したアプリケーション内で途中まで行った処理は反映されません。
異常処理機能では、フロー定義に指定された情報を元に異常時の後処理を行います。そのため、メッセージに格納されたフロー定義情報が壊れているなどの原因でフロー定義情報の内容を解析できない場合は、補償ルートやエラーメッセージ退避キューへの退避は行われず、メッセージはすべてシリアライズファイルへ退避されます。
また、Javaの場合には以下の注意点があります。
アプリケーションのコンストラクタで例外が発生した場合、エラー処理メソッドは実行されません。
エラー処理メソッドが実行されるには、例外が非同期アプリケーション連携実行基盤に対してthrowされる必要があります。例外処理がアプリケーションのメソッド内で完結している場合、エラー処理メソッドは実行されません。
エラー処理メソッドでの処理を行い、また、異常処理などのフロー制御での異常処理機能を併用したい場合は、エラー処理メソッドでの異常処理終了後、例外をthrowするようにしてください。
異常処理を正しく動作させるためには、非同期アプリケーション連携実行基盤の実行環境(Message-driven Bean)で、EJBのトランザクション管理種別を“Container”、トランザクション属性を“Required”で指定してください。EJBのトランザクション管理種別を“Container”以外、トランザクション属性を“Required”以外で指定した場合、異常が発生したメッセージは異常時の対処処理が行われずに削除されます。
トランザクションの設定は、Interstage Studioでejb-jar.xmlを編集することで行います。
トランザクションの処理をコンテナで管理している場合は、エラー処理メソッドの結果とトランザクションの関係は以下のようになります。エラー処理メソッドでトランザクションに関連した処理を行う場合は留意してください。
エラー処理メソッドが正常終了:トランザクションはコミット
エラー処理メソッドが例外をthrow:トランザクションはロールバック
異常処理の詳細については、“2.4 異常処理”を参照してください。
■補償ルート機能を使用するときの注意点
補償ルートは、逆戻りするルートだけがサポートされます。そのため、業務処理開始アプリケーションから異常が発生する直前の業務処理実行アプリケーションまで補償処理メッセージを送信することや、異常となったメッセージが通過していない業務処理実行アプリケーションに対して補償処理メッセージを送信することはできません。したがって、フロー定義のパターンによっては、補償ルート処理を行っても完全に元の状態に戻らないことがあります。
また、補償ルートにおいて使用される業務処理またはメソッドは、業務処理実行アプリケーションと同様に開発者が用意する必要があります。
補償ルートの詳細については、“3.1.7 補償ルート”を参照してください。
■異常復旧について
エラーメッセージ退避キューを設定しない場合、異常となったメッセージが復旧されるまですべてのメッセージの処理ができなくなります。エラーメッセージ退避キューを設定して、異常となったメッセージを退避することで、後の正常なメッセージの処理が可能になるようにしてください。
エラーメッセージ退避キューを設定した場合、異常となったメッセージはエラーメッセージ退避キューに格納されます。エラーメッセージ退避キューに格納された異常なメッセージについては、随時異常を確認して修正を行いフローに戻す処理が必要です。異常時の復旧では人為的な処理が必要であることを考慮に入れてください。
異常復旧についての詳細は、“Interstage Business Application Server 運用ガイド(アプリケーション連携実行基盤編)”の“異常処理出口を使用したメッセージの復旧”を参照してください。