| = 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. |