概念: エラー ハンドラー コンポーネント
Studio の
"Palette"
には、以下の 3 つの異なる "Error Handlers"
が用意されています。
名称 | 関数 |
|---|---|
send-error
| 標準コンポーネントとステップを使用してエラーを処理できます。一般的なパターンでは、 "send-error" を使用して "PutIntegrationMessage" 共通コンポーネントを呼び出し、インテグレーション イベントにエラーを報告します。 |
log-error
| 現在のエラーを出力ログに記録します。エラー メッセージと Java 例外のスタック トレースが含まれます。インテグレーション イベントでエラーを個別に公開する必要はありませんが、エラー発生時のメッセージを記録する場合に使用します。大きなメッセージは、パフォーマンスを低下させたり切り捨てられたりして、診断データが失われる可能性があるため記録しないでください。 |
custom-error-handler
| Java を使用してエラーを処理する Spring Bean を提供できます。エラー処理に複雑な Java コードが必要な場合に使用します。 |
エラー ハンドラーは、メディエーション コンポーネントの子エレメントとして、またはアセンブリの個々のエレメントとして追加できます。メディエーション コンポーネントに追加されたエラー ハンドラーはローカルです。アセンブリのエラー ハンドラーはグローバルです。
Studio インテグレーションでエラーが発生した場合、通常の処理は停止され、処理されたコンポーネントのチェーンを巻き戻し、呼び出すエラー ハンドラーが探されます。常に最初にローカルでエラーを処理しようとします。使用可能なローカル エラー ハンドラーがない場合、責任はグローバル エラー ハンドラーに渡されます。エラー発生時の処理を詳細に制御する必要がある場合や、エラー発生時にインテグレーションが実行していたことに関する詳細なコンテキストを報告する必要がある場合は、ローカル エラー ハンドラーを使用します。グローバル エラー ハンドラーはフェイルセーフと考えてください。
すべてのエラー ハンドラーが起動されても、エラーが処理済みとしてマークされていない場合、Workday はメッセージを処理し、例外からエラーを生成してアセンブリを "終了" としてマークします。インテグレーションは "完了 (エラー)" と記述されます。
重要なデフォルト動作は以下のとおりです。
- ローカル エラー ハンドラーは、親メディエーション コンポーネントで発生したエラーのみを処理する。しかし、下流コンポーネントのエラーを処理することもできます。この動作を有効にするには、エラー ハンドラーを含むメディエーション コンポーネントの"Handle Downstream Errors"プロパティを"はい"に設定します。
- エラー ハンドラーが呼び出されると、エラーは処理済みとしてマークされる。ただし、エラー ハンドラーの"Rethrow Error"プロパティを"はい"に設定した場合、エラーはクリアされません。その結果、次の範囲内の上流エラー ハンドラーまたはグローバル エラー ハンドラーによって処理されます。このパターンを使用すると、エラーの詳細はローカルで報告されますが、失敗全体または完了は検証レポートの上位レベルで処理されます。
- エラーを処理すると、起動されたエラー ハンドラーからメッセージの処理が再開され、エラーが発生した要素に向けた応答パスを続行します。ただし、その代わりに、エラーが発生したエレメントから処理を再開するように指定できます。この動作を有効にするには、エラー ハンドラーを含むメディエーション コンポーネントの"Continue After Error"プロパティを"復元"に設定します。この動作は、エラー ハンドラーに呼び出されたコードによってエラー状態を訂正でき、失敗した操作の再試行を成功させることができる場合に使用します。
"プロパティ"
ビューに MVEL 条件式を追加することで、エラー ハンドラーをより詳細に制御できます。条件式が存在する場合、すべてが真と評価される場合にのみ、エラー ハンドラーが実行されます。次の方法を使用して、強制的にエラーを発生させることができます。
context.setError
または context.SetException
メソッド (MVER または Java コード)。使用する場合 setError
エラー ハンドラーの条件式で検出できるエラー ID を設定できます。エラーをローカルで処理しているものの、エラー タイプの詳細を上流のエラー ハンドラーに送って共通処理を行う場合に、この方法を使用します。また、以下のように
"Route"
コンポーネントを使用してエラーを処理することもできます。
- "failover-strategy"はルーティングの使用を試み、またエラーが発生した場合は、フェイルオーバー ルーティングを実行して "処理済み" としてエラーをマークする。
- カスタム ストラテジック率を使用すると、書式設定で "サードパーティ" を指定できます。スプレッド シートの実装RoutingStrategyインターフェイス。isHandleError方法この方法を使用して、ストラテジーでエラーを処理することを指定します。