domingo, 5 de abril de 2009

Interceptadores em EJB3

Acabamos de passar dos 6.000 acessos ao site desde que começamos a monitorar os acessos com o analytics e não poderia deixar de agradecer enviando um post que talvez ajude a quem quer monitorar e realizar log das operações realizadas pelas chamadas ao EJB. Neste post de hoje vamos falar sobre interceptadores em EJB3.

A especificação de EJB3 define o que seriam interceptadores que adicionam a abilidade de interceptar métodos de negócio de Session Beans e de Message Drive Beans.
Segue abaixo um exemplo de um interceptador que foi implementado com o intuito de realizar um log dos métodos de negócio chamados:

/**
* Classe interceptadora que imprime os métodos de negócio
* que estão sendo chamandos durante a execução do programa.
*
* @author samuelmd
*
*/
public class LogJPAInterceptor {

@AroundInvoke
public Object logInterceptor(InvocationContext invocation)

throws Exception {
Logger logger = Logger.getLogger(LogJPAInterceptor.class);

logger.debug(" ---------------------------- ");
logger.debug("Chamando método " + invocation.getMethod()
+ " da classe " + invocation.getTarget());

Object[] objetos = invocation.getParameters();

if (objetos != null) {
logger.debug("Métodos com os parâmetros :");
for (Object objeto : objetos) {
if (objeto != null) {
logger.debug(objeto.getClass().getName() + " : "
+ objeto.toString());
}
}
}

logger.debug(" ---------------------------- ");
return invocation.proceed();
}
}

A anotação @AroundInvoke indica para o sistema qual o método realizará a interceptação dos métodos de negócio.

Interceptadores podem ser adicionados de 3 maneiras diferentes assim como mostrados abaixo:

  • Default. Só podem ser adicionados através do descritor de implantação assim como definido abaixo:
    <assembly-descriptor>
    <!—Interceptadores default -->
    <interceptor-binding>
    <ejb-name>*</ejb-name>
    <interceptor-class>
    com.thinkworks.interceptor.LogJPAInterceptor
    </interceptor-class>
    </interceptor-binding>
    </assembly-descriptor&gt
  • Classe. Podem ser adicionados tando pelo descritor de implantação quanto pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.
  • Método. Definido pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.

É isto aí pessoal. Mais informações podem ser encontradas em http://docs.jboss.org/ejb3/app-server/tutorial/interceptor/interceptor.html.

Qualquer problema avisem…

image

Nenhum comentário: