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

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

始める前に:

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

例外の処理

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

  • 応答が到着する入力ノード
  • AggregateReply ノード

以下の表は、イベントをリストし、AggregateReply ノードの下流で例外が起きたらどうなるかを説明しています。

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

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

  1. 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
  2. 作業するメッセージ・フローを開きます。
  3. これらの例外を自分で処理するには、それぞれの入力および AggregateReply ノードの Catch ターミナルを、発生したエラーを処理するノードのシーケンスに接続します。

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

  4. ブローカーがデフォルトのエラー処理を使用してこれらの例外を処理できるようにするには、これらのノードの Catch ターミナルを接続しないでください。
AggregateReply ノードの Catch ターミナルを接続し、このターミナルを介して伝搬されるメッセージを、その後の処理に備えて検索可能な宛先に出力するには、Compute ノードを catch フローに組み込んで、トランスポート固有の処理を行えるようにする必要があります。 例えば、メッセージを MQOutput ノードから WebSphere® MQ キューに書き込みたい場合は、MQMD ヘッダーを追加する必要があります。

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

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

例外についての情報を出力メッセージで伝搬するには、 Compute ノードの 「計算モード」プロパティーに、「例外」を含む値を設定する必要があります。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:42:51

ac12340_