jueves, 28 de junio de 2007

Interceptar toda la aplicacion en Seam

Podemos utilzar la filosofía de Seam de interceptar todo, para cronometrar nuestra aplicación y comprobar en que métodos se producen retardos.

  1. Creamos una clase que extienda de org.jboss.seam.ejb.SeamInterceptor es decir la clase que utiliza Seam para interceptar los componentes de la aplicacion:
    • public class MiaoInterceptor extends SeamInterceptor {

      @AroundInvoke
      public Object aroundInvoke(InvocationContext invocation) throws Exception
      {

      if(invocation.getTarget().getClass().getPackage().toString().contains("es.miao")){
      long l = System.currentTimeMillis();

      String invocacion=invocation.getTarget().getClass().getSimpleName()+"."+invocation.getMethod().getName()+"()";
      System.out.println("INICIANDO: "+invocacion);

      Object o = invocation.proceed();
      long ll = System.currentTimeMillis();

      System.out.println("FINALIZANDO: "+invocacion+" Tiempo total: "+(ll-l)+" milisegundos");

      return o;
      }
      return invocation.proceed();
      }

      }
  2. Cambiar en el ejb-jar.xml el interceptor de seam por el nuestro
    • <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
      version="3.0">
      <interceptors>
      <interceptor>
      <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      </interceptor>
      <interceptor>
      <interceptor-class>es.miao.MiaoInterceptor</interceptor-class>
      </interceptor>
      </interceptors>
      <assembly-descriptor>
      <interceptor-binding>
      <ejb-name>*</ejb-name>
      <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      </interceptor-binding>
      <interceptor-binding>
      <ejb-name>*</ejb-name>
      <interceptor-class>es.miao.MiaoInterceptor</interceptor-class>
      </interceptor-binding>
      </assembly-descriptor>
      </ejb-jar>

No hay comentarios: