トリキャッチ ノードでの例外のキャッチ

例外が入力ノードに戻される前に、メッセージ・フローで例外をキャッチするための設計を行えます。 フローに 1 つ以上の トリキャッチ ノードを組み込んで、一連のノードに Single Point of Failure を提供することができます。 この技法によって、具体的なエラー処理とリカバリーが可能になります。

このタスクの概要

トリキャッチ ノードは、メッセージをまったく処理しません。メッセージ・フロー内の決定点のみを表します。 トリキャッチ ノードは、メッセージを受信すると、そのメッセージを Try ターミナルに伝搬します。 統合ノードは、そのターミナルに接続している一連のノード (try フロー) に制御を渡します。

例外が試行フローでスローされた場合、統合ノードは トリキャッチ ノードに制御を返します。 トリキャッチ ノードは、例外リスト・ツリーの現在の内容をローカル・エラー・ログに書き込み、次に現在の例外の情報を例外リスト・ツリーに書き込み、そこに保管されている情報を上書きします。

トリキャッチ ノードは、Catch ターミナルに接続されている一連のノード (catch フロー) にメッセージを伝搬します。 伝搬されるメッセージ・ツリーの内容は、Try ターミナルに伝搬された内容と同一です。これは、 トリキャッチ ノードが最初に受け取ったときのツリーの内容です。 このノードは、例外リスト・ツリーに書き込んだ新しい例外情報でメッセージ・ツリーを更新します。 try フローにある各ノードがメッセージ・ツリーに対して行った変更や追加は、catch フローに伝搬されるメッセージ・ツリーには反映されません。

ただし、try フローが外部データベースの更新を含む処理を完了した場合、これらの更新は失われません。catch フローによってメッセージが処理されている間、更新はそのまま保持され、更新をコミットするかロールバックするかの決定が、メッセージ・フローの構成内容と、対象データベースと対話する個々のメッセージ・フロー・ノードの構成内容に基づいて行われます。 設定した構成内容に基づいて更新がコミットされる場合は、行われた変更をロールバックするためのロジックを catch フロー内に組み込む必要があります。

構成のオプションを確認するには、 メッセージ・フローのトランザクション性の構成を参照してください。

トリキャッチ ノードの catch フローで例外がスローされた場合 (例えば、 スロー ノードを組み込んだ場合、ESQL THROW ステートメントをコーディングした場合、または統合ノードが例外を生成した場合)、統合ノードはメッセージ・フロー内の次の catch ポイント (別の トリキャッチ ノードなど) に制御を戻します。

以下の例では、入力ノードで例外をキャッチするためのフロー構成の方法を示します。 MQ 入力 ノードの Catch ターミナルは、エラーを記録するために トレース ノードに接続されています。

このメッセージ・フローには、MQInput ノード、Compute ノード、および MQOutput ノードがあります。 MQInput ノードの catch ターミナルは、Trace ノードに接続されています。

以下の例では、メッセージ・フローには、 フィルター ノードの True ターミナルと False ターミナルに接続された 2 つの別個の処理フローがあります。 ここでは、メッセージが取ることができる 2 つの経路のそれぞれに トリキャッチ ノードが含まれています。 両方の トリキャッチ ノードの Catch ターミナルは、共通のエラー処理サブフローに接続されています。

このメッセージ・フローには、MQInput ノードの後に Filter ノードがあります。このノードは、メッセージ内の値をテストするようにコーディングされています。 Filter ノードの true ターミナルに TryCatch ノードが接続され、その try ターミナルが Compute ノードに接続されて、その後に MQOutput ターミナルが続きます。 その catch ターミナルは、一般的なエラー処理ルーチンを提供する error1 というサブフローに接続されています。 2 番目の TryCatch ターミナルは Filter ノードの false ターミナルに接続されています。 その try および catch ターミナルは、最初の TryCatch ターミナルと同じ一連のノードに接続されます。

メッセージ・フロー内の入力ノードに Catch ターミナルがなく、フロー内のエラーを処理する場合は、 トリキャッチ ノードを組み込む必要があります。