シーケンス・ルールは、シーケンス・パターンによって定義されます。これは、
特定の時間間隔内にイベントの特定のシーケンスが到着するかどうかを検出します。シーケンスは、順序付けられていても、ランダムであってもかまいません。
シーケンス・ルールはステートフル・ルールです。
概説
シーケンス・パターンは、一定の期間のイベントのシーケンスを
チェックし、シーケンスが完全であるか、または不完全であるかを
検出します。不完全なシーケンスには、1 つ以上のイベントが指定されたシーケンスで
含まれますが、すべてのイベントは含まれません。
期間は、
ルール言語の <timeWindow> エレメントによって定義された、必須の時間枠で
指定されます。シーケンス内の各イベントは、ルール内の別個の <eventSelector> エレメントによって
定義されます。イベントのシーケンスは、以下のいずれかの順序で
検出できます。
- ルールの <eventSelector> エレメントがコーディングされている
順序。この場合、ルールが最初の <eventSelector> エレメントによって
定義されているイベントを検出すると、シーケンスの検出が開始されます。
その後ルールは、2 番目の <eventSelector> エレメントによって定義されるイベントを
待機します。
- ランダムな順序。この場合、ルールが <eventSelector> エレメントによって
定義されているイベントのうちの任意の 1 つを検出すると、シーケンスの検出が
開始されます。続いてルールは、<eventSelector> エレメントによって
定義されている別のイベントの 1 つを待機します。
シーケンス・パターンは、主に以下の点でその他のルール・パターンと
異なっています。
- ルールによって受け入れられるイベントを定義するための <eventSelector> エレメントが
複数個含まれます。少なくとも 2 つの <eventSelector> エレメントが
必要です。
- イベントが <eventSelector> エレメントの 1 つによって定義されている基準を満たすと、
その <eventSelector> エレメントは、そのルール・インスタンス内の以降のイベント処理から
除外されます。
- <eventSelector> エレメントの alias 属性は、シーケンス・ルール内でのみ有効であり、シーケンス・ルール内の特定のイベント・セレクターで選択されたイベントに固有の名前を付けます。フィルター述部またはアクション内の式において、act_eventList 変数を使用して、シーケンス・ルール内のイベントに別名を使用してアクセスできます。
このルール・パターンの使用例
完全なシーケンスの検出を説明するシナリオ:
ある IT 環境において、管理者が、DB2
® のヒープ・サイズの値が WebSphere
® Application
Server に影響を与えているかどうかを把握し、影響を与えている場合はこの問題を修正したいと考えているとします。このため、指定された期間内に以下のイベントが以下の順序で発生した場合、管理者は DB2 ヒープ・サイズの値を増やし、データベース・マネージャーを再始動したいと考えます。
- WebSphere Application
Server のリソース割り振り例外。このイベントが WASResourceAllocationException タイプであると想定します。
- DB2 エラー・メッセージ:「Not enough heap to process statement」このイベントが DB2NotEnoughHeap タイプであると想定します。
このシナリオの場合、2 つの <eventSelector> エレメントがシーケンス・ルールで定義されており、イベントが (ランダムな順序ではなく) <eventSelector> エレメントがコーディングされている順序で
到着する必要があります。最初の <eventSelector>
エレメントはイベント
WASResourceAllocationException をチェックし、
2 番目の <eventSelector> エレメントはイベント
DB2NotEnoughHeap をチェックしています。
指定された時間枠内に、
システムに対して以下のイベントが提示されると想定します。
- WASResourceAllocationException
- DB2BackupStarted
- WASResourceAllocationException
- WASResourceAllocationException
- DB2NotEnoughHeap
ルールの振る舞いは以下のようになります。
- 最初のイベント WASResourceAllocationException は受け入れられます。
最初の <eventSelector> エレメントの
基準が満たされたため、最初の <eventSelector> エレメントは、このルール内の
以降のイベント処理から除外されます。
- 2 番目のイベント DB2BackupStarted は無視されます。
- 3 番目のイベント WASResourceAllocationException は無視されます。
- 4 番目のイベント WASResourceAllocationException は無視されます。
- 5 番目のイベント DB2NotEnoughHeap は受け入れられ、これによりシーケンスが完了します。<onDetection> ルール応答アクションが実行されます。このアクションは DB2 ヒープ・サイズの値を増やし、データベース・マネージャーを再始動するよう定義されています。
ルールは初期状態に戻ります。
これで、最初の <eventSelector> エレメントは、このルールによる
以降のイベント処理に組み込まれます。
不完全なシーケンスの検出を説明するシナリオ:
あるビジネス組織が、すべてのカスタマー・オーダーに対して、そのオーダーを受けてから 1 時間以内に配送の準備を整えたいと考えており、それを実現できない場合にそれを把握したいと考えているとします。
このシナリオの場合、2 つの <eventSelector> エレメントがシーケンス・ルールで定義されており、イベントが (ランダムな順序ではなく) <eventSelector> エレメントがコーディングされている順序で
到着する必要があります。最初の <eventSelector> エレメントは
operationType=Order が指定されたイベント
Netsales をチェックし、
2 番目の <eventSelector> エレメントは
operationType=Delivery が指定されたイベント
Netsales をチェックしています。
指定された時間枠である 1 時間以内に、
システムに対して以下のイベントが発行されると想定します。
- operationType=Order が指定された Netsales イベント
- operationType=Order が指定された Netsales イベント
ルールの振る舞いは以下のようになります。
- 最初のイベントは受け入れられます。最初の <eventSelector> エレメントの
基準が満たされたため、最初の <eventSelector> エレメントは、このルール内の
以降のイベント処理から除外されます。
- 2 番目のイベントは無視されます。
- operationType=Delivery が指定された Netsales イベントが指定された時間枠内に受信されないため、<onTimeOut> ルール応答アクションが実行されます。このアクションは、カスタマー・オーダーの配送準備がオーダーを受けてから 1 時間以内に整っていないことを企業の幹部に通知するよう定義されています。 ルールは初期状態に戻ります。
これで、最初の <eventSelector> エレメントは、このルールによる
以降のイベント処理に組み込まれます。