Modèle de séquence

Une règle de séquence est définie par le modèle de séquence. Elle détecte l'arrivée d'une séquence donnée d'événements au cours d'un intervalle de temps. La séquence peut être ordonnée ou aléatoire. Il s'agit d'une règle avec état.

Présentation

Le modèle de séquence recherche une séquence d'événements sur une période et détermine si la séquence est complète ou non. Une séquence incomplète inclut un ou plusieurs des événements dans l'ordre défini, mais pas tous.

La période est indiquée par une plage temporelle obligatoire, telle que définie par l'élément <timeWindow> dans le langage de règle. Chaque événement de la séquence est défini par un élément <eventSelector> distinct dans la règle. La séquence d'événements peut être détectée dans l'un des ordres suivants :
  • Dans l'ordre dans lequel les éléments <eventSelector> sont codés pour la règle. Dans ce cas, quand la règle détecte l'événement défini par le premier élément <eventSelector>, la détection de la séquence est lancée. La règle attend ensuite l'événement défini par le deuxième élément <eventSelector>.
  • Dans un ordre aléatoire. Dans ce cas, quand la règle détecte l'un des événements définis par les éléments <eventSelector>, la détection de la séquence est lancée. La règle attend ensuite un autre événement défini par les éléments <eventSelector>.
Le modèle de séquence est différent des autres modèles de règle sur plusieurs points ; voici les principaux :
  • Il possède plusieurs éléments <eventSelector> permettant de définir les événements acceptés par la règle. Il requiert un minimum de deux éléments <eventSelector>.
  • Lorsqu'un événement satisfait les critères définis par l'un des éléments <eventSelector>, cet élément <eventSelector> est par la suite exclu du traitement d'événement dans cette instance de règle.
  • L'attribut alias dans l'élément <eventSelector> est valide uniquement dans une règle de séquence ; il nomme de façon unique un événement sélectionné par un sélecteur d'événement donné dans cette règle. Dans une expression au sein d'un prédicat de filtrage ou d'une action, vous pouvez utiliser la variable act_eventList pour accéder à un événement dans une règle de séquence par son nom d'alias.

Conditions d'exécution de la réponse à la règle

Avec le modèle de séquence, la réponse à la règle s'exécute dans les situations suivantes :
  • Lorsque la séquence d'événements dans son ensemble est détectée dans la plage temporelle, tel que défini par l'élément <onDetection>.
  • Lorsqu'un ou plusieurs événements arrivent au cours de la plage temporelle, mais pas la séquence dans son ensemble, tel que défini par l'élément <onTimeOut>.

    Le modèle de séquence peut permettre de déterminer si une séquence donnée est incomplète. Par exemple, si un événement "system down" (arrêt du système) se produit sans être suivi d'un événement "system up" (reprise du système), le programme d'écriture de règle peut coder une action <onTimeOut> prenant en charge ce type d'événement manquant.

Exemple d'utilisation de ce modèle de règle

Scénario illustrant la détection d'une séquence complète :
Supposons que, dans un environnement informatique, un administrateur souhaite savoir si la valeur de la taille de segment de mémoire DB2 affecte WebSphere Application Server et, si c'est le cas, qu'il souhaite corriger ce problème. Ainsi, si les événements suivants se produisent dans l'ordre qui suit au cours d'une période définie, l'administrateur souhaitera augmenter la valeur de la taille de segment de mémoire DB2 et redémarrer le gestionnaire de base de données :
  1. Une exception d'allocation de ressources WebSphere Application Server. Supposons qu'il s'agisse d'un événement de type WASResourceAllocationException.
  2. Le message d'erreurDB2 qui indique : "Segment de mémoire insuffisant pour le traitement de l'instruction". Supposons qu'il s'agisse d'un événement de type DB2NotEnoughHeap.
Pour ce scénario, deux éléments <eventSelector> sont définis dans une règle de séquence et les événements doivent arriver dans l'ordre dans lequel les éléments <eventSelector> sont codés (et non dans un ordre aléatoire). Le premier élément <eventSelector> recherche l'événement WASResourceAllocationException, et le deuxième élément <eventSelector> recherche l'événement DB2NotEnoughHeap. Posons que les événements suivants sont présentés au système au cours de la plage temporelle définie :
  1. WASResourceAllocationException
  2. DB2BackupStarted
  3. WASResourceAllocationException
  4. WASResourceAllocationException
  5. DB2NotEnoughHeap
Le comportement de la règle est le suivant :
  1. Le premier événement, WASResourceAllocationException, est accepté. Les critères du premier élément <eventSelector> ayant été satisfaits, le premier élément <eventSelector> est par la suite exclu du traitement d'événement dans cette règle.
  2. Le deuxième événement, DB2BackupStarted, est ignoré.
  3. Le troisième événement, WASResourceAllocationException, est ignoré.
  4. Le quatrième événement, WASResourceAllocationException, est ignoré.
  5. Le cinquième événement, DB2NotEnoughHeap, est accepté et il termine la séquence. L'action de réponse à la règle <onDetection> s'exécute. Cette action est définie pour augmenter la valeur de la taille de segment de mémoire DB2 et redémarrer le gestionnaire de base de données. La règle revient à son état initial.

    Le premier élément <eventSelector> est à présent inclus dans le futur traitement d'événement par cette règle.

Scénario illustrant la détection d'une séquence incomplète :
Supposons qu'une entreprise souhaite que toutes les commandes client soient prêtes à être livrées dans un délai d'une heure à compter de la réception de la commande et qu'il veuille savoir si c'est le cas ou non.
Pour ce scénario, deux éléments <eventSelector> sont définis dans une règle de séquence et les événements doivent arriver dans l'ordre de codage des éléments <eventSelector> (et non dans un ordre aléatoire). Le premier élément <eventSelector> recherche l'événement Netsales avec operationType=Order, et le deuxième élément <eventSelector> recherche l'événement Netsales avec operationType=Delivery. Posons que les événements suivants sont présentés au système au cours de la plage temporelle définie d'une heure :
  1. Un événement Netsales avec operationType=Order
  2. Un événement Netsales avec operationType=Order
Le comportement de la règle est le suivant :
  1. Le premier événement est accepté. Les critères du premier élément <eventSelector> ayant été satisfaits, le premier élément <eventSelector> est par la suite exclu du traitement d'événement dans cette règle.
  2. Le deuxième événement est ignoré.
  3. Comme un événement Netsales avec operationType=Delivery n'est pas reçu dans la plage temporelle définie, l'action de réponse à la règle <onTimeOut> est exécutée. Cette action est définie pour avertir un responsable de l'entreprise que la commande d'un client n'est pas prête à être livrée dans un délai d'une heure suivant sa réception. La règle revient à son état initial.

    Le premier élément <eventSelector> est à présent inclus dans le futur traitement d'événement par cette règle.

Concepts associés
Accès aux informations relatives aux événements
Référence associée
Récapitulatif relatif à la règle de séquence