Compute ノード

Compute ノードは、1 つ以上の新規出力メッセージを構成するために使用します。

このトピックには、以下のセクションが含まれています。

目的

Compute ノードで作成する出力メッセージは、入力メッセージに提供された情報を変更することによって作成するか、データベースまたはその他のソースから入手できる新規情報のみを使って作成することができます。 入力メッセージのエレメント (例えばヘッダー、ヘッダー・フィールド、および本体データ)、関連する環境、および例外リストを使用して、新規の出力メッセージを作成できます。

メッセージ・フロー ESQL リソース・ファイル内に ESQL をコーディングすることにより、新規メッセージの作成方法を指定します。詳しくは、ESQL の指定を参照してください。

以下の目的で、Compute ノードを使用します。

  • 割り当てステートメントのセットを使用して、新しいメッセージを構築する
  • パーサー間でメッセージをコピーする
  • メッセージをあるコード・セットから別のコード・セットに変換する
  • メッセージをある形式から別の形式に変換する

Compute ノードはパレットの 「変換」ドロワーに含まれていて、ワークベンチ内では次のアイコンによって表されます。

Compute ノード・アイコン

メッセージ・フロー内でのこのノードの使用

このノードが使用される方法に関しては、次のサンプルを参照してください。 サンプルは、Message Brokers Toolkit と統合されているインフォメーション・センターを使用する場合にのみ表示できます。

監査目的のため、受け取るオーダーのそれぞれに固有な ID を付けたいメッセージ・フローを考えてください。Compute ノードは入力メッセージを変更しないで、変更された新しいメッセージのコピーを出力メッセージとして作成します。 Compute ノードを使ってオーダーに対する固有の ID を出力メッセージに挿入し、メッセージ・フロー内の後続ノードがそのメッセージを使用することができます。

Compute ノードの構成

Compute ノードのインスタンスをメッセージ・フローに入れると、それを構成することができます。メッセージ・フロー・ノードの構成を参照してください。 ノードのプロパティーが、「プロパティー」ビューに表示されます。ノードのプロパティーを「プロパティー」ダイアログに表示するには、ノードをダブルクリックするか、またはノードを右クリックしてから「プロパティー」をクリックします。

値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、アスタリスクが表示されます。

以下のように、Compute ノードを構成します。

  1. データベース対話の定義
  2. ESQL の指定
  3. モードの設定
  4. メッセージの妥当性検査

データベース対話の定義

このノードからデータベースにアクセスするには、以下のようにします。

  • 「基本」タブで、「データ・ソース」に、このメッセージ・フローが実行されるシステム上で該当するデータベースが認識される名前を指定します。 ブローカーは、mqsicreatebrokermqsichangebroker、または mqsisetdbparms コマンドを使用してセットアップしたユーザー ID およびパスワード情報を使用して、このデータベースに接続します。

    z/OS platform z/OS® システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。

  • ドロップダウン・メニューから「トランザクション」の設定値を選択します。 値は以下のとおりです。
    • 「自動」(デフォルト)。 Compute ノードが属するメッセージ・フローが正常に行われると、そのメッセージ・フローがコミットされます。 つまり、ESQL モジュールで定義したアクションがメッセージ上で実行され、それはメッセージ・フローを通して継続します。 メッセージ・フローは、失敗するとロールバックされます。 「自動」を選択した場合、データベース上で Compute ノードのアクションをコミットするかロールバックするかは、メッセージ・フロー全体の成功または失敗に依存します。
    • 「コミット」。メッセージ・フロー全体の成功または失敗に関係なく、データベース上で Compute ノードのアクションをコミットするには、「コミット」を選択します。 メッセージ・フローが失敗しても、データベースへの更新はコミットされます。

    ここで選択した値が、ユーザーが追加した 1 つ以上のデータベース表にインプリメントされます。表毎に違う値を選択することはできません。

  • データベース警告メッセージをエラーとして扱い、ノードから出力メッセージを Failure ターミナルに伝搬する場合は、「警告をエラーとして扱う」を選択します。 最初、このチェック・ボックスはチェックされていません。

    このチェック・ボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードに対する処理と同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。

    このチェック・ボックスを選択しなかった場合、ノードは警告を通常の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で正常な戻りコードとして支障なく扱うことができます。

  • データベース・エラーが検出されたときにブローカーが例外を生成するように強制するには、「データベース・エラーで例外をスローする」を選択します。 最初、このチェック・ボックスは選択されています。

    このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを調べるために ESQL を含める必要があります (これには SQLCODE および SQLSTATE を使うことができます)。エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、メッセージ・フローの中で Throw ノードを使用して後で独自の例外を生成することができます。

