Padrão de Seqüência

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.

Condições sob as quais a Resposta da Regra é Executada

Com o padrão de seqüência, a resposta da regra é executada nas seguintes ocasiões:
  • Quando a seqüência completa de eventos é detectada no espaço de tempo, conforme definido pelo elemento <onDetection>.
  • Quando um ou mais eventos chegam, mas a seqüência completa não chega dentro do espaço de tempo, conforme definido pelo elemento <onTimeOut>.

    O padrão de seqüência pode ser útil para detectar que uma determinada seqüência está incompleta. Por exemplo, se ocorrer um evento "sistema inativo" sem um evento "sistema ativo" subseqüente, o autor de regras poderá codificar uma ação <onTimeOut> para manipular esse tipo de evento ausente.

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:
  1. Uma exceção de alocação de recurso do WebSphere Application Server. Suponha um evento do tipo WASResourceAllocationException.
  2. 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:
  1. WASResourceAllocationException
  2. DB2BackupStarted
  3. WASResourceAllocationException
  4. WASResourceAllocationException
  5. DB2NotEnoughHeap
O comportamento da regra é o seguinte:
  1. 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.
  2. O segundo evento, DB2BackupStarted, será ignorado.
  3. O terceiro evento, WASResourceAllocationException, será ignorado.
  4. O quarto evento, WASResourceAllocationException, será ignorado.
  5. 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:
  1. Um evento Netsales com operationType=Order
  2. Um evento Netsales com operationType=Order
O comportamento da regra é o seguinte:
  1. 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.
  2. O segundo evento será ignorado.
  3. 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.

Conceitos relacionados
Acessando Informações Relacionadas a Eventos
Referências relacionadas
Resumo da Regra de Seqüência