2012-04-05 102 views
8

我试图配置负载时织入(做与的Perf4分析)在接下来的方式:如何使用AspectJ和Tomcat配置加载时织入?

1)I加入到aop.xmlMETA-INF。部署时,META-INF被放置在工件根目录中(即MyAppDeployed/META-INF)。

2)我把aspectjrt-1.6.1.jaraspectjweaver-1.6.1.jarcommons-jexl-1.1.jarcommons-logging.jarTomcat/lib文件夹(在开始我尝试MyAppDeployed/WEB-INF/libs,但它也没有工作)。

3)我在启动Tomcat时将-javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar添加到VM选项。

4)我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> 

我没有看到任何迹象表明加载时织发生。无论是错误报告还是必要的结果。唯一的错误消息我是:

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 
的情况下

当我在aspectjweaver-1.6.1.jar名称的错误,当指定javaagent参数。如果写入正确 - 不会打印错误消息。

任何想法,我做错了什么?

P.S.我使用Java 5,并且我尝试了与aspectj的1.5.4版本相同的结果,并得到完全相同的结果。

+0

你有没有想过这个问题?我想在Eclipse中加载时间编织来配置Aspectj + tomcat。具体来说,我试图编织JSP的,但没有运气。 – bsimic 2012-08-10 16:50:48

+0

我有类似的情况,但当注解在我的实现类上时它有效。是否将com.mypackages.MyClass作为接口或实现?当我在界面上添加注释时,我的方面不会被编织。还有一件事我有../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xml下的aop.xml文件不知道这是否有所作为。 – dineshr 2013-11-07 13:38:04

回答

4

如果你想使用的加载时间编织,你可以先用的javac编译类像往常一样,然后编译(i)您(些)方面AJC。你可以像下面

<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> 

这足以编译时有aspectjrt.jar在classpath“主类路径”)与Ant任务做到这一点。

因为我的所有Java类都在$ {src.dir}中,我给了一个源列表给iajc。在源列表中只有一行。

sources.lst

com/xx/yy/zz/LoggingAspect.java 

我设置一些iajc任务的属性如下

outxml="true" 
outjar="jar_file_name" 

当我运行编译方面的任务,我有一个罐子jar_file_name.jar文件包含

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

最后,将* jar_file_name.jar添加到您的Web应用程序的WEB-INF/lib文件夹中。

然后像-javaagents:/path_to_aspectjweaver.jar那样启动Tomcat,就像以前一样。

当我直接将aop.xml(或aop-ajc.xml)放在META-INF下的WAR文件中时,它不起作用。这种方式(我的意思是把方面类分成一个jar)对我来说工作得很好。

希望这会有所帮助。

+1

该解决方案适用于我。我失踪和女巫的观点显然非常重要,那就是在构建时标记'outxml =“true”'。没有这个,你没有aspectjweaver使用的'META-INF/aop-ajc.xml'来知道什么是_aspects_应用。 – 2015-11-25 16:36:18

4

我正试图解决Tomcat中的相同问题。除-javaagent选项之外,您需要确保aop.xml必须位于WEB-INF/classes/META-INF目录下。这对我有所帮助。

+0

它也适用于我 – 2015-07-27 09:06:36

相关问题