Una regola di sequenza viene definita da uno schema di sequenza. Essa rileva
se una certa sequenza di eventi arriva all'interno di un intervallo di tempo. La
sequenza può essere ordinata o casuale. Essa è una regola stateful.
Panoramica
Lo schema di sequenza ricerca una sequenza di
eventi in un certo periodo di tempo e rileva se la sequenza è completa o incompleta. Una
sequenza incompleta include uno o più eventi nell'ordine specificato ma non
tutti.
Il periodo è indicato da una
finestra definita dall'elemento <timeWindow> nella lingua della regola. Ogni evento
nella sequenza è definito da un elemento <eventSelector> separato all'interno della
regola. La sequenza di eventi può essere rilevata in uno dei seguenti ordini:
- Nell'ordine in cui gli elementi <eventSelector> sono codificati per la
regola. In questo caso, quando la regola rileva l'evento che è definito dal primo
elemento <eventSelector>, viene avviato il rilevamento della sequenza.
La regola attende poi l'evento che viene definito dal secondo elemento <eventSelector>.
- In ordine casuale. In questo caso, quando la regola rileva l'evento che è definito
dagli elementi <eventSelector>, viene avviato il rilevamento della sequenza. La regola attende poi un altro degli eventi che sono definiti dagli elementi
<eventSelector>.
Lo schema di sequenza è differente da altri schemi di regola nei seguenti
modi principali:
- Esso ha più elementi <eventSelector> per definire quali eventi sono accettati
dalla regola. Esso richiede anche un minimo di due elementi <eventSelector>.
- Quando un evento risponde ai criteri definiti da uno degli elementi
<eventSelector>, quell'elemento <eventSelector> viene escluso da una ulteriore
elaborazione di evento all'interno di quell'istanza della regola.
- L'attributo
alias sull'elemento <eventSelector> è valido solo in una regola di sequenza e
definisce in modo univoco un evento selezionato in base ad un certo programma di
selezione eventi in una regola di sequenza. In un'espressione all'interno di un predicato
o di un'azione di filtro, è possibile utilizzare la variabile act_eventList con questo
nome per accedere a un evento.
Esempio d'uso di questo schema di regola
Scenario che illustra il rilevamento di sequenza completa:
In un ambiente IT, un amministratore desidera sapere se il valore
della dimensione del pacchetto DB2 sta condizionando WebSphere Application
Server e, in questo caso, desidera correggere il problema. Di conseguenza, se gli eventi
successivi si verificano nel seguente ordine durante un periodo di tempo specificato,
l'amministratore desidera incrementare il valore della dimensione del pacchetto
DB2 e
riavviare il gestore del database:
- Eccezione di assegnazione risorsa di
WebSphere Application
Server. Evento di tipo WASResourceAllocationException.
- Messaggio di errore
DB2 che
indica: "Pacchetto insufficiente per elaborare l'istruzione". Evento del
tipo DB2NotEnoughHeap.
Due elementi <eventSelector> sono definiti in una regola di sequenza e gli
eventi devono arrivare nell'ordine in cui gli elementi <eventSelector> vengono
codificati per la regola (piuttosto che in ordine casuale). Il primo elemento
<eventSelector> ricerca l'evento
WASResourceAllocationException e il
secondo elemento <eventSelector> ricerca l'evento
DB2NotEnoughHeap.
I seguenti eventi vengono presentati al sistema nella finestra di tempo specificata:
- WASResourceAllocationException
- DB2BackupStarted
- WASResourceAllocationException
- WASResourceAllocationException
- DB2NotEnoughHeap
Il comportamento della regola è il seguente:
- Il primo evento, WASResourceAllocationException, viene accettato.
Poiché i criteri per il
primo elemento <eventSelector> sono soddisfatti, il primo elemento <eventSelector>
viene escluso da una ulteriore elaborazione all'interno della regola.
- Il secondo evento, DB2BackupStarted, viene ignorato.
- Il terzo evento, WASResourceAllocationException, viene ignorato.
- Il quarto evento, WASResourceAllocationException, viene ignorato.
- Il quinto evento, DB2NotEnoughHeap, viene accettato e completa la
sequenza.
Viene eseguita l'azione di risposta alla regola <onDetection>. Questa azione viene
definita per incrementare il valore della dimensione del pacchetto
DB2 e
riavviare il gestore database. La regola ritorna allo stato iniziale.
Il primo elemento <eventSelector> viene poi incluso
nell'elaborazione eventi successiva con questa regola.
Scenario che illustra il rilevamento di sequenza incompleta:
L'azienda intende avere gli ordini di tutti i clienti pronti per la
spedizione in un'ora dalla ricezione dell'ordine e desidera conoscere quando ciò non si verifica.
Due elementi <eventSelector> sono definiti in una regola di sequenza e gli
eventi devono arrivare nell'ordine in cui gli elementi <eventSelector> vengono
codificati (piuttosto che in ordine casuale). Il primo elemento
<eventSelector> ricerca l'evento
Netsales con
operationType=Order e il secondo elemento
<eventSelector> ricerca l'evento
Netsales
con
operationType=Delivery.
I seguenti eventi vengono presentati al sistema nella finestra di tempo
specificata di 1 ora:
- Un evento Netsales con operationType=Order
- Un evento Netsales con operationType=Order
Il comportamento della regola è il seguente:
- Il primo evento viene accettato. Poiché i criteri per il
primo elemento <eventSelector> sono soddisfatti, il primo elemento <eventSelector>
viene escluso da una ulteriore elaborazione all'interno della regola.
- Il secondo evento viene ignorato.
- Poiché un evento Netsales con
operationType=Delivery non viene ricevuto nell'intervallo di
tempo specificato, viene eseguita la risposta di regola <onTimeOut>. Questa azione
viene definita per notificare a un responsabile aziendale che l'ordine del cliente non è
pronto per la spedizione in 1 ora dalla richiesta dell'ordine.
La regola ritorna allo stato iniziale.
Il primo elemento <eventSelector> viene poi incluso
nell'elaborazione eventi successiva con questa regola.