ルーティング定義画面上に、特定のアプリケーションで異常が発生した場合に、取消し用アプリケーションを呼び出すメッセージを送信するためのルート(補償ルート)を定義します。
補償ルートは、以下のルートを逆戻りするルートとして指定することができます。
実行ルート
条件ルート
代行ルート
[実行ルート定義]画面、または[条件ルート定義]画面の[補償ルート]タブをクリックすると、以下の画面が表示されます。ここでは、そのルートに対し補償ルートを指定するかどうかの設定、および補償ルートを通過するメッセージに含める業務データを定義します。
補償ルートは、逆戻りするルートだけがサポートされます。そのため、業務処理開始アプリケーションから異常が発生する直前の業務処理実行アプリケーションまで補償処理メッセージを送信することや、異常となったメッセージが通過していない業務処理実行アプリケーションに対して補償処理メッセージを送信することはできません。
以下に補償ルートを指定したフロー定義例を示します。
各ルートに対応付けられている赤色の矢印が補償ルートを示すルートです。
上図の例の場合においての補償処理メッセージ運用を以下に示します。
アプリケーションHで異常が発生
以下の運用に振り分けられます。
アプリケーションEを通過したメッセージ
アプリケーションE→アプリケーションB→アプリケーションAを通る補償処理メッセージが送信されます。
アプリケーションFを通過したメッセージ
直前に通過した業務処理実行アプリケーションへの補償ルートが定義されていないため、補償処理メッセージは送信されません。
アプリケーションGとアプリケーションCを通過したメッセージ
アプリケーションGまで補償処理メッセージが送信されます。
アプリケーションGとアプリケーションDを通過したメッセージ
アプリケーションG→アプリケーションDを通る補償処理メッセージが送信されます。
アプリケーションGで異常が発生
以下の運用に振り分けられます。
アプリケーションCを通過したメッセージ
直前に通過した業務処理実行アプリケーションへの補償ルートが定義されていないため、補償処理メッセージは送信されません。
アプリケーションDを通過したメッセージ
アプリケーションDまで補償処理メッセージが送信されます。
アプリケーションA・アプリケーションC・アプリケーションD・アプリケーションFで異常が発生
補償処理メッセージは送信されません。
アプリケーションBで異常が発生
アプリケーションAを通る補償処理メッセージが送信されます。
アプリケーションEで異常が発生
アプリケーションB→アプリケーションAを通る補償処理メッセージが送信されます。
補償ルートは、実行ルートや条件ルートのようにルーティング定義画面の任意の箇所へ設定することはできません。実行ルート、条件ルートの定義情報として補償ルートを指定することで、自動的にルートを逆戻りする補償ルートを示す赤い矢印が画面上に表示されます。
条件ルートに補償ルートを定義した場合、その条件ルートの始点側に接続されている同報・条件分岐へ入力しているルートへも自動的に補償ルートが設定されます。
以下に例を示します。
補償ルートへは、補償処理メッセージに含める業務データを指定できますが、同報・条件分岐へ入力している補償ルートが自動的に付与されるルートについては、複数存在する可能性があるため、メッセージに含める業務データを指定することはできません。条件ルートの補償ルートの定義により選択された業務データが、おのおのに渡されることになります。
代行分岐から出力している実行ルートに補償ルートの定義を行った場合、実行ルートと対になる代行ルート、および代行分岐へ入力しているルートに対し、自動的に補償ルートが設定されます。
以下に例を示します。
補償ルートへは、補償処理メッセージに含める業務データの業務データ名を指定できますが、実行ルートと対になる代行ルート、および代行分岐へ入力しているルートには、メッセージに含める業務データを指定することはできません。代行分岐から出力している実行ルートの補償ルートの定義により選択された業務データが、そのまま渡されることになります。
注意
ルーティング定義における補償ルートの自動設定規則については、“付録E 定義規約”を参照してください。
補償ルートを指定した実行ルートや条件ルートをルーティング定義画面上で削除した場合、補償ルートの定義情報も削除されます。
補償処理メッセージに引き継がれていない業務データを取消し処理用の業務処理実行アプリケーションの引数に指定した場合、実行時には初期値が引き渡されます。
データ型ごとの引数に設定される初期値については、“■業務データの引継ぎに関する規約”を参照してください。
代行ルートを通過してきたメッセージで異常が発生した場合、補償処理メッセージは通過してきた代行ルートのアクティビティへルーティングされます。
フロー定義ツールのアクティビティの定義において、補償ルートを実行する異常を定義し、かつ、該当アクティビティへの実行ルート定義で補償ルートの指定を行わなかった場合、補償ルートの実行が異常終了します。
なお、この場合の異常終了時の動作は、業務処理実行アプリケーションの開発言語により異なります。
COBOLの場合は、シリアライズファイルを出力します。
Javaの場合は、フロー定義ツールの異常処理定義における未定義のアプリケーション異常発生時の定義に従って異常処理が行われます。