Monitorizando aplicacionescon AspectJ<br />Mauricio Quezada<br />04/02/2011<br />
AspectJ<br />Lenguaje orientado a aspectos<br />Aspecto: modularizacrosscuttingconcerns<br />Se compila a código Java equi...
AspectJ<br />Joinpoint: “la llamada a un método”<br />
AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />
AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />Advice : “después de ll...
AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />Advice : “después de ll...
Youhaveto catch ‘emall<br />after() throwing(Throwable t):execution(* *..*(..)) {<br />Controller.process(t, thisJoinPoint...
Youhaveto catch ‘emall<br />after() throwing(Throwable t):execution(* *..*(..)) {<br />Controller.process(t, thisJoinPoint...
Problema<br />class A {<br />voidfoo() { throw new Error(); }<br />void bar() { foo(); }<br />staticpublicvoidmain() {<br ...
Se registra la excepción 2 veces!<br />
Se registra la excepción 2 veces!<br />Solución: guardar la excepción recién 			 capturada<br />if(isParentOrSame( ex, rec...
<?xmlversion="1.0" encoding="UTF-8"?><br /><root><br />	<actions><br />	  <action id=“FileAction" 		class=“fwerrores.actio...
Ejecución Ideal<br />Incluir la librería fwerrores.jar en el classpath<br />
Ejecución Ideal<br />Incluir la librería fwerrores.jar en el classpath<br />Listo!<br />
Ejecución Ideal<br />Aplicación standalone<br />Agregar “–javaagent:<aspectJ>/aspectjweaver.jar”a los parámetros de la JVM...
Ejecución Ideal<br />Aplicación Web / “Empresarial”<br />Tomcat<br />Modificar context.xml declarando el reemplazo del cla...
Classloader? Agent?<br />¿No que AspectJ hace todo automágicamente?<br />AspectJ se recompila en conjunto con el código Ja...
Classloader? Agent?<br />Load-Time Weaving<br />AspectJ se encarga de agregar un ClassTransformer al classloader de la apl...
Pendientes<br />Las clases de los JSP se generan en un classloader distinto al de la aplicación<br />Los EJB a su vez pued...
Gracias! =)<br />
Próxima SlideShare
Cargando en…5
×

Monitorizando aplicaciones con AspectJ

1.091 visualizaciones

Publicado el

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

Publicado en: Educación, Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.091
En SlideShare
0
De insertados
0
Número de insertados
1
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Monitorizando aplicaciones con AspectJ

  1. 1. Monitorizando aplicacionescon AspectJ<br />Mauricio Quezada<br />04/02/2011<br />
  2. 2. AspectJ<br />Lenguaje orientado a aspectos<br />Aspecto: modularizacrosscuttingconcerns<br />Se compila a código Java equivalente<br />
  3. 3. AspectJ<br />Joinpoint: “la llamada a un método”<br />
  4. 4. AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />
  5. 5. AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />Advice : “después de llamar a foo(), imprime ‘hola’”<br />
  6. 6. AspectJ<br />Joinpoint: “la llamada a un método”<br />Pointcut : “la llamada al método foo()”<br />Advice : “después de llamar a foo(), imprime ‘hola’”<br />after(): call(voidfoo()) {<br />System.out.println(“hola”);<br />}<br />
  7. 7. Youhaveto catch ‘emall<br />after() throwing(Throwable t):execution(* *..*(..)) {<br />Controller.process(t, thisJoinPoint);<br />}<br />
  8. 8. Youhaveto catch ‘emall<br />after() throwing(Throwable t):execution(* *..*(..)) {<br />Controller.process(t, thisJoinPoint);<br />}<br />thisJoinPoint / thisJoinPointStaticPart:<br />- Información dinámica/estática del joinpoint capturado (source, método, argumentos, etc)<br />
  9. 9. Problema<br />class A {<br />voidfoo() { throw new Error(); }<br />void bar() { foo(); }<br />staticpublicvoidmain() {<br /> new A().bar();<br />}<br />}<br />
  10. 10. Se registra la excepción 2 veces!<br />
  11. 11. Se registra la excepción 2 veces!<br />Solución: guardar la excepción recién capturada<br />if(isParentOrSame( ex, recordedEx ))<br />recordedEx = ex;<br />
  12. 12. <?xmlversion="1.0" encoding="UTF-8"?><br /><root><br /> <actions><br /> <action id=“FileAction" class=“fwerrores.actions.FileAction"><br /> <paramname="filename" value="fwfile.log" /><br /> </action><br /> </actions> <br /><application> <br /> <exceptionname-pattern="*..Throwable+" thrower="*..*"><br /> <actionref=“FileAction" /><br /> </exception> ...<br /></application> <br /></root><br />
  13. 13. Ejecución Ideal<br />Incluir la librería fwerrores.jar en el classpath<br />
  14. 14. Ejecución Ideal<br />Incluir la librería fwerrores.jar en el classpath<br />Listo!<br />
  15. 15. Ejecución Ideal<br />Aplicación standalone<br />Agregar “–javaagent:<aspectJ>/aspectjweaver.jar”a los parámetros de la JVM al iniciar la aplicación<br />
  16. 16. Ejecución Ideal<br />Aplicación Web / “Empresarial”<br />Tomcat<br />Modificar context.xml declarando el reemplazo del classloader principal<br />JBoss 6.0<br />Modificar jboss-scanning.xml indicando que se carguen primero las clases del ApplicationContext<br />WAS<br />ಠ_ಠ<br />
  17. 17. Classloader? Agent?<br />¿No que AspectJ hace todo automágicamente?<br />AspectJ se recompila en conjunto con el código Java para incluir los advices<br />Existe la posiblidad de hacer el weaving de aspectos en tiempo de carga de clases, sin recompilar nada<br />“-javaagent” permite realizar acciones antes del main (a través de premain)<br />
  18. 18. Classloader? Agent?<br />Load-Time Weaving<br />AspectJ se encarga de agregar un ClassTransformer al classloader de la aplicación que realiza el weaving<br />En Tomcat, el WebAppClassLoader no admite la posibilidad de incluir transformadores de clases<br />Es por eso que se extiende el classloader para incluirlos<br />Los demás servidores de aplicaciones ya lo permiten (por ejemplo, para JPA)<br />
  19. 19. Pendientes<br />Las clases de los JSP se generan en un classloader distinto al de la aplicación<br />Los EJB a su vez pueden correr en una aplicación diferente (distinto ClassLoader)<br />Habilitar el FW en WAS <= 6 (JDK 1.4)<br />Realizar más acciones thread-safe<br />
  20. 20. Gracias! =)<br />

×