Las reglas de secuencia las define el patrón de secuencia. Una regla de secuencia detecta
si una secuencia de sucesos determinada llega dentro de un intervalo de tiempo. La secuencia puede ser ordenada o aleatoria. Una regla de secuencia es una regla con estado.
Visión general
El patrón de secuencia comprueba una secuencia de sucesos
durante un periodo de tiempo, y detecta si la secuencia está completa o
incompleta. Una secuencia incompleta es una secuencia que incluye uno o más de los sucesos en el
orden especificado, pero no todos.
El periodo de tiempo se indica por una ventana
de tiempo obligatoria, según define el elemento <timeWindow> en el lenguaje de reglas. Cada
suceso de la secuencia se define por un elemento <eventSelector> distinto dentro de
la regla. La secuencia de sucesos puede detectarse en cualquiera de los
siguientes órdenes:
- En el orden en que los elementos <eventSelector> están codificados para la
regla. En este caso, cuando la regla detecta el suceso definido por el primer elemento
<eventSelector>, se inicia la detección de la secuencia.
A continuación la regla espera el suceso definido por el segundo elemento <eventSelector>.
- En orden aleatorio. En este caso, cuando la regla detecta alguno de los elementos definidos por
los elementos <eventSelector>, se inicia la detección de la secuencia. A continuación
la regla espera algún otro de los sucesos definidos por los elementos <eventSelector>.
El patrón de secuencia se diferencia de los demás patrones de regla
en lo siguiente:
- Tiene múltiples elementos <eventSelector> para definir qué sucesos son aceptados por la
regla. Requiere un mínimo de dos elementos <eventSelector>.
- Cuando un suceso cumple los criterios definidos en alguno de los elementos <eventSelector>,
ese elemento <eventSelector> queda excluido para el posterior proceso de sucesos dentro de esa
instancia de regla.
- El atributo de alias del elemento <eventSelector>
sólo es válido dentro de una regla de secuencia, y únicamente nombra a un suceso seleccionado
por un selector de sucesos concreto de la regla de secuencia. En una expresión dentro de un predicado
o acción de filtrado, puede utilizar la variable act_eventList para acceder a un suceso de una regla de secuencia mediante su nombre de alias.
Ejemplo de utilización de este patrón de regla
Caso que ilustra la detección de una secuencia completa:
Supongamos
que en un entorno de TI, un administrador desea saber si el valor del tamaño de almacenamiento
de DB2 está afectando a WebSphere Application Server y, si es el caso, corregir el problema. Por lo tanto, si se dan los siguientes sucesos en el siguiente orden durante
un periodo de tiempo especificado, el administrador quiere aumentar el valor del
tamaño de almacenamiento de DB2 y reiniciar el gestor de bases de datos:
- Una excepción de asignación de recursos de WebSphere Application Server. Supongamos que este es un suceso de tipo WASResourceAllocationException.
- El mensaje de error de DB2 parecido al siguiente: "No hay almacenamiento suficiente para procesar la sentencia". Supongamos que este es un suceso de tipo DB2NotEnoughHeap.
Para este caso, hay dos elementos <eventSelector> definidos en una regla de secuencia
y los sucesos tienen que llegar en el orden en que están codificados los elementos <eventSelector>
(y no en orden aleatorio). El primer elemento <eventSelector>
comprueba el suceso
WASResourceAllocationException, y el segundo elemento <eventSelector>
comprueba el suceso
DB2NotEnoughHeap. Supongamos que se presentan los siguientes
sucesos al sistema dentro de la ventana de tiempo especificada:
- WASResourceAllocationException
- DB2BackupStarted
- WASResourceAllocationException
- WASResourceAllocationException
- DB2NotEnoughHeap
El comportamiento de la regla es el siguiente:
- El primer suceso, WASResourceAllocationException, es aceptado. Ya que se cumple el criterio
para el primer elemento <eventSelector>, el primer elemento <eventSelector>
queda excluido para el posterior proceso de sucesos dentro de esta
regla.
- El segundo suceso, DB2BackupStarted, es ignorado.
- El tercer suceso, WASResourceAllocationException, es ignorado.
- El cuarto suceso, WASResourceAllocationException, es ignorado.
- El quinto suceso, DB2NotEnoughHeap, es aceptado y completa la
secuencia. Se ejecuta la acción de respuesta de regla <onDetection>. Esta acción se define para aumentar el valor del
tamaño de almacenamiento de DB2 y reiniciar el gestor de bases de datos. La regla vuelve a su estado inicial.
El primer elemento <eventSelector> se incluye ahora
para el futuro proceso de sucesos de esta regla.
Caso que ilustra la detección de una secuencia incompleta:
Supongamos que una organización empresarial pretende tener todos los pedidos de un cliente listos para la entrega en 1 hora desde la recepción del pedido y desea saber los casos en que esto no se cumple.
Para este caso, hay dos elementos <eventSelector> definidos en una regla de secuencia
y los sucesos tienen que llegar en el orden en que están codificados los elementos <eventSelector>
(y no en orden aleatorio). El primer elemento <eventSelector>
comprueba el suceso
Netsales con
operationType=Order,
y el segundo elemento <eventSelector> comprueba el suceso
Netsales con
operationType=Delivery.
Supongamos que se presentan los siguientes
sucesos al sistema con una ventana de tiempo especificada de 1 hora:
- Un suceso Netsales con operationType=Order
- Un suceso Netsales con operationType=Order
El comportamiento de la regla es el siguiente:
- El primer suceso es aceptado. Ya que se cumple el criterio
para el primer elemento <eventSelector>, el primer elemento <eventSelector>
queda excluido para el posterior proceso de sucesos dentro de esta
regla.
- El segundo suceso es ignorado.
- Ya que un suceso Netsales con operationType=Delivery no se recibe dentro del espacio de tiempo especificado, se ejecuta la acción <onTimeOut>. Esta acción se define para notificar a un ejecutivo comercial que el pedido de un cliente no está preparado para la entrega dentro del espacio de tiempo de 1 hora tras la solicitud del pedido. La regla vuelve a su estado inicial.
El primer elemento <eventSelector> se incluye ahora
para el futuro proceso de sucesos de esta regla.