集約フローでの例外の処理

集約フローを使用する場合、例外が生じることがあります。

始める前に

以下のタスクを実行します。

例外の処理

このタスクの概要

応答の集約 ノードのダウンストリームでエラーが検出された場合、統合ノードは例外を発行します。 また、メッセージ・フロー内の別のノードも、ESQL THROW ステートメントを使用して例外を発行することがあります。 いずれの場合にも、例外が起きると、以下の 2 つの場所のどちらかでキャッチされます。

  • 応答が到着する入力ノード
  • 応答の集約 ノード

以下の表に、イベントをリストし、 応答の集約 ノードの下流で発生する例外について説明します。

イベント 伝搬されるメッセージ 出力ターミナル 例外がキャッチされる場所
予期される応答が入力ノードに到着し、 応答の集約 ノードの In ターミナルに渡されます。 この応答は、集約の完成に必要な最後の応答です。 すべての応答を含む集約された応答メッセージ Out Input ノード
予期しない応答が入力ノードに到着し、 応答の集約 ノードに渡されます。 応答は、有効な応答と認識されず、「不明なメッセージ・タイムアウト」プロパティーは 0 に設定される。 受け取られたメッセージ 不明 Input ノード
集約のすべての応答がまだ到着していないのでタイムアウトが生じる。 受け取ったすべての応答を含む集約された応答メッセージ タイムアウト 応答の集約 ノード
保存メッセージは有効な応答と識別されないので、不明タイムアウトが生じる。 保持されたメッセージ 不明 応答の集約 ノード
最後の応答が到着したとき以外に、集約の完成したことが判明した。 すべての応答を含む集約された応答メッセージ Out 応答の集約 ノード

集約フローで生じるエラーを処理するには、メッセージ・フローのそれぞれのノードのすべてのインスタンスにおいて、これらの例外をキャッチする必要があります。

手順

  1. 「統合開発」パースペクティブに切り替えます。
  2. 作業するメッセージ・フローを開きます。
  3. これらの例外を自分で処理するには、各入力ノードおよび 応答の集約 ノードの Catch ターミナルを、発生したエラーを処理する一連のノードに接続します。

    エラー処理のアプローチを統一するには、これらのノードすべての Catch ターミナルをノードの単一シーケンスに接続するか、または 1 つの一貫した方法でエラーを処理するサブフローを作成し、それぞれの Catch ターミナルにそのサブフローを接続します。

  4. 統合ノードがデフォルトのエラー処理を使用してこれらの例外を処理できるようにするには、これらのノードの Catch ターミナルを接続しないでください。

結果

応答の集約 ノードの Catch ターミナルに接続し、このターミナルを介して伝搬されるメッセージを、後で処理するために取り出すことができる宛先に送信する場合は、catch フローに 計算 ノードを組み込んで、トランスポート固有の処理を提供します。 例えば、 MQOutput ノードから WebSphere® MQ キューにメッセージを書き込む場合は、MQMD ヘッダーを追加する必要があります。

以下の ESQL 例は、MQMD ヘッダーを追加して、 応答の集約 ノードが受信した応答を渡す方法を示しています。

-- Add MQMD
SET OutputRoot.MQMD.Version = 2;
.
-- Include consolidated replies in the output message
SET OutputRoot.XMLNS.Data.Parsed = InputRoot.ComIbmAggregateReplyBody;
.

出力メッセージ内の例外に関する情報を伝搬するには、 計算 ノードの 計算モード プロパティーを、 例外を含む値に設定します。