ESQL の指定

Compute ノードの動作をカスタマイズするには、ESQL ステートメントをコーディングします。 例えば、入力メッセージ、データベースの内容 (変更なし、または変更あり)、または新しいデータを使って 1 つ以上の新規出力メッセージを作成するようにこのノードをカスタマイズできます。 データベースからの値を追加することにより入力メッセージ内の値を変更し、その結果を出力メッセージ内のフィールドに保管することもできます。

必要な ESQL ステートメントは、この Compute ノードのインスタンスが含まれるメッセージ・フローに関連付けられた ESQL ファイル内にコーディングします。デフォルトで <message_flow_name>.esql という名前を持つこの ESQL ファイルには、ESQL を必要とするメッセージ・フロー内のすべてのノード用の ESQL が含まれています。特定のノードに関連したコードの部分はモジュールと呼ばれます。

このメッセージ・フロー用の ESQL ファイルが存在していない場合、Compute ノードをダブルクリックするか、またはこのノードを右クリックして、「ESQL のオープン」をクリックします。 このアクションにより、ESQL エディター・ビューに新しい ESQL ファイルが作成されてオープンされます。 「ブローカー開発」ビューで適切な ESQL ファイルをオープンし、「アウトライン」ビューでこのノードを選択することもできます。

このファイルが既に存在する場合、「ESQL モジュール」プロパティーの隣にある「参照」をクリックすると、「モジュール選択」ダイアログ・ボックスが表示され、このメッセージ・フローからアクセスできる ESQL ファイルで定義されている選択可能な Compute ノード・モジュールがリストされます (ESQL ファイルは従属する他のプロジェクトで定義することができます)。 適切なモジュールを選択して、「OK」をクリックします。使用できる適切なモジュールがない場合は、リストは空になります。

指定されたモジュールが存在しない場合は作成され、エディターはそれを表示します。 ファイルとモジュールが既に存在する場合、エディターは正しいモジュールを強調表示します。

新規または既存の ESQL ファイル内でこのノード用にモジュール・スケルトンが作成された場合、以下の ESQL が含まれます。この例では、デフォルトのモジュール名が表示されています。

CREATE COMPUTE MODULE <flow_name>_Compute
       CREATE FUNCTION Main() RETURNS BOOLEAN
       BEGIN
              -- CALL CopyMessageHeaders();
              -- CALL CopyEntireMessage();
              RETURN TRUE;
       END;

       CREATE PROCEDURE CopyMessageHeaders() BEGIN
              DECLARE I INTEGER 1;
              DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
              WHILE I < J DO
                     SET OutputRoot.*[I] = InputRoot.*[I];
                     SET I = I + 1;
              END WHILE;
       END;

       CREATE PROCEDURE CopyEntireMessage() BEGIN
              SET OutputRoot = InputRoot;
       END;
END MODULE;
この Compute ノードを含むメッセージ・フローを、バージョン 5.0 より前のバージョンのブローカーにデプロイする場合には、上に示されているモジュール・スケルトンの ESQL に以下の変更を加えます。
  • 次の部分を
    DECLARE I INTEGER 1;
    次の内容で置換します。
    DECLARE I INTEGER; SET I=1;
  • 次の部分を
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    次の内容で置換します。
    DECLARE J INTEGER; SET J=CARDINALITY(InputRoot.*[]);

自分で ESQL モジュールを作成する場合、このスケルトンをそのまま正確に作成する必要があります。 ただし、プロシージャー呼び出しと定義は別です (後述)。 デフォルトの名前を変更することができますが、指定する名前は、対応するノード・プロパティー「ESQL モジュール」の名前と一致することを確認してください。 モジュール名に 1 つ以上のスペースを含めるには、「ESQL モジュール」プロパティーで、名前を二重引用符で囲まなければなりません。

