Try スコープ

Try スコープを使用すると、Try スコープ内のコンポーネントの実行時に発生するエラーを処理できます。トランザクションもサポートします。Try スコープは、1 つまたは複数のイベントプロセッサをラップし、内部のイベントプロセッサがスローする例外をキャッチして処理します。まるで、エラー処理戦略が設定された別のフローにこれらのイベントコンポーネントを抽出したような動作となりますが、実際には新しいフローは定義せず、すべてインラインで処理を実行します。

Try スコープでのエラー処理

Try スコープは自身のエラー処理戦略を持ち、フローのエラー処理を設定するのと同じように設定できます。フロー全体ではなく、内部コンポーネントのエラー処理をサポートすることで、別のフローにこれらのコンポーネントを抽出する必要性を排除しています。

Try スコープでのエラー処理

すべてのエラー処理と同様、Try スコープは、さまざまなエラー種別の条件を見極めて、それぞれに適した動作を適用します。

フロー内で発生するすべてのエラーと同じように、Try スコープ内のコンポーネントでエラーが発生すると、Try スコープのエラーハンドラが実行され、エラーが該当のハンドラにルーティングされます。この時点で、エラーを調査することができ、ハンドラは状況に応じて実行および動作できます。

  • On Error Continue (エラー時続行) は、オーナーが実行を正常に完了したかのように、実行結果をオーナーの結果として使用します。この時点でのトランザクションはすべてコミットされます。

  • On Error Propagate (エラー時伝播) は、トランザクションをすべてロールバックして実行し、結果を使用して既存のエラーを再びスローすることで、オーナーが失敗したと見なされるようにします。

Try スコープに複数のコンポーネントがある場合、1 つのコンポーネントが例外をスローすると、例外をキャッチしたエラーハンドラの種別には関係なく、Try スコープ内の以降のコンポーネントはスキップされます。On Error Propagate (エラー時伝播) の場合、まるで Try スコープが存在しないかのように、エラーがフローのエラーハンドラに伝播されます。On Error Continue (エラー時続行) の場合は、まるで Try スコープが例外をスローしなかったかのように、Try スコープ外部の次の下流フローコンポーネントから処理が続行します。

上の例では、On Error Propagate (エラー時伝播) (on-error-propagate) 設定によってデータベース接続エラー (DB:CONNECTIVITY) が伝播されます。このエラーの伝播により、Try プロセスは失敗し、フローのエラーハンドラが実行されます。他のエラーは On Error Continue (エラー時続行) (on-error-continue) によって処理されるため、これらのエラーの発生時には Try は成功したように扱われ、次のプロセッサである HTTP 要求が実行されます。

フロー内では、Try スコープ内でエラーをスローする可能性のあるイベントプロセッサをグループ化できます。Try スコープでは、フロー内の各種イベントプロセッサをグループ化して、操作が失敗した場合に備えて エラーハンドラスコープに割り当てることができます。
また、Try スコープ内の操作をトランザクションとして処理するように設定することもできます。

トランザクションの処理

Try スコープは、分割できないトランザクションとして子操作を扱うように設定できます。トランザクションとは、絶対に部分的には実行されない一連のアクションです。トランザクションのスコープ内のすべての操作は、同じスレッドで実行され、エラーが発生すると、ロールバックかコミットのどちらかの結果となります。

Try スコープの設定

トランザクションアクション (transactionalAction) が ALWAYS_BEGIN または BEGIN_OR_JOIN に設定されている場合、Try スコープは、子操作をトランザクションとして扱います。次のように設定できます。

  • Ignore (無視) (INDIFFERENT):

    デフォルト。アクションは、トランザクションとして扱われません。エラーが発生してもロールバックやコミットは行われません。

  • Always Begin (常に開始) (ALWAYS_BEGIN)

    スコープを実行する度に、新しいトランザクションが開始されます。

  • Begin or Join (開始または結合) (BEGIN_OR_JOIN)

    実行順序が (フロー外で発生する非同期アクションなどによって) 変化する場合にのみ適用され、フローの現在の処理ですでにトランザクションが開始されている場合は、そのトランザクションに結合します。開始されていなければ、新しいトランザクションを開始します。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub