Resequence ノードと Sequence ノードの「シーケンス定義の終了」プロパティーで、メッセージ・シーケンスの終了点を指定します。
Resequence ノードの使用
Resequence ノードを使用して、メッセージ・フローのメッセージを再配列する場合は、Resequence ノードの「シーケンス定義の終了」プロパティーを使用して、再配列後のメッセージ・シーケンスの終了点を定義します。 Resequence ノードでは、以下のいずれかの方法で、終了シーケンス番号を指定できます。
- リテラル番号として指定する
- 「リテラル」を選択し、シーケンスの終了値としてリテラル・シーケンス番号を指定します。 -9223372036854775807 から 9223372036854775807 の範囲で正または負の数値を指定できます。 指定したシーケンス番号のメッセージが着信すると、シーケンス・グループが閉じます。 シーケンスに欠落メッセージがあると、シーケンス・グループは、「欠落しているメッセージ・タイムアウト」プロパティーで指定されている期間、開いたままの状態になります。
例えば、以下のようなプロパティーを指定した
Resequence ノードがあるとします。
- 「シーケンス番号へのパス」プロパティーに値 /doc/seq を指定します。
- 「シーケンス・グループ ID へのパス」プロパティーに値 /doc/grp を指定します。
- 「シーケンス定義の開始」プロパティーを「リテラル」に設定し、値 0 を指定します。
- 「シーケンス定義の終了」プロパティーを「リテラル」に設定し、値 6 を指定します。その値を指定すると、シーケンス番号 6 のメッセージの受信時に、シーケンス内の前のメッセージがすべて着信していればグループが閉じます (そうでなければ、欠落メッセージのタイムアウトの有効期限が切れた時点で閉じます)。
Resequence ノードが以下のようなメッセージを受け取ります。
<doc><grp>a<grp><seq>6</seq></doc>
<doc><grp>a<grp><seq>5</seq></doc>
<doc><grp>a<grp><seq>4</seq></doc>
<doc><grp>a<grp><seq>3</seq></doc>
<doc><grp>a<grp><seq>2</seq></doc>
<doc><grp>a<grp><seq>1</seq></doc>
<doc><grp>a<grp><seq>0</seq></doc>
以下のようなメッセージが Out ターミナルに伝搬します。
<doc><grp>a<grp><seq>0</seq></doc>
<doc><grp>a<grp><seq>1</seq></doc>
<doc><grp>a<grp><seq>2</seq></doc>
<doc><grp>a<grp><seq>3</seq></doc>
<doc><grp>a<grp><seq>4</seq></doc>
<doc><grp>a<grp><seq>5</seq></doc>
<doc><grp>a<grp><seq>6</seq></doc>
シーケンス・グループが閉じた後にノードに着信するそのシーケンス・グループのメッセージは、そのグループの新しいインスタンスの一部として処理されます。
- 自動タイムアウトを指定する
- 「自動」を選択し、時間の長さを (秒単位で) 指定します。ノードはその期間、新しいメッセージが空のキューに到達するのを待ちます。 伝搬を待っているメッセージのキューが空になるたびに、Resequence ノードはタイマーを開始します。そのタイマーの有効期限は、指定の秒数が過ぎた時点で切れます。 指定の時間内に新しいメッセージが着信しなければ、シーケンス・グループが閉じ、その後に着信する新しいメッセージは、新しいグループの一部として処理されます。 指定の制限時間内に新しいメッセージがノードに到達すると、タイマーがリセットされます。
- Resequence ノードで設定する述部を使用する
- 「述部」を選択して、メッセージがシーケンスの末尾かどうかを計算するための XPath 式を指定します。 述部の評価結果は、True または False になります。式の評価結果が False の間は、メッセージの収集が続けられます。 メッセージの式の評価結果が True になると、そのメッセージがシーケンスの末尾になり、シーケンス・グループが閉じます。 ただし、前のメッセージがシーケンス・グループで欠落していると、シーケンス・グループは、「欠落しているメッセージ・タイムアウト」プロパティーで指定されている期間、開いたままの状態になります。
シーケンス・グループが閉じた後にノードに着信するそのシーケンス・グループのメッセージは、そのグループの新しいインスタンスの一部として処理されます。
通常、XPath 式はブール値として評価されますが、他のデータ型が返される場合は、以下のようにして述部が決定されます。
表 1. 戻りデータ型 |
True |
False |
ブール |
True |
False |
数値 |
ゼロ以外の任意の値 |
0 または 0.0 |
ストリング |
true と一致する任意の文字列 (大/小文字を区別しない) |
true と一致しない任意の文字列 (大/小文字を区別しない) |
NodeSet |
しない |
常時 |
メッセージの式の評価結果が True になると (つまり、そのメッセージがシーケンスの末尾であることが判別されると)、ノードは、そのメッセージのシーケンス番号が、その時点までに収集されたメッセージの最大のシーケンス番号であることを確認します。 それよりも大きいシーケンス番号が見つかると、例外がスローされます。
Sequence ノードの使用
Sequence ノードを使用して、メッセージにシーケンス番号を追加する場合は、「シーケンス定義の終了」プロパティーを使用して、メッセージ・シーケンスの終了点を定義します。 Sequence ノードは、ノードに到達する各入力メッセージに対して単純に増分するシーケンス番号を割り振ります。その終了点は、「シーケンス定義の終了」プロパティーで定義したシーケンス番号になります。
Sequence ノードでは、以下のいずれかの方法で、終了シーケンス番号を指定できます。
- リテラル番号として指定する
- 「リテラル」を選択し、シーケンス番号の終了値として正または負の数値 (例えば 15) を指定します。 値は、-9223372036854775807 から 9223372036854775807 の範囲になります。 単純に増分するシーケンス番号は、そのプロパティーで指定したシーケンス番号の終了値に到達した時点で終了します。
- Sequence ノードで設定する述部を使用する
- 「述部」を選択して、XPath 式の評価結果が True になった時点でシーケンスが終了する、ということを指定します。 詳細については、前の表を参照してください。
- 自動タイムアウトを指定する
- 「自動」を選択し、時間の長さを (秒単位で) 指定します。ノードはその期間、シーケンス・グループのメッセージの伝搬後にも新しいメッセージが着信するのを待ちます。
新しいメッセージが着信すれば、タイマーはキャンセルされ、メッセージの伝搬の時点でリセットされます。 指定の時間内に新しいメッセージが着信しなければ、シーケンス・グループが閉じ、その後に着信する新しいメッセージは、新しいグループの一部として処理されます。