2012-04-05 101 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

相關問題