blob: a1efc803464488cf2f91822bf0b6f79ce6dda001 [file] [log] [blame]
= CDI Events - Acoplamento Solto e Extensibilidade
:index-group: CDI
:jbake-type: page
:jbake-status: published
O CDI permite estender o código de negócios pelo padrão Notificador / Observador.
Para fazer isso, basta injetar um campo `Event` na classe notifier. Essa classe é um modelo e o tipo de parâmetro é o tipo de objeto a ser disparado. Então, quando você quiser notificar observadores, você simplesmente chamará o método fire do objeto de evento passando como parâmetro o próprio evento.
(sua própria classe!)
Do outro lado, você anotou um parâmetro de método `@ Observes` e o tipo de parâmetro é o tipo enviado pelo notificador.
NOTE: Você pode adicionar qualificadores para ser mais preciso em seus eventos.
== Exemplo
O exemplo é bem simples: um ejb usa a anotação `@ Schedule` para receber uma notificação a cada segundo.
A cada segundo este EJB enviará a data atual por meio de eventos do CDI.
Este é o nosso código de "negócios". É um comportamento simples (nada).
Em nosso teste (que é considerado como uma extensão) criamos um observador (classe `Observer`)
que simplesmente armazena e registra cada data recebida.
O teste em si (`EventTest`) simplesmente verifica as datas que foram recebidas.
== Conclusão
CDI permite implementar facilmente plugins através deste mecanismo de eventos.
Se você for mais longe e olhar para a API do plugin CDI, perceberá que é simplesmente o mesmo tipo
de eventos. Os eventos do CDI são realmente a base do CDI.