Uma regra de seqüência é definida pelo padrão de seqüência. Ela detecta
se uma determinada seqüência de eventos chega em um intervalo de tempo. A seqüência
pode ser ordenada ou aleatória. Uma regra de seqüência é uma regra com preservação de estado.
Visão Geral
O padrão de seqüência procura uma seqüência
de eventos em um período de tempo e detecta se a seqüência está completa
ou incompleta. Uma seqüência incompleta é aquela que inclui um ou mais dos
eventos na ordem especificada, mas não todos.
O período de tempo
é indicado por um espaço de tempo obrigatório, conforme definido pelo elemento
<timeWindow> na linguagem da regra. Cada evento na seqüência é definido por um elemento
<eventSelector> separado na regra. A seqüência de eventos pode ser detectada em uma
das seguintes ordens:
- Na ordem em que os elementos <eventSelector> são codificados para a
regra. Nesse caso, quando a regra detecta o evento definido pelo
primeiro elemento <eventSelector>, a detecção da seqüência é iniciada.
Agora, a regra espera o evento definido pelo segundo elemento <eventSelector>.
- Na ordem aleatória. Nesse caso, quando a regra detecta um dos eventos
definidos pelos elementos <eventSelector>, a detecção da
seqüência é iniciada. Agora, a regra espera outro dos eventos
definidos pelos elementos <eventSelector>.
O padrão de seqüência é diferente de outros padrões de regra
nas maneiras primárias a seguir:
- Ele possui vários elementos <eventSelector> para definir quais eventos
são aceitos pela regra. Ele requer um mínimo de dois elementos
<eventSelector>.
- Quando um evento atende aos critérios definidos por um dos elementos <eventSelector>,
esse elemento <eventSelector> é excluído do processamento adicional de eventos
nessa instância de regra.
- O atributo de alias no elemento <eventSelector>
é válido apenas em uma regra de seqüência e nomeia exclusivamente um evento
que é selecionado por um determinado seletor de eventos na regra de seqüência. Numa expressão dentro de um predicado ou ação de filtragem, é possível
utilizar a variável act_eventList para acessar um evento numa regra de
seqüência pelo seu nome de alias.
Exemplo de Uso desse Padrão de Regra
Cenário que Ilustra a Detecção de Seqüência Completa:
Suponha que em um ambiente de TI, um administrador queira saber se o valor
do tamanho de heap do DB2
está afetando o
WebSphere
Application Server e, nesse caso, corrigir o problema. Então, se os
seguintes eventos ocorrerem na ordem a seguir durante um período de tempo
especificado, o administrador desejará aumentar o valor do tamanho de heap
do DB2 e reiniciar o gerenciador do banco de dados:
- Uma exceção de alocação de recurso do WebSphere Application Server. Suponha um evento do tipo WASResourceAllocationException.
- A mensagem de erro do
DB2 que informa: "Sem heap suficiente para processar a instrução". Suponha um evento do tipo DB2NotEnoughHeap.
Neste cenário, dois elementos <eventSelector> estão definidos numa
regra de seqüência e os eventos devem acontecer na ordem em que os
elementos <eventSelector> estão codificados (ao invés de numa ordem
aleatória). O primeiro elemento <eventSelector> está procurando o
evento
WASResourceAllocationException; o segundo elemento
<eventSelector>, o evento
DB2NotEnoughHeap. Suponha que os
eventos a seguir sejam apresentados ao sistema no espaço de tempo especificado:
- WASResourceAllocationException
- DB2BackupStarted
- WASResourceAllocationException
- WASResourceAllocationException
- DB2NotEnoughHeap
O comportamento da regra é o seguinte:
- O primeiro evento, WASResourceAllocationException, será aceito. Como os critérios
para o primeiro elemento <eventSelector> foram atendidos, o primeiro elemento
<eventSelector> é agora excluído do processamento adicional de eventos nessa regra.
- O segundo evento, DB2BackupStarted, será ignorado.
- O terceiro evento, WASResourceAllocationException, será ignorado.
- O quarto evento, WASResourceAllocationException, será ignorado.
- O quinto evento, DB2NotEnoughHeap, será aceito e isso conclui a seqüência. A ação de resposta da regra <onDetection> será executada.
Essa ação será definida para aumentar o valor do tamanho de heap do
DB2
e reiniciar o gerenciador de banco de dados.
A regra retorna a seu estado inicial.
O primeiro elemento <eventSelector> é agora
incluído no processamento futuro de eventos por essa regra.
Cenário que Ilustra a Detecção de Seqüência Incompleta:
Suponha que uma organização de negócios pretenda que todos os pedidos dos
clientes estejam prontos para entrega em uma hora da entrada do pedido e
queira saber quando isso não ocorre.
Neste cenário, dois elementos
<eventSelector> estão definidos numa regra de seqüência e os eventos
devem acontecer na ordem em que os elementos <eventSelector> estão
codificados (ao invés de numa ordem aleatória). O primeiro elemento
<eventSelector> está procurando o evento
Netsales com
operationType=Order
e o segundo elemento <eventSelector> está procurando o evento
Netsales com
operationType=Delivery.
Suponha que os eventos a
seguir sejam apresentados ao sistema no espaço de tempo especificado de 1 hora:
- Um evento Netsales com operationType=Order
- Um evento Netsales com operationType=Order
O comportamento da regra é o seguinte:
- O primeiro evento será aceito. Como os critérios
para o primeiro elemento <eventSelector> foram atendidos, o primeiro elemento
<eventSelector> é agora excluído do processamento adicional de eventos nessa regra.
- O segundo evento será ignorado.
- Como um evento de Netsales com o
operationType=Delivery não foi recebido dentro do
intervalo de tempo especificado, a ação de resposta da regra
<onTimeOut> será executada. Essa ação será definida para notificar um
gerente do negócio que um pedido do cliente não está pronto para entrega
em uma hora da entrada do pedido.
A regra retorna a seu estado inicial.
O primeiro elemento <eventSelector> é agora
incluído no processamento futuro de eventos por essa regra.