20
Monitorizando aplicaciones con AspectJ Mauricio Quezada 04/02/2011

Monitorizando aplicaciones con AspectJ

Embed Size (px)

DESCRIPTION

Resumiendo unas cuantas de caracteristicas del framework de errores desarrollado bajo AspectJ

Citation preview

Page 1: Monitorizando aplicaciones con AspectJ

Monitorizando aplicacionescon AspectJ

Mauricio Quezada04/02/2011

Page 2: Monitorizando aplicaciones con AspectJ

AspectJ

• Lenguaje orientado a aspectos

• Aspecto: modulariza crosscutting concerns

• Se compila a código Java equivalente

Page 3: Monitorizando aplicaciones con AspectJ

AspectJ

• Joinpoint : “la llamada a un método”

Page 4: Monitorizando aplicaciones con AspectJ

AspectJ

• Joinpoint : “la llamada a un método”

• Pointcut : “la llamada al método foo()”

Page 5: Monitorizando aplicaciones con AspectJ

AspectJ

• Joinpoint : “la llamada a un método”

• Pointcut : “la llamada al método foo()”

• Advice : “después de llamar a foo(), imprime ‘hola’”

Page 6: Monitorizando aplicaciones con AspectJ

AspectJ

• Joinpoint : “la llamada a un método”

• Pointcut : “la llamada al método foo()”

• Advice : “después de llamar a foo(), imprime ‘hola’”

after(): call(void foo()) {System.out.println(“hola”);

}

Page 7: Monitorizando aplicaciones con AspectJ

You have to catch ‘em all

after() throwing(Throwable t):execution(* *..*(..)) {

Controller.process(t, thisJoinPoint);}

Page 8: Monitorizando aplicaciones con AspectJ

You have to catch ‘em all

after() throwing(Throwable t):execution(* *..*(..)) {

Controller.process(t, thisJoinPoint);}

thisJoinPoint / thisJoinPointStaticPart:- Información dinámica/estática del joinpoint capturado (source, método, argumentos, etc)

Page 9: Monitorizando aplicaciones con AspectJ

Problema

class A {

void foo() { throw new Error(); }

void bar() { foo(); }

static public void main() {new A().bar();

}}

Page 10: Monitorizando aplicaciones con AspectJ

• Se registra la excepción 2 veces!

Page 11: Monitorizando aplicaciones con AspectJ

• Se registra la excepción 2 veces!

• Solución: guardar la excepción recién capturada

if(isParentOrSame( ex, recordedEx ))recordedEx = ex;

Page 12: Monitorizando aplicaciones con AspectJ

<?xml version="1.0" encoding="UTF-8"?><root>

<actions> <action id=“FileAction" class=“fwerrores.actions.FileAction">

<param name="filename" value="fwfile.log" /> </action></actions>

<application> <exception name-pattern="*..Throwable+" thrower="*..*"> <action ref=“FileAction" /> </exception> ...</application>

</root>

Page 13: Monitorizando aplicaciones con AspectJ

Ejecución Ideal

• Incluir la librería fwerrores.jar en el classpath

Page 14: Monitorizando aplicaciones con AspectJ

Ejecución Ideal

• Incluir la librería fwerrores.jar en el classpath

• Listo!

Page 15: Monitorizando aplicaciones con AspectJ

Ejecución Ideal

• Aplicación standalone

– Agregar “–javaagent:<aspectJ>/aspectjweaver.jar”a los parámetros de la JVM al iniciar la aplicación

Page 16: Monitorizando aplicaciones con AspectJ

Ejecución Ideal

• Aplicación Web / “Empresarial”– Tomcat• Modificar context.xml declarando el reemplazo del

classloader principal

– JBoss 6.0• Modificar jboss-scanning.xml indicando que se carguen

primero las clases del ApplicationContext

– WAS• ಠ_ಠ

Page 17: Monitorizando aplicaciones con AspectJ

Classloader? Agent?

• ¿No que AspectJ hace todo automágicamente?– AspectJ se recompila en conjunto con el código Java para

incluir los advices

– Existe la posiblidad de hacer el weaving de aspectos en tiempo de carga de clases, sin recompilar nada

– “-javaagent” permite realizar acciones antes del main (a través de premain)

Page 18: Monitorizando aplicaciones con AspectJ

Classloader? Agent?

• Load-Time Weaving– AspectJ se encarga de agregar un ClassTransformer al

classloader de la aplicación que realiza el weaving

– En Tomcat, el WebAppClassLoader no admite la posibilidad de incluir transformadores de clases

– Es por eso que se extiende el classloader para incluirlos

– Los demás servidores de aplicaciones ya lo permiten (por ejemplo, para JPA)

Page 19: Monitorizando aplicaciones con AspectJ

Pendientes

• Las clases de los JSP se generan en un classloader distinto al de la aplicación

• Los EJB a su vez pueden correr en una aplicación diferente (distinto ClassLoader)

• Habilitar el FW en WAS <= 6 (JDK 1.4)

• Realizar más acciones thread-safe

Page 20: Monitorizando aplicaciones con AspectJ

Gracias! =)