VRaptor

Trabalhando com o recurso de Eventos do CDI

O VRaptor agora trata o fluxo principal do request utilizando eventos do CDI. A seguinte imagem exibe os eventos disparados e seus respectivos observers:

VRaptor 4 Event Pipeline

Eventos disparados pelo VRaptor

VRaptorInitialized Disparado no startup da aplicação, indicando que o VRaptor foi inicializado.
RequestStarted Disparado no início de cada request.
RequestSucceeded Disparado no final do request, apenas caso ela tenha sido processada sem nenhum erro.
ControllerFound e ControllerNotFound Vão indicar se o Controller que atende a url do request foi encontrado ou não.
InterceptorsReady e InterceptorsExecuted Indicam o momento em que a stack de interceptors será executada e logo após sua conclusão.
MethodReady e MethodExecuted Quando o método do controller será executado e logo após sua conclusão.

Observando nossos eventos

Você pode observar qualquer evento disparado pelo VRaptor, para isso basta criar um método com a anotação @Observes do pacote javax.enterprise.event antes do evento como parâmetro. Algo como:

import javax.enterprise.event.Observes;

import br.com.caelum.vraptor.events.ControllerNotFound;

public class MeuObserver {
    
    public void metodo(@Observes ControllerNotFound evento) { ... }
}

Note que dentro do método void metodo() você pode inserir alguma ação para quando o controller não for encontrado.

É importante lembrar que não existe ordem na execução dos observers, ou seja, não há garantia que o meu método será executado antes ou depois de qualquer outro método que observe este mesmo evento. Caso a ordem seja importante, considere utilizar interceptors.

Mais sobre eventos

Esse interessante recurso te ajuda a diminuir o acoplamento de seu código de forma elegante. Você pode ler mais a respeito dos eventos do CDI em sua especificação e também nesse post do blog da caelum.