このノードをカスタマイズするための ESQL を、BEGIN ステートメントと CREATE FUNCTION から RETURN TRUE の間に追加します。 スケルトンに組み込まれている、プロシージャー CopyEntireMessage と CopyMessageHeaders への 2 つの呼び出しを使用することができます。

これらのプロシージャーは、関数 Main の次に定義されており、メッセージを操作するときに必要となるかもしれない一般的な機能を備えています。 スケルトンの中で、呼び出しはコメント化されています。 プロシージャーを使用するには、コメント・マーカーを除去します。 プロシージャーを使用しない場合は、呼び出しとプロシージャー定義を両方ともモジュールから除去します。

モードの設定

計算モード」プロパティーは、どのコンポーネントがデフォルトで出力メッセージ内で使用されるかを制御します。 プロパティーを選択し、「メッセージ」「LocalEnvironment」(以前は DestinationList と呼ばれていました)、および「例外」コンポーネント (これらはノード内で生成されるかまたは着信メッセージに含まれているかのどちらか) が使用されるかどうかを指定します。

このデフォルト値は、ノードにおける処理完了時に変換済みメッセージが Out ターミナルにルーティングされるときに使用されます。 また、PROPAGATE ステートメントがその出力メッセージの構成を指定していない場合にもこのデフォルト値が常に使用されます。

選択に含めなかったコンポーネントは、未変更で渡されます。 これらのコンポーネントを変更しても、更新はこのノードに対してローカルになります。

逆に、選択に含めたコンポーネントは渡されず、このノードで行われた更新が持続します。

計算モード」プロパティーが取ることのできる 7 つの値が、以下の表にリストされています。
モード 説明
メッセージ (デフォルト) メッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
LocalEnvironment LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
LocalEnvironment とメッセージ LocalEnvironment ツリー構造とメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
例外 例外リストが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
例外とメッセージ 例外リストとメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
例外と LocalEnvironment 例外リストと LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。
すべて メッセージ、例外リスト、および LocalEnvironment が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。

計算モード」プロパティーの値により、Compute ノードからどの新規メッセージ・ツリーを伝搬するかが指定されます。 そのため選択したメッセージ・ツリーにおいて、入力メッセージは、同等の新規出力メッセージ・ツリーに明示的にコピーされるのでない限り、廃棄されます。

「すべて」を選択すると、Compute ノードは、OutputRoot、OutputLocalEnvironment、および OutputExceptionList にデータを取り込むことにより、Root、LocalEnvironment、および ExceptionList のための新規メッセージ・ツリーを 3 つすべて生成する準備をします。 入力メッセージ・ツリーは、入力から出力に明示的にコピーされるのでない限り、出力には渡されません。

そのため、「計算モード」プロパティーを「すべて」に設定した場合、出力ターミナルへの入力ツリーの伝搬を可能にするために、以下の ESQL をコーディングする必要があります。
  SET OutputRoot = InputRoot;
  SET OutputLocalEnvironment = InputLocalEnvironment;
  SET OutputExceptionList = InputExceptionList;
ESQL が CopyEntireMessage() であった場合、LocalEnvironment および ExceptionList は出力ターミナル全体にコピーされず、そこに伝搬されません。これらは、メッセージ・フローのそのノードにおいて失われます。

新規または変更された出力メッセージを作成し、同じ LocalEnvironment および ExceptionList を伝搬するには、「計算モード」プロパティーを「メッセージ」に設定し、Compute ノードまたはMapping ノードに渡される LocalEnvironment および ExceptionList が Compute ノードから渡されるようにします。

計算モード」は、このノードからの伝搬のみに適用されます。 3 つの出力ツリーすべてを Compute または Mapping ノードに作成し、そのノード内でこれらを取り扱ったり共存させることができます。 ただし、「計算モード」では、ノードからの伝搬時にそのような出力ツリーが使用されるかどうかが判別されます。

