Java Actionの実行中にエラーが発生した場合は、例外がスローされます。Systemwalker Runbook Automationでは、Java Actionのエラーに対して独自のエラー処理を定義できます。これにより、例外がスローされたときにプロセスインスタンスがエラー状態になることを防止できます。
また、トランザクションがロールバックされてプロセスインスタンスがエラー状態に設定される前にクリーンアップを実行するJava Actionを定義することもできます。これには、Java Actionセット内のすべてのJava Actionのロールバックが含まれます。プロセスインスタンスがエラー状態に設定される前に、エラー発生時の通知メールの送信などの一般的なアクションを実行したり、何らかの特別なアクションを実行することができます。
Systemwalker Runbook Automationには、Java Actionのエラーを処理する以下のオプションが用意されています。
補償アクション:
補償アクションは、システムをクリーンアップし、トランザクションに関連するすべてのシステム(外部データベースやメールサーバなど)を一貫した状態に保ちます。補償アクションは、外部システムが関係する場合に特に役立ちます。
Java Actionに対してエラー処理を定義しない場合、このJava Actionで例外がスローされたときは、トランザクションがロールバックされます。ただし、ロールバックは、アプリケーションサーバのコンテキストでの変更に対してのみ実行されます。外部システムでのすべてのトランザクション(外部データベースに行が追加されるなど)は、ロールバックされません。このため、場合によっては、トランザクションで使用されたすべてのシステムを一貫した状態に保つために、外部システムを手動でクリーンアップする必要があります。必要な場合は、補償アクションセットを使用できます。
アクションセット内の任意のJava Actionに対して補償アクションを指定できます。補償アクションは、たとえば新しくデータベースに追加された行を削除したり、追加のメールを送信するような場合に役立ちます。通常のJava Actionセットで例外が発生した場合は、例外がスローされる前に、正常に実行されたすべてのJava Actionに対して定義されているすべての補償アクションが逆の順序で呼び出されます。
注意
補償アクションを別の補償アクションに埋め込むことはできません。補償アクションが例外をスローした場合、プロセスインスタンスは直ちにエラー状態になり、残りの補償アクションの実行は中止されます。
エラーアクション:
Java Actionレベルで、関係する通常のJava Actionから例外がスローされると、エラーアクションセットが活性化します。エラーアクションは、他のすべてのアクションセットと同様に、アクションセット内にまとめられています。エラーアクションは、アクションセット内の任意のアクションに対して指定できます。ただし、エラーアクションで発生した例外を処理するためのエラーアクションは定義できません。
[例外処理]タブの[エラーアクション]では、すべてのエラーアクションに対して、追加のエラー処理設定を指定できます。ただし、このタブは、プロセス定義のJava Actionに対してエラーアクションを定義する場合にのみ使用できます。プロセス定義レベルで補償アクションを定義する場合は、エラー処理設定を定義する必要はありません。
エラー後の動作:エラーアクション実行後のプロセスインスタンスの動作を指定します。プロセスインスタンスをエラー状態にするか、エラーが発生しても実行を継続するかを指定できます。
対象とするException:どのような例外がスローされた際にエラーアクションを実行するかを選択できます。
注意
エラーアクションが例外をスローした場合、トランザクションは直ちにロールバックされ、プロセスインスタンスはエラー状態になります。このような場合に対するエラーアクションを定義することはできません。
通常のJava Actionに対してエラーアクションまたは補償アクションを定義するには、以下の手順に従います。
[プロパティ]ビューを表示するために、プロセス定義エディタ内の空のスペースをクリック、または、Java Actionを設定するノードを選択します。
[アクションセット]タブを選択します。
選択したプロセス定義またはノードで使用できるすべてのJava Actionが表示されます。通常のJava Actionに対するエラーまたは補償Java Actionがまだ定義されていない場合は、エラーおよび補償Java Action用の空のフォルダが表示されます。以下の図は、2つのJava Actionで構成されるActivityノードの[開始アクション]フォルダを示しています。
図11.5 [プロパティ]ビューに表示された開始アクション
エラーまたは補償アクションの定義対象とする通常のJava Actionを選択します。
[エラーアクション]または[補償アクション]フォルダ、またはフォルダ内のエラーまたは補償アクションを選択し、[追加]をクリックします。
[アクションタイプ一覧]ダイアログが表示されます。ここで、Java Actionを選択し、このアクションを新しいエラーまたは補償アクションとして追加できます。
[アクションタイプ一覧]ダイアログで、追加するJava Actionが含まれるフォルダを展開します。Java Actionを選択し、[作成]をクリックします。
選択したJava Actionの詳細を入力するダイアログが表示されます。選択したアクションに応じて必要な操作を行います。
Java Actionに対してエラーアクションを定義する場合:選択したJava Actionの[アクションエディタ]の[エラー処理]タブをクリックします。ここで、以下のエラー処理設定を指定できます。
注意
このタブは、通常のJava Actionに対してエラーアクションを定義する場合にのみ使用できます。補償アクションを定義する場合、またはプロセス定義レベルでエラーアクションを定義する場合は、このタブを使用できません。
図11.6 [エラー処理]タブの表示
エラー後の動作:エラーアクション実行後のプロセスインスタンスの動作を指定します。プロセスインスタンスをエラー状態にする場合は、[エラー状態へ遷移]ラジオボタンを選択します。エラーが発生すると、エラーが発生したJava Actionに対して指定された補償アクションと、プロセスレベルのエラーアクションが実行され、プロセスインスタンスはロールバックされてエラー状態になります。
プロセスインスタンスの実行を継続する場合は、[プロセス続行]ラジオボタンを選択します。エラーが発生すると、例外がキャッチされ、失敗したJava Actionに対して指定されているエラーアクションが実行されて、プロセスインスタンスは続行されます。デフォルト設定は、[エラー状態へ遷移]です。
注意
複数のエラーアクションを異なる設定で定義してある場合は、[エラー状態へ遷移]の設定が[プロセス続行]の設定よりも優先されます。
対象とするException:どのような例外がスローされた際にエラーアクションを実行するかを選択できます。エラーアクションをあらゆる種類の例外に対応させる場合は、[すべてのExceptionをcatchする]ラジオボタンを選択します。この場合、[追加]および[削除]ボタンは無効になります。
エラーアクションを特定の種類の例外に対応させる場合は、[以下で指定したExceptionをcatchする]ラジオボタンを選択します。この場合は、[追加]および[削除]ボタンを使用して、例外クラス名(たとえば、java.lang.NullPointerException)を指定する必要があります。
ただし、例外クラスとしてjava.lang.Exceptionを指定すると、[すべてのExceptionをcatchする]を指定した場合と同じ動作になります。さらに具体的に指定しない限り、すべての例外はこのクラスに属するからです。
任意のエラー処理設定を組み合わせることができます。組み合わせによって異なるエラー処理操作が実行されます。以下の表は、すべての可能な組み合わせと、定義済みJava Actionが実行された場合の効果を示しています。
エラー処理設定 | エラー状態へ遷移 | プロセス続行 |
---|---|---|
すべてのExceptionをcatchする | Java Actionが任意の種類の例外をスローすると、指定されたエラーアクションが実行されます。トランザクションはロールバックされ、プロセスインスタンスはエラー状態になります。 | 任意の種類の例外がJava Actionからスローされると、指定されたエラーアクションが例外をキャッチし、プロセスインスタンスは続行されます。 |
以下で指定したExceptionをcatchする | 指定された例外がJava Actionからスローされると、エラーアクションが実行されます。トランザクションはロールバックされ、プロセスインスタンスはエラー状態になります。 指定されていない例外がJava Actionからスローされると、エラーアクションは実行されず、トランザクションがロールバックされて、プロセスインスタンスはエラー状態になります(デフォルトのエラー処理動作)。 | 指定された例外がJava Actionからスローされると、エラーアクションが例外をキャッチし、プロセスインスタンスは続行されます。 指定されていない例外がJava Actionからスローされると、エラーアクションは実行されず、トランザクションがロールバックされて、プロセスインスタンスはエラー状態になります(デフォルトのエラー処理動作)。 |
選択したJava Actionの詳細を入力し、エラーアクションの動作を指定したら、[OK]をクリックします。
[プロパティ]ビューに、新しいJava Actionが表示されます。以下の例では、開始アクションに1つのエラーアクションと1つの補償アクションが追加されています。
図11.7 エラーアクションと補償アクションの追加