Compute ノードは、1 つ以上の新規出力メッセージを構成するために使用します。
このトピックには、以下のセクションが含まれています。
Compute ノードで作成する出力メッセージは、入力メッセージに提供された情報を変更することによって作成するか、データベースまたはその他のソースから入手できる新規情報のみを使って作成することができます。 入力メッセージのエレメント (例えばヘッダー、ヘッダー・フィールド、および本体データ)、関連する環境、および例外リストを使用して、新規の出力メッセージを作成できます。
メッセージ・フロー ESQL リソース・ファイル内に ESQL をコーディングすることにより、新規メッセージの作成方法を指定します。 詳しくは、ESQL の指定を参照してください。
以下の目的で、Compute ノードを使用します。
Compute ノードはパレットの「変換」ドロワーに含まれていて、WebSphere® Message Broker Toolkit 内では次のアイコンによって表されます。
サンプルに関する情報は、WebSphere Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。
監査目的のため、受け取るオーダーのそれぞれに固有な ID を付けたいメッセージ・フローを考えてください。 Compute ノードは入力メッセージを変更しないで、変更された新しいメッセージのコピーを出力メッセージとして作成します。 Compute ノードを使ってオーダーに対する固有の ID を出力メッセージに挿入し、メッセージ・フロー内の後続ノードがそのメッセージを使用することができます。
Compute ノードのインスタンスをメッセージ・フローに入れると、それを構成することができます。メッセージ・フロー・ノードの構成を参照してください。 ノードのプロパティーが、「プロパティー」ビューに表示されます。
値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、アスタリスクが表示されます。
以下のように、Compute ノードを構成します。
このノードからデータベースへのアクセスを構成するには、次のようにします。
z/OS® システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。
ここで選択した値が、ユーザーが追加した 1 つ以上のデータベース表にインプリメントされます。表毎に違う値を選択することはできません。
このチェック・ボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードに対する処理と同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。
このチェック・ボックスを選択しなかった場合、ノードは警告を標準の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で標準的な戻りコードとして扱って差し支えありません。
このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを調べるために ESQL を含める必要があります (これには SQLCODE および SQLSTATE を使うことができます)。 エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。 例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、メッセージ・フローの中で Throw ノードを使用して後で独自の例外を生成することができます。
Compute ノードの動作をカスタマイズするには、ESQL ステートメントをコーディングします。 例えば、入力メッセージ、データベースの内容 (変更なし、または変更あり)、または新しいデータを使って 1 つ以上の新規出力メッセージを作成するようにこのノードをカスタマイズできます。 データベースからの値を追加することにより入力メッセージ内の値を変更し、その結果を出力メッセージ内のフィールドに保管することもできます。 デフォルトでは、ESQL ファイルは個別のリソースとしてデプロイされ、それらのファイルを参照するメッセージ・フローを再デプロイしないでも、編集および再デプロイが可能です。 詳しくは、ESQL ファイルのデプロイを参照してください。
必要な 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;
自分で ESQL モジュールを作成する場合、このスケルトンをそのまま正確に作成する必要があります。 ただし、プロシージャー呼び出しと定義は別です (このセクションで後述)。 デフォルトの名前を変更することができますが、指定する名前は、対応するノード・プロパティー「ESQL モジュール」の名前と一致することを確認してください。 モジュール名に 1 つ以上のスペースを含めるには、「ESQL モジュール」プロパティーで、名前を二重引用符で囲まなければなりません。
このノードをカスタマイズするための ESQL を、BEGIN ステートメントと CREATE FUNCTION から RETURN TRUE の間に追加します。 スケルトンに組み込まれている、プロシージャー CopyEntireMessage と CopyMessageHeaders への 2 つの呼び出しを使用することができます。
これらのプロシージャーは、関数 Main の次に定義されており、メッセージを操作するときに必要となるかもしれない一般的な機能を備えています。 スケルトンの中で、呼び出しはコメント化されています。 プロシージャーを使用するには、コメント・マーカーを除去します。 プロシージャーを使用しない場合は、呼び出しとプロシージャー定義を両方ともモジュールから除去します。
「計算モード」プロパティーは、どのコンポーネントがデフォルトで出力メッセージ内で使用されるかを制御します。 プロパティーを選択し、「メッセージ」、 「LocalEnvironment」(以前は DestinationList と呼ばれていました)、および「例外」コンポーネント (これらはノード内で生成されるかまたは着信メッセージに含まれているかのどちらか) が使用されるかどうかを指定します。
このデフォルト値は、ノードにおける処理完了時に変換済みメッセージが Out ターミナルにルーティングされるときに使用されます。 また、PROPAGATE ステートメントがその出力メッセージの構成を指定していない場合にもこのデフォルト値が常に使用されます。
選択に含めなかったコンポーネントは、未変更で渡されます。 これらのコンポーネントを変更しても、更新はこのノードに対してローカルになります。
逆に、選択に含めたコンポーネントは渡されず、このノードで行われた更新が持続します。
モード | 説明 |
---|---|
メッセージ (デフォルト) | メッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 変更された OutputRoot ツリー、元の InputLocalEnvironment ツリー、および元の InputExceptionList ツリーが含まれます。 |
LocalEnvironment | LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 元の InputRoot ツリー、変更された OutputLocalEnvironment ツリー、および元の InputExceptionList ツリーが含まれます。 |
LocalEnvironment とメッセージ | LocalEnvironment ツリー構造とメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 変更された OutputRoot ツリー、変更された OutputLocalEnvironment ツリー、および元の InputExceptionList ツリーが含まれます。 |
例外 | 例外リストが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 元の InputRoot ツリー、元の InputLocalEnvironment ツリー、および変更された OutputExceptionList ツリーが含まれます。 |
例外とメッセージ | 例外リストとメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 変更された OutputRoot ツリー、元の InputLocalEnvironment ツリー、および変更された OutputExceptionList ツリーが含まれます。 |
例外と LocalEnvironment | 例外リストと LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 元の InputRoot ツリー、変更された OutputLocalEnvironment ツリー、および変更された OutputExceptionList ツリーが含まれます。 |
すべて | メッセージ、例外リスト、および LocalEnvironment が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 メッセージには、 変更された OutputRoot ツリー、変更された OutputLocalEnvironment ツリー、および変更された OutputExceptionList ツリーが含まれます。 |
「計算モード」プロパティーの値により、Compute ノードからどの新規メッセージ・ツリーを伝搬するかが指定されます。 そのため選択したメッセージ・ツリーにおいて、入力メッセージは、同等の新規出力メッセージ・ツリーに明示的にコピーされるのでない限り、廃棄されます。
「すべて」を選択すると、Compute ノードは、OutputRoot、OutputLocalEnvironment、および OutputExceptionList にデータを取り込むことにより、Root、LocalEnvironment、および ExceptionList のための新規メッセージ・ツリーを 3 つすべて生成する準備をします。 入力メッセージ・ツリーは、入力から出力に明示的にコピーされるのでない限り、出力には渡されません。
SET OutputRoot = InputRoot;
SET OutputLocalEnvironment = InputLocalEnvironment;
SET OutputExceptionList = InputExceptionList;
ESQL が CopyEntireMessage() であった場合、LocalEnvironment および ExceptionList は出力ターミナル全体にコピーされず、そこに伝搬されません。これらは、メッセージ・フローのそのノードにおいて失われます。新規または変更された出力メッセージを作成し、同じ LocalEnvironment および ExceptionList を伝搬するには、「計算モード」プロパティーを「メッセージ」に設定し、Compute ノードまたはMapping ノードに渡される LocalEnvironment および ExceptionList が Compute ノードから渡されるようにします。
「計算モード」は、このノードからの伝搬のみに適用されます。 3 つの出力ツリーすべてを Compute または Mapping ノードに作成し、そのノード内でこれらを取り扱ったり共存させることができます。 ただし、「計算モード」では、ノードからの伝搬時にそのような出力ツリーが使用されるかどうかが判別されます。
計算モード | 伝搬されるツリー |
---|---|
すべて | OutputRoot、OutputLocalEnvironment、OutputExceptionList |
Message | 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 | デフォルト | 説明 | mqsiapplybaroverride コマンド・プロパティー |
---|---|---|---|---|---|
データ・ソース | いいえ | はい | このメッセージ・フローに関連付けられた ESQL ファイル (「ESQL モジュール」プロパティーにより識別される) で参照する表を含むデータベースの ODBC データ・ソース名。 ノードに対して指定できるデータ・ソースは 1 つだけです。 このノードに関連する ESQL に PASSTHRU ステートメントまたは SELECT 関数およびデータベース参照が含まれている場合には、「データ・ソース」プロパティーの値を指定する必要があります。 |
dataSource | |
トランザクション | はい | いいえ | 自動 | ノードのトランザクション・モードです。 有効なオプションは、「自動」および「コミット」です。 このプロパティーは、データベース表を入力として選択した場合にのみ有効です。 | |
ESQL モジュール | いいえ | いいえ | Compute | データベースおよび入力および出力メッセージに対して実行されるステートメントを含む、ESQL リソース (ファイル) 内のモジュールの名前。 | |
計算モード | はい | いいえ | メッセージ | 以下から選択できます。
|
|
警告をエラーとして扱う | はい | いいえ | 選択されていない | このチェック・ボックスを選択すると、データベースの SQL 警告はエラーとして処理されます。 | |
データベース・エラーで例外をスローする | はい | いいえ | 選択されている | このチェック・ボックスを選択すると、データベース・エラーによりブローカーは例外をスローします。 | |
フロー開始前に接続 |
いいえ |
はい |
選択されていない |
デフォルトでは、メッセージ・フロー内で必要とされるときに、ブローカーがデータ・ソースに接続します。 このチェック・ボックスを選択すると、メッセージ・フローの処理中ではなく、フローがメッセージを受け取るよりも前にデータ・ソース接続が行われます。 |
プロパティー | M | C | デフォルト | 説明 | mqsiapplybaroverride コマンド・プロパティー |
---|---|---|---|---|---|
妥当性検査 | いいえ | はい | なし | このプロパティーは、妥当性検査を行うかどうかを制御します。 有効な値は、「なし」、「内容と値」、「内容」、および「継承」です。 | validateMaster |
失敗時の処置 | いいえ | いいえ | 例外 | このプロパティーは、妥当性検査で障害が発生した場合の動作を制御します。 「妥当性検査」が「内容」または「内容と値」に設定されている場合にのみ、このプロパティーを設定できます。 有効な値は、「ユーザー・トレース」、「ローカル・エラー・ログ」、「例外」、および「例外リスト」です。 |
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
イベント | いいえ | いいえ | なし | ノードに対して定義したイベントが、このタブに表示されます。 デフォルトでは、メッセージ・フローのどのノードに対してもモニター・イベントは定義されません。 ノードのモニター・イベントを作成、変更、または削除するには、「追加」、「編集」、および「削除」を使用します。詳しくは、モニター・プロパティーを使用したモニター・イベント・ソースの構成を参照してください。 「使用可能」チェック・ボックスを選択またはクリアすることによって、ここに表示されているイベントを使用可能および使用不可に設定できます。 |