トリキャッチ ノードでの例外のキャッチ
例外が入力ノードに戻される前に、メッセージ・フローで例外をキャッチするための設計を行えます。 フローに 1 つ以上の トリキャッチ ノードを組み込んで、一連のノードに Single Point of Failure を提供することができます。 この技法によって、具体的なエラー処理とリカバリーが可能になります。
このタスクの概要
トリキャッチ ノードは、メッセージをまったく処理しません。メッセージ・フロー内の決定点のみを表します。 トリキャッチ ノードは、メッセージを受信すると、そのメッセージを Try ターミナルに伝搬します。 統合ノードは、そのターミナルに接続している一連のノード (try フロー) に制御を渡します。
例外が試行フローでスローされた場合、統合ノードは トリキャッチ ノードに制御を返します。 トリキャッチ ノードは、例外リスト・ツリーの現在の内容をローカル・エラー・ログに書き込み、次に現在の例外の情報を例外リスト・ツリーに書き込み、そこに保管されている情報を上書きします。
トリキャッチ ノードは、Catch ターミナルに接続されている一連のノード (catch フロー) にメッセージを伝搬します。 伝搬されるメッセージ・ツリーの内容は、Try ターミナルに伝搬された内容と同一です。これは、 トリキャッチ ノードが最初に受け取ったときのツリーの内容です。 このノードは、例外リスト・ツリーに書き込んだ新しい例外情報でメッセージ・ツリーを更新します。 try フローにある各ノードがメッセージ・ツリーに対して行った変更や追加は、catch フローに伝搬されるメッセージ・ツリーには反映されません。
ただし、try フローが外部データベースの更新を含む処理を完了した場合、これらの更新は失われません。catch フローによってメッセージが処理されている間、更新はそのまま保持され、更新をコミットするかロールバックするかの決定が、メッセージ・フローの構成内容と、対象データベースと対話する個々のメッセージ・フロー・ノードの構成内容に基づいて行われます。 設定した構成内容に基づいて更新がコミットされる場合は、行われた変更をロールバックするためのロジックを catch フロー内に組み込む必要があります。
構成のオプションを確認するには、 メッセージ・フローのトランザクション性の構成を参照してください。
トリキャッチ ノードの catch フローで例外がスローされた場合 (例えば、 スロー ノードを組み込んだ場合、ESQL THROW ステートメントをコーディングした場合、または統合ノードが例外を生成した場合)、統合ノードはメッセージ・フロー内の次の catch ポイント (別の トリキャッチ ノードなど) に制御を戻します。
以下の例では、入力ノードで例外をキャッチするためのフロー構成の方法を示します。 MQ 入力 ノードの Catch ターミナルは、エラーを記録するために トレース ノードに接続されています。
以下の例では、メッセージ・フローには、 フィルター ノードの True ターミナルと False ターミナルに接続された 2 つの別個の処理フローがあります。 ここでは、メッセージが取ることができる 2 つの経路のそれぞれに トリキャッチ ノードが含まれています。 両方の トリキャッチ ノードの Catch ターミナルは、共通のエラー処理サブフローに接続されています。
メッセージ・フロー内の入力ノードに Catch ターミナルがなく、フロー内のエラーを処理する場合は、 トリキャッチ ノードを組み込む必要があります。