Eine Sequenzregel wird durch das Sequenzmuster definiert. Es ermittelt, ob eine gewisse Sequenz von Ereignissen in einem Zeitintervall ankommt. Die Reihenfolge kann sortiert oder zufällig sein. Eine Sequenzregel ist eine statusabhängige Regel.
Übersicht
Das Sequenzmuster überprüft eine Sequenz von Ereignissen über einen Zeitraum und ermittelt, ob die Sequenz vollständig oder unvollständig ist. Eine unvollständige Sequenz schließt mindestens ein Ereignis in der angegebenen Sequenz ein, aber nicht alle.
Der Zeitraum wird durch ein verbindliches Zeitfenster angegeben, das im Element <timeWindow> der Regelsprache definiert ist. Jedes Ereignis der Sequenz wird durch ein eigenes Element <eventSelector> in der Regel definiert. Die Sequenz von Ereignissen kann wie folgt ermittelt werden:
- In der Reihenfolge, in der die Elemente <eventSelector> für die Regel codiert sind. Wenn die Regel das Ereignis erkennt, das durch das erste Element <eventSelector> definiert ist, wird die Erkennung der Sequenz gestartet.
Die Regel erwartet nun das Ereignis, das durch das zweite Element <eventSelector> definiert ist.
- In Zufallsreihenfolge. Wenn die Regel beliebige Ereignisse erkennt, die durch die Elemente <eventSelector> definiert sind, wird die Erkennung der Sequenz gestartet. Die Regel erwartet nun ein weiteres Ereignis, das durch die Elemente <eventSelector> definiert ist.
Das Sequenzmuster unterscheidet sich vor allem wie folgt von den anderen Regelmustern:
- Es verfügt über mehrere Elemente <eventSelector> zum Definieren, welche Ereignisse von der Regel akzeptiert werden. Es sind mindestens zwei Elemente <eventSelector> erforderlich.
- Wenn ein Ereignis die Kriterien erfüllt, die durch eines der Elemente <eventSelector> definiert wurden, wird dieses Element <eventSelector> in dieser Regelinstanz von der weiteren Ereignisverarbeitung ausgeschlossen.
- Das Aliasnamensattribut im Element <eventSelector> ist nur in einer Sequenzregel gültig. Es gibt einem Ereignis, das durch einen bestimmten Ereignisselektor in der Sequenzregel ausgewählt wird, einen eindeutigen Namen. In einem Ausdruck in einem Filterprädikat oder in einer Filteraktion können Sie die Variable 'act_eventList' verwenden, um mit einem Aliasnamen auf ein Ereignis in einer Sequenzregel zuzugreifen.
Verwendungsbeispiel dieses Regelmusters
Szenario zur Erkennung einer vollständigen Sequenz:
Nehmen Sie an, dass ein Administrator in einer IT-Umgebung wissen möchte, ob sich der Wert der Größe des DB2-Heapspeichers auf WebSphere Application Server auswirkt, und falls zutreffend, dass er dieses Problem beheben möchte. Wenn die folgenden Ereignisse in der aufgeführten Reihenfolge in einem bestimmten Zeitraum auftreten, wird der Administrator also den Wert der Größe des DB2-Heapspeichers erhöhen und den Datenbankmanager erneut starten:
- Eine Ausnahmebedingung bei der WebSphere Application Server-Ressourcenzuordnung. Nehmen Sie an, dass es sich um ein Ereignis des Typs WASResourceAllocationException handelt.
- Eine DB2-Fehlernachricht "Nicht genügend Speicher im Zwischenspeicher für Anwendungen (Application Heap) für die Verarbeitung der Anweisung". Nehmen Sie an, dass es sich um ein Ereignis des Typs DB2NotEnoughHeap handelt.
In diesem Szenario sind zwei Elemente <eventSelector> in einer Sequenzregel definiert, und die Ereignisse müssen (anstatt in zufälliger Reihenfolge) in der Reihenfolge empfangen werden, in der die Elemente <eventSelector> codiert sind. Das erste Element <eventSelector> überprüft das Vorhandensein von Ereignis
WASResourceAllocationException, und das zweite Element <eventSelector> überprüft das Vorhandensein von Ereignis
DB2NotEnoughHeap. Setzen Sie voraus, dass die folgenden Ereignisse im angegebenen Zeitfenster an das System übergeben werden:
- WASResourceAllocationException
- DB2BackupStarted
- WASResourceAllocationException
- WASResourceAllocationException
- DB2NotEnoughHeap
Die Regel verhält sich wie folgt:
- Das erste Ereignis, WASResourceAllocationException, wird akzeptiert. Weil die Bedingungen für das erste Element <eventSelector> erfüllt wurden, wird das erste Element <eventSelector> nun von der weiteren Ereignisverarbeitung in dieser Regel ausgeschlossen.
- Das zweite Ereignis, DB2BackupStarted, wird ignoriert.
- Das dritte Ereignis, WASResourceAllocationException, wird ignoriert.
- Das vierte Ereignis, WASResourceAllocationException, wird ignoriert.
- Das fünfte Ereignis, DB2NotEnoughHeap, wird akzeptiert, und es beendet die Sequenz. Die Regelantwortaktion <onDetection> wird ausgeführt. Diese Aktion ist definiert, um den Wert der Größe des DB2-Heapspeichers zu erhöhen und den Datenbankmanager erneut zu starten. Die Regel kehrt in ihren Anfangsstatus zurück.
Das erste Element <eventSelector> wird nun in die weitere Ereignisverarbeitung durch diese Regel eingeschlossen.
Szenario zur Erkennung einer unvollständigen Sequenz:
Nehmen Sie an, dass ein Unternehmen alle Kundenaufträge innerhalb einer Stunde nach Auftragserteilung zur Lieferung bereitgestellt haben will und erfahren möchte, wenn dies nicht eintritt.
In diesem Szenario sind zwei Elemente <eventSelector> in einer Sequenzregel definiert, und die Ereignisse müssen (anstatt in zufälliger Reihenfolge) in der Reihenfolge empfangen werden, in der die Elemente <eventSelector> codiert sind. Das erste Element <eventSelector> überprüft das Vorhandensein von Ereignis
Netsales mit
operationType=Order, und das zweite Element <eventSelector> überprüft das Vorhandensein von Ereignis
Netsales mit
operationType=Delivery.
Setzen Sie voraus, dass die folgenden Ereignisse im angegebenen Zeitfenster von einer Stunde an das System übergeben werden:
- Ein Ereignis Netsales mit operationType=Order
- Ein Ereignis Netsales mit operationType=Order
Die Regel verhält sich wie folgt:
- Das erste Ereignis wird akzeptiert. Weil die Bedingungen für das erste Element <eventSelector> erfüllt wurden, wird das erste Element <eventSelector> nun von der weiteren Ereignisverarbeitung in dieser Regel ausgeschlossen.
- Das zweite Ereignis wird ignoriert.
- Da innerhalb des angegebenen Zeitfensters kein Ereignis Netsales mit operationType=Delivery empfangen wurde, wird die Regelantwortaktion <onTimeOut> ausgeführt. Diese Aktion ist definiert, um einen Geschäftsführer darüber zu informieren, dass ein Kundenauftrag nicht innerhalb einer Stunde nach Auftragserteilung zur Lieferung bereit steht. Die Regel kehrt in ihren Anfangsstatus zurück.
Das erste Element <eventSelector> wird nun in die weitere Ereignisverarbeitung durch diese Regel eingeschlossen.