Javafree

Interceptores com EJB 3

Publicado por jesuino em 07/11/2011 - 6.525 visualizações

Introdução
Nesse artigo mostraremos rapidamente como criar um interceptor com EJBs 3.

Os interceptores permitem que adicionamos código que serão executados antes dos métodos selecionados. Assim podemos adicionar mais funcionalidades as nossas aplicações em tocar no código já funcional. Usos típicos são para realizar logs, verificações de segurança, ou adicionar regras de negócio comum a diversos métodos.

Os interceptores podem ser registrados para um método específico ou para uma classe inteira, fazendo que sua execução dele seja para todos os métodos dessa classe. Também é possível reutilizar ele quantas vezes for necessário em outros métodos ou classes..

Um exemplo prático
Usar os interceptores no EJB 3 não é uma tarefa difícil, na realidade precisamos só de algumas anotações para fazer isso. Para nosso exemplo iremos usar um simples EJB do tipo Stateless:

E a implementação:

Lembrado que a interface não é obrigatória. Para utilizar esse EJB vamos criar um simples projeto WEB que contém um servlet e uma página JSP. Assim nosso Servlet ficou como mostrado abaixo.

O funcionamento deste Servlet é simples. O EJB será injetado pelo contâiner por causa da anotação @EJB, iremos invocar o método digaOla e colocaremos o resultado em uma variável de sessão chamada ?mensagem?. Por fim direcionamos para uma página JSP. Essa página por sua vez contém um formulário que submete para o mesmo Servlet descrito anteriormente e a mensagem do Servlet, se existir.


Agora já é hora de criamos nosso interceptor. São necessários dois passos básicos:

- Anotar o método que vai agir como interceptor com @javax.interceptor.AroundInvoke;
- Anotar o método que desejamos interceptar com @Interceptors e passar como parâmetro a classe que contém o método(ou os métodos, podemos usar mais de um) anotado com @AroundInvoke.

O método anotado com @AroundInvoke receberá um parâmetro do tipo javax.interceptor.InvocationContext. Nessa classe teremos meta-informações do método que foi interceptado. Ver javadoc dessa classe para mais informações.

Abaixo temos o código de nossa classe inteceptora:



Perceba que a função desse interceptor é simplesmente imprimir o nome do método que foi interceptado. Uma parte importante dos interceptores é sempre chamar o método proceed da classe InvocationContext e retornar o resultado, pois se isso não for feito a execução do método e da pilha de interceptores não acontecerá. Se você quiser para a execução do método por algum critério em específico, você pode lançar uma exceção que será tratada pela classe que está chamando o método alvo desse interceptor.
O segundo passo agora é adicionar a anotação @Interceptors(SimpleInterceptor.class) ao nosso método digaOla.

Para testar isso, você pode empactar o arquivo WEB(.war) e o projeto EJB(.jar) em um EAR e realizar deploy em um servidor de aplicação JEE, como o JBoss AS 5 ou 6. Infelizmente não realizamos teste no novíssimo JBoss AS 7.

Conclusão
Apresentamos basicamente como funcionam os interceptores com EJB 3. Ainda há algumas particularidades que não foram discutidas aqui, mas acreditamos que esse pequeno artigo servirá como base inicial para os leitores que desejarem saber mais esse assunto.
Anexo você pode encontrar os projetos do Eclipse contendo os códigos apresentados e também um arquivo .ear pronto para ser instalado em servidor de aplicação JBoss.


Download:  ejb3.zip
Size:  22 KB

Download:  ejb-teste.ear
Size:  4 KB

comentários: 5

Tópicos Relacionados