ノードから伝搬する時、Compute ノードまたは Mapping ノードから、以下の設定において以下のツリーが伝搬されます。
計算モード 伝搬されるツリー
すべて OutputRoot、OutputLocalEnvironment、OutputExceptionList
メッセージ OutputRoot、InputLocalEnvironment、InputExceptionList
LocalEnvironment InputRoot、OutputLocalEnvironment、InputExceptionList
LocalEnvironment とメッセージ OutputRoot、OutputLocalEnvironment、InputExceptionList
例外 InputRoot、InputLocalEnvironment、OutputExceptionList
例外とメッセージ OutputRoot、InputLocalEnvironment、OutputExceptionList
例外と LocalEnvironment InputRoot、OutputLocalEnvironment、OutputExceptionList

出力ツリーが指定された場所で、ESQL は伝搬の前にこのメッセージ・ツリーを作成します。 ESQL がツリーを作成しない場合、その相関名にツリーは伝搬されず、その代わりに入力ツリーは使用されません (「計算モード」プロパティーがこのオプションを示さなかったため)。 そのため、「計算モード」プロパティーの設定値と ESQL によっては、ノードに入力されたツリーを出力ツリーに転送しなかったためにその入力されたツリーを削除したり、変更されたツリーを意図したように伝搬させることができます。

その逆も成り立ちます。 ESQL が入力ツリーに照会を行ってこれらのツリーを伝搬する必要がない場合、「計算モード」プロパティーの値は、メッセージ・ツリーの伝搬を意図していない時にメッセージ・ツリーが伝搬するということを意味する場合があります。 例えば、LocalEnvironment および ExceptionList を Compute ノードから伝搬したくない場合でも、「メッセージ」を選択したためにツリーの入力バージョンが伝搬される場合があります。 ESQL が明示的に OutputLocalEnvironment および OutputExceptionList を削除する場合でも、「 計算モード」プロパティーの設定により入力ツリーが伝搬されるため、これらの変更はそのノードに対するローカルなものになります。

メッセージ・ツリーの「環境」コンポーネントは、「計算モード」プロパティーの設定に影響されません。 これに内容がある場合、その内容は出力メッセージの中のこのノードから受け渡されます。

このプロパティーは、必要な出力メッセージ形式を反映するように設定します。 メッセージの特定の部分を含んでいないオプションを選択した (またはデフォルト値を受け入れた) 場合、メッセージのその部分は、構成される出力メッセージに組み込まれません。

Compute ノードは入力メッセージと出力メッセージの両方を持つため、ESQL を使って両方のメッセージのフィールドを参照することができます。 また、入力および出力メッセージの本体だけでなく、InputLocalEnvironment、OutputLocalEnvironment、InputExceptionList および OutputExceptionList で作業することもできます。

メッセージの妥当性検査

妥当性検査プロパティーを設定して、Compute ノードによって生成されたメッセージの妥当性検査を行う方法を定義します。 これらのプロパティーによって、入力メッセージの妥当性検査は行われません。 そのような妥当性検査が必要な場合には、入力ノードまたは先行する validation ノードによって妥当性検査がすでに行われていることが期待されます。

詳細については、メッセージの妥当性検査および妥当性検査プロパティーを参照してください。

ターミナルおよびプロパティー

Compute ノードのターミナルについては、次の表に説明されています。

ターミナル 説明
In ノードが処理するメッセージを受け入れる入力ターミナル。
Failure 処理されない例外が計算時に発生した場合、入力メッセージがルーティングされる出力ターミナル。
Out ノードでの処理が終了した時に、変換されたメッセージがルーティングされる出力ターミナル。 変換されたメッセージは、PROPAGATE ステートメントによってこのターミナルにルーティングされる場合もあります。
Out1 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 1 の代替出力ターミナル。
Out2 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 2 の代替出力ターミナル。
Out3 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 3 の代替出力ターミナル。
Out4 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 4 の代替出力ターミナル。

PROPAGATE ステートメントの構文については、PROPAGATE ステートメントを参照してください。

以下の表は、ノード・プロパティーについて説明しています。 M の見出しの列は、プロパティーが必須 かどうかを示します (デフォルトが定義されていない場合に値を入力することが必要なら、アスタリスクのマークが付きます)。 C の見出しの列は、プロパティーが構成可能 かどうかを示します (メッセージ・フローを BAR ファイルに追加してデプロイするとき、値を変更できます)。

Compute ノードの「説明」プロパティーについては、次の表に説明されています。

