最近のアクセス:
ページ
履歴
バックリンク
BPMN 入門 - エラー処理
エラー処理
BPMN はあるアクティビティまたはプロセスフローのあるポイントで実行中に発生したエラーを処理するためにエラーイベントを使用します。このイベントは中間または終了イベントとして設定できます。
中間イベント/エラー
エラー中間イベントはアクティビティにのみ付加することができます。これは、タスクの実行中に発生するエラーを処理するための代替パスの設定を可能にします。
下図では、このモデリングパターンを例示しています:
前のケースでは、"Handle shipment" アクティビティの実行中にエラーが発生した場合、このエラーは添付されたエラーイベントで検出され、フローは "Handle Shipment Failure" に向かって進みます。
一般的に、エラーのさまざまなタイプはアクティビティの実行中に発生します。一定のエラーを検出するには、コードによって、エラーイベントの "ErrorCode" 項目属性で識別されるエラーを特定する必要があります。"ErrorCode" に値が指定されていない場合、対応するイベントはアクティビティで発生するすべてのエラーを検出します。BPMN 2.0 の仕様によると、この項目属性は String タイプです。
アクティビティでエラーが発生し、該当のアクティビティに追加されている中間イベントを使用して検出されない場合、エラーが発生したプロセスの親プロセスに伝播されます。このケースでは、エラーは次で示すように検出されます:
親プロセスでエラーが検出されない場合、次の親プロセスに伝播され、エラーが検出されるか上位のプロセスがなくなるまで伝播されます。エラーが一度だけ検出されるのかを明らかにすることが重要です (これは言語プログラミングのメカニズムの試行/検出と良く似ています)。
終了イベント/エラー
エラー終了イベントはエラーのある一定のプロセスのパスの終点を示すために使用されます。このエラーは、エラー中間イベントと同じ方法で親プロセスに伝播されます。
下図では、このモデリングパターンを例示しています:
トランザクションのサブプロセス
BPMN は埋め込まれたサブプロセスをトランザクションとして考慮可能であることを明示しています。つまり、すべてのサブプロセスのタスクは正しく完了する必要があります。これ以外の場合、プロセスは取り消され、そこに含まれるすべてのアクティビティが取り消されることを意味しています (ロールバック)。
トランザクションのサブプロセスは、二重の境界線で視覚的に示されます。
埋め込まれたサブプロセスがトランザクションであることを示すには、Boolean タイプの項目属性が使用されます。
埋め込まれたトランザクションサブプロセスを示すには、ロールバックにする必要があり、キャンセルの終了イベントが使用されます。したがって、これらのイベントはプロセスロールバックの終点となるサブプロセスパスを示すのに使用されます。下図では、使用方法を例示しています:
上の例では、予約されたいずれかのアクティビティにおいて可用性の不足のためにエラーが発生する場合、フローはキャンセルの終了イベントに移動します。この場合、プロセスロールバックが有効になり、完了したすべての予約されたアクティビティが取り消されます。 完了したタスクとは逆の順序で取り消されることに注意する必要があります。
加えて、キャンセル終了イベントは埋め込まれたサブプロセスに追加することができます。サブプロセスが取り消されると、このイベントによって示されるパスに従ってフローを続行することができます。
ロールバック実行時のアクティビティの補償
トランザクションのサブプロセスがロールバックの場合、特定のアクションは特定のアクティビティを取り消すために実行される必要があります。一般的に、これらのアクティビティの実行はデータベースに変更を加えることを意味しています。これらのケースを処理するためには、サブプロセスの各アクティビティが補償アクティビティに関連している必要があります。この関連付けは下図で示すとおり、補償中間イベント経由で実行されます。
上記の例では、各予約アクティビティは、関連するアクティビティを取り消す補償タスクに関連付けられています。
補償アクティビティはシーケンス・フロー・コネクターではなく、関連コネクターを使用して、補償イベントに接続されるということを覚えておいてください。加えて、これらのアクティビティはすべてのシーケンスフローの一部にすることはできません。つまり、入力または出力のシーケンス・フロー・コネクターを保持することができません。
複数のアクティビティが補償される場合、対応する補償アクティビティは、補償するためのアクティビティが完了するたびに 1 つずつ実行されます。
重大なエラー (リスク)
トランザクションのサブプロセスで発生したエラーはロールバックメカニズムによって修正されるため、さらに複雑です。このケースでは、キャンセル終了イベントは使用されません。代わりに、サブプロセスに追加されているエラーイベントを使用してエラーが検出され、後で代替のフローによって処理されます。
トランザクションなしの補償アクティビティのトリガー
補償終了イベントは、補償する必要があるアクティビティを表示することができます。補償されるアクティビティはイベントの項目属性で識別される必要があります。― BPMN はどれを使用する必要があるのか特定しません。このアクティビティは補償終了イベントとして同じプロセスに含まれています。また、追加された補償イベントが必要です。補償されるアクティビティが指定されていない場合、正常に完了し、追加された補償イベントを持つすべてのアクティビティが補償されます。
下図では、このモデリングパターンを例示しています:
メイン記事に移動する
-
前のセクションに戻る