Rom*_*man 8 java tomcat aspectj perf4j load-time-weaving
我试着用下一种方式配置加载时织入(用于使用Perf4J进行分析):
1)我添加aop.xml到META-INF文件夹.部署时,META-INF放置在工件根目录(即MyAppDeployed/META-INF)中.
2)我把aspectjrt-1.6.1.jar,aspectjweaver-1.6.1.jar,commons-jexl-1.1.jar,commons-logging.jar到Tomcat/lib文件夹(在第一次我尝试MyAppDeployed/WEB-INF/libs,但它也没有工作).
3)我-javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar在启动Tomcat时添加了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>
Run Code Online (Sandbox Code Playgroud)
我没有看到任何迹象表明装载时编织发生.无论是错误报告还是必要结果.我唯一的错误信息是:
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
Run Code Online (Sandbox Code Playgroud)
在aspectjweaver-1.6.1.jar指定javaagent参数时,我在名称中输入错误的情况.如果写得正确 - 不会打印错误信息.
任何想法,我做错了什么?
PS我使用Java 5,我尝试使用1.5.4aspectj版本完全相同的结果.
如果您想使用加载时编织,您可以像往常一样首先使用javac编译您的类,然后使用(i)ajc编译您的方面。您可以使用如下所示的 ant 任务执行此操作
<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>
Run Code Online (Sandbox Code Playgroud)
在编译期间在类路径(“master-classpath”)中有aspectjrt.jar就足够了。
因为我所有的 Java 类都在${src.dir} 中,所以我向 iajc 提供了一个源列表。源列表中只有一行。
来源.lst
com/xx/yy/zz/LoggingAspect.java
Run Code Online (Sandbox Code Playgroud)
我设置了一些iajc任务的属性如下
outxml="true"
outjar="jar_file_name"
Run Code Online (Sandbox Code Playgroud)
当我运行 compile-aspect 任务时,我有一个 jar jar_file_name.jar文件包含
META-INF/MANIFEST.MF
com/xx/yy/zz/LoggingAspect.class
META-INF/aop-ajc.xml
Run Code Online (Sandbox Code Playgroud)
最后将 *jar_file_name.jar* 添加到您的 Web 应用程序的WEB-INF/lib文件夹中。
然后用-javaagents:/path_to_aspectjweaver.jar启动Tomcat像之前一样。
当我将 aop.xml(或 aop-ajc.xml)直接放在 war 文件下的 META-INF 中时,它不起作用。这种方式(我的意思是将方面类分离到一个 jar 中)对我来说很好用。
希望这可以帮助。
小智 5
我试图在 Tomcat 中解决同样的问题。除了 -javaagent 选项之外,您还需要确保 aop.xml 必须位于 WEB-INF/classes/META-INF 目录下。这对我来说很重要。
| 归档时间: |
|
| 查看次数: |
15060 次 |
| 最近记录: |