プロパティー M C デフォルト 説明
ノード名 いいえ いいえ ノード・タイプ ノードの名前。
簡略説明 いいえ いいえ   ノードの簡単な説明
詳細説明 いいえ いいえ   メッセージ・フロー内のノードの目的を説明するテキスト

Compute ノードの「基本」プロパティーについては、次の表に説明されています。

プロパティー M C デフォルト 説明
データ・ソース いいえ はい   このメッセージ・フローに関連付けられた ESQL ファイル (「ESQL モジュール」プロパティーにより識別される) で参照する表が存在するデータベースの ODBC データ・ソース名。ノードに対して指定できるデータ・ソースは 1 つだけです。
トランザクション はい いいえ 自動 ノードのトランザクション・モードです。有効なオプションは、「自動」および「コミット」です。 このプロパティーは、データベース表を入力として選択した場合にのみ有効です。
ESQL モジュール はい いいえ Compute データベースおよび入力・出力メッセージに対して実行されるステートメントを含む、ESQL リソース (ファイル) 内のモジュールの名前。
計算モード はい いいえ メッセージ 以下から選択できます。
  • メッセージ
  • LocalEnvironment
  • LocalEnvironment とメッセージ
  • 例外
  • 例外とメッセージ
  • 例外と LocalEnvironment
  • すべて
モード・オプションの設定の詳細については、モードの設定を参照してください。
警告をエラーとして扱う はい いいえ 選択されていない このチェック・ボックスを選択すると、データベースの SQL 警告はエラーとして処理されます。
データベース・エラーで例外をスローする はい いいえ 選択されている このチェック・ボックスを選択すると、データベース・エラーによりブローカーは例外をスローします。

Compute ノードの「パーサー・オプション」のプロパティーについては、次の表に説明されています。

プロパティー M C デフォルト 説明
構文解析のタイミング はい いいえ 要求時 このプロパティーは、入力メッセージを構文解析する時を制御します。 有効な値は、「要求時」「即時」、および「完全」です。

このプロパティーに関する詳しい説明については、要求時の構文解析を参照してください。

XMLNSC コンパクト・パーサーを XMLNS ドメインに使用 いいえ いいえ 選択されていない 変更の始まりこのプロパティーを設定すると、出力 MQRFH2 が XMLNSC パーサーではなく XMLNS パーサーを指定して、外部アプリケーションが変更されないようにします。出力メッセージに MQRFH2 ヘッダーが含まれていない場合は、このプロパティーは影響しません。変更の終わり
混合内容の保存 いいえ いいえ 選択されていない このプロパティーは、XMLNSC パーサーが入力メッセージ内に混合テキストを検出したとき、メッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、混合テキスト用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、混合テキストは無視されて、エレメントは作成されません。
コメントの保存 いいえ いいえ 選択されていない このプロパティーは、XMLNSC パーサーが入力メッセージ内にコメントを検出したとき、メッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、コメント用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、コメントは無視されて、エレメントは作成されません。
処理命令の保存 いいえ いいえ 選択されていない このプロパティーは、XMLNSC パーサーが入力メッセージ内に処理命令を検出したとき、これらのメッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、処理命令用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、処理命令は無視されて、エレメントは作成されません。

Compute ノードの「妥当性検査」プロパティーについては、次の表に説明されています。

これらのプロパティーの詳細については、妥当性検査プロパティーを参照してください。
プロパティー M C デフォルト 説明
妥当性検査 いいえ はい なし このプロパティーは、妥当性検査を行うかどうかを制御します。 有効な値は、「なし」「内容と値」「内容」、および「継承」です。
失敗時の処置 いいえ いいえ 例外 このプロパティーは、妥当性検査で障害が発生した場合の動作を制御します。 「妥当性検査」が「内容」または「内容と値」に設定されている場合にのみ、このプロパティーを設定できます。 有効な値は、「ユーザー・トレース」「ローカル・エラー・ログ」「例外」、および「例外リスト」です。
すべての値制約を含める いいえ いいえ 選択されている このプロパティーは編集できません。 チェック・ボックスが選択されていることにより示されるデフォルトのアクションは、すべての値制約が妥当性検査に含まれるということです。
修正 いいえ いいえ なし このプロパティーは編集できません。 最小限の修正が行われます。 有効な値は、「なし」、および「フル」です。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

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

ac04660_