トランザクション (BPMN)

トランザクション (transaction) とは、関連性の非常に高い作業をまとめたもの. 作業がすべて正しく実行された時だけ「成功」で、一つでも正しく実行されなければ「すべて失敗」となるように実行条件が付加されている.

概要
ビジネスプロセスはいくつかの作業が連なって構成され、ビジネスプロセスを構成する作業の中には、他の作業に少しでも不具合が生じた状態で実行すると大きな問題が生じるような関係で結びついたものもある. 例えば、「口座間の送金」を考えると分かりやすい.

画像:Transaction1.png

上のように「口座間の送金」を実行する場合、Account X から$50 出金しAccount Y に$50 入金して、両口座の残高を$150 にしなければならない. 例えば、「Account X から$50 出金」して残高更新をする前に「Account X へ別の口座から送金」があれば「残高$150 」とする残高更新は正しくない. 「口座間の送金」は、出金・入金する作業や残高更新する作業が連続して行われたり、すべて正しく行われたりすることで初めて正しく実行されたことになる.

このような「すべてが正しく行われて初めて意味がある一連の作業」をまとめて、トランザクションとしている.

トランザクションを構成する作業は、個々の作業は実行結果が「すべてが実行される」か「すべてが実行されない」のどちらかにしかならないような実行条件を課されてまとめられている. とりあえず作業を実行してみて、うまくいけばそのまま実行し、うまくいかなければすべてなかったことにして、最初に立ち戻って再実行する. 上の例で言えば、例えば「Account X の残高更新」が何らかの理由で失敗すれば「Account X から$50 出金」も「Account Y に$50 入金」も「残高更新」もすべてなかったことにして、最初からもう一度始める. すべての作業が正しく完了されれば「送金完了」ということになる.

トランザクションを設定する理由は、上の例のように、少しでも不具合が生じれば作業を停止させるかもう一度最初からやり直す必要があるようなビジネスプロセスが不具合が生じたまま実行されるのを防ぐためである. 「Account A　から$50 出金」していないのに「残高更新」が行われると大きな問題が生じることを想像すれば、それらの作業をトランザクションとしてまとめることに納得できる.

トランザクションの表記
frame| 折りたたまれたサブプロセス BPMNでは、トランザクションは「折りたたまれたサブプロセス」もしくは「展開されたサブプロセス」として扱われ、それらの境界線を2重線で表現する. （右図参照）

サブプロセスも複数の作業をまとめたものであるが、サブプロセスとトランザクションの違いは、サブプロセスが単に複数の作業が連なったものであるのに対し、トランザクションは、互いの関係性が非常に強く実行についての制約条件を付加した複数の作業である点である. frame| 展開されたサブプロセス

トランザクションの評価
BPMNでは、トランザクションの実行結果を　成功終了、失敗終了(キャンセル)、ハザード(例外) の次の3通りに定めている.

成功終了
トランザクションを構成する作業がすべて正しく実行された場合で、トランザクションを含むビジネスプロセスはそのまま進行する.

失敗終了(キャンセル)
以下の二つの場合が失敗終了である. トランザクションが失敗終了すると、通常の流れから外れ、非常事態の流れに移る. このとき、本来のビジネスプロセスは進行せず、トランザクション内の作業は一つも実行されていないことになる.
 * トランザクション内で予め「こうなれば失敗」と設定されていた結果になった場合.
 * トランザクションの外から「中止」のメッセージが送られてきた場合.

また、上で述べたように一度失敗終了してもすべてなかったことにして、最初から再スタートする「補償のロールバック（失敗を補うために戻ること）」を設定することもできる. ただし、トランザクション外で問題が発生して失敗終了した場合は、補償のロールバックの対象にはならない.

ハザード(例外)
トランザクションが何らかの問題により成功終了も失敗終了もできない場合. ハザード(例外)が発生した場合には、トランザクションを構成する作業は一つも実行されていないことになる.

具体例
frame| トランザクション サンプル 出張手配のプロセスを例にとると以下となる.
 * 出張手配成功終了
 * 電車、ホテルの予約が完了した場合.

ただし、電車が予約できなかった場合、航空機の予約ができれば成功終了となる. （「補償」）
 * ビジネスプロセスは本来の流れである「出張依頼」へと進む.


 * 出張手配失敗終了
 * 予約ができなかった場合.
 * ビジネスプロセスは本来の流れでない「日程変更」へと進む.


 * ハザード(例外)
 * 何らかの問題が発生した場合.
 * ビジネスプロセスは中断する.

「出張依頼」を行うには、交通手段と宿泊施設の両方の手配が完了していなければならない. 一方が予約できない場合、仮に他方が予約されていてもキャンセルされる.

関連記事

 * BPMN
 * サブプロセス
 * ビジネスプロセス図