2012-04-05 15 views
8

probé a configurar en tiempo de carga de tejer (para hacer perfiles con Perf4J) en la siguiente forma:¿Cómo configurar el tejido en tiempo de carga con AspectJ y Tomcat?

1) añadí aop.xml a META-INF carpeta. Cuando se implementa, META-INF se coloca en el directorio raíz del artefacto (es decir, MyAppDeployed/META-INF).

2) Pongo aspectjrt-1.6.1.jar, aspectjweaver-1.6.1.jar, commons-jexl-1.1.jar, commons-logging.jar a la carpeta Tomcat/lib (al principio me trataron MyAppDeployed/WEB-INF/libs pero también no funcionaba).

3) Agregué -javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar a las opciones de máquina virtual al iniciar Tomcat.

4) Mi aop.xml:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 

<aspectj> 

    <aspects> 
     <aspect name="org.perf4j.log4j.aop.TimingAspect"/> 
    </aspects> 

    <weaver options="-verbose -showWeaveInfo">   
     <include within="com.mypackages.MyClass"/> 
    </weaver> 
</aspectj> 

no veo ninguna señal de que los tiempos de carga de tejido pasa. Ni informes de errores ni resultados necesarios. El único mensaje de error que tengo es:

Error occurred during initialization of VM 
agent library failed to init: instrument 
Error opening zip file: C:\apache-tomcat-6.0.33\lib\wrong-jar.jar 

en un caso cuando hago un error en un nombre aspectjweaver-1.6.1.jar cuando se especifique un parámetro javaagent. Si está escrito correctamente, no se imprimen mensajes de error.

Alguna idea, ¿qué estoy haciendo mal?

P.S. Uso Java 5 y probé las mismas cosas con la versión 1.5.4 del aspectj con exactamente los mismos resultados.

+0

¿Alguna vez resolvió este problema? Estoy intentando configurar Aspectj + tomcat con el tiempo de carga de tejer en Eclipse. Específicamente estoy tratando de tejer JSP pero no estoy teniendo suerte. – bsimic

+0

Tengo una situación similar pero la tengo funcionando cuando la anotación está en mi clase de implementación. ¿Es su com.mypackages.MyClass una interfaz o implementación? Mis aspectos no se tejen cuando tengo la anotación en la interfaz. También una cosa más que tengo el archivo aop.xml en ../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xml no estoy seguro si eso hace la diferencia. – dineshr

Respuesta

4

Si desea utilizar tejer el tiempo de carga, puede compilar primero sus clases con javac como de costumbre y luego compilar su aspecto (s) con (i) AJC. Usted puede hacer esto con una tarea de hormigas, como a continuación

<target name="compile-aspect"> 
    <iajc source="1.6" target="1.6" showweaveinfo="true" verbose="true" outxml="true" debug="true" outjar="${dist.dir}/myaspect.jar"> 
      <argfiles> 
        <pathelement location="${src.dir}/sources.lst"/> 
      </argfiles> 
      <classpath> 
        <path refid="master-classpath" /> 
      </classpath> 
    </iajc> 
</target> 

Es suficiente con tener aspectjrt.jar en la ruta de clase ("maestro-ruta de clases") durante la compilación.

Como todas mis clases de Java en $ {src.dir}, doy una lista de fuentes a iajc. En la lista fuente, solo hay una línea.

sources.lst

com/xx/yy/zz/LoggingAspect.java 

puse algunos de los atributos de las tareas de la siguiente manera CJI

outxml="true" 
outjar="jar_file_name" 

Cuando corro de compilación aspecto tarea que tiene un frasco jar_file_name.jar archivo contiene

META-INF/MANIFEST.MF 
com/xx/yy/zz/LoggingAspect.class 
META-INF/aop-ajc.xml 

Y finalmente agregue el * jar_file_name.jar * a la carpeta de la aplicación web WEB-INF/lib.

Luego, inicie Tomcat con -javaagents: /path_to_aspectjweaver.jar como lo hizo anteriormente.

Cuando pongo el aop.xml (o aop-ajc.xml) en META-INF directamente debajo del archivo war, no funciona. De esta manera (me refiero a separar las clases de aspecto en un contenedor) funciona bien para mí.

Espero que esto ayude.

+1

Esta solución funcionó para mí. El punto que me faltaba y que obviamente es muy importante es la etiqueta 'outxml =" true "' cuando se construye. Sin esto, no tiene el 'META-INF/aop-ajc.xml' que utiliza aspectweeter para saber qué son los _activos_ para aplicar. –

4

Estaba tratando de resolver el mismo problema en Tomcat. Además de la opción -javaagent, debe asegurarse de que aop.xml debe estar en el directorio WEB-INF/classes/META-INF. Esto hizo la diferencia para mí.

+0

También funcionó para mí –

Cuestiones relacionadas