2012-04-05 10 views
8

私は次のように(Perf4Jでプロファイリングを行うため)織りのロード時間を設定してみました:AspectJとTomcatを使って読み込み時間を設定するにはどうすればいいですか?

1)私はMETA-INFフォルダにaop.xmlを追加しました。配備されると、META-INFはアーティファクトルートディレクトリ(すなわち、MyAppDeployed/META-INF)に配置されます。 )私が(Tomcat/libフォルダにaspectjrt-1.6.1.jaraspectjweaver-1.6.1.jarcommons-jexl-1.1.jarcommons-logging.jarを入れ

2)は、最初に私はMyAppDeployed/WEB-INF/libsを試みたが、それもうまくいきませんでした。

3)Tomcatを起動するときにVMオプションに-javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jarを追加しました。

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> 

私はロード時ウィービングが起こるという兆候が表示されません。エラー報告も必要な結果もありません。私が持っている唯一のエラーメッセージは次のとおりです。javaagentパラメータを指定したとき、私はaspectjweaver-1.6.1.jar名に間違いを行う場合

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 

。正しく書かれていれば、エラーメッセージは表示されません。

私は間違って何をしていますか?

P.S.私はJava 5を使用しています。同じ結果を得て、aspectjのバージョン1.5.4と同じことを試しました。

+0

この問題を解明したことはありますか?私は、Aspectj + tomcatをEclipseでの読み込み時間を設定するように設定しようとしています。具体的には、私はJSPを組み立てようとしていますが、運がないのです。 – bsimic

+0

私は同様の状況がありますが、注釈が実装クラスにあるときには動作しています。com.mypackages.MyClassはインタフェースまたは実装ですか?インターフェイスに注釈があると、私の面は織り成すことができませんでした。もう1つは、私が../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xmlの下にaop.xmlファイルを持っているかどうか分からない場合です。 – dineshr

答えて

4

あなたはロード時間の織りを使用したい場合は、まず AJC (I)であなたの側面(複数可)をコンパイルし、その後通常どおりのjavacを使用してクラスをコンパイルすることができます。あなたはコンパイル時にクラスパス(「マスター・クラスパス」)にaspectjrt.jarを持つのに十分である

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

の下のようなAntタスクでこれを行うことができます。

すべてのJavaクラスは$ {src.dir}にあるので、私はiajcにソースリストを与えます。ソースリストには1行しかありません。

sources.lst

com/xx/yy/zz/LoggingAspect.java 

outxml="true" 
outjar="jar_file_name" 

私はコンパイル側面をタスクを実行すると、私は瓶jar_file_name.jarファイルが含まれている必要があり、次のように私はiajcタスクの属性の一部を設定します

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ファイルの下に直接置くと、動作しません。このように(私はアスペクトクラスを別のものに分離することを意味します)、私にとってはうまく動作します。

これが役に立ちます。

+1

このソリューションは私のために働いた。行方不明で魔女が明らかに非常に重要な点は、ビルド時に 'outxml =" true "というタグです。これがなければ、aspectjweaverがどの_aspects_を適用するかを知るために使用する 'META-INF/aop-ajc.xml'はありません。 –

4

私はTomcatで同じ問題を解決しようとしていました。 -javaagentオプションに加えて、aop.xmlがWEB-INF/classes/META-INFディレクトリの下になければならないことを確認する必要があります。これは私にとって違いをもたらしました。

+0

それはまた私のために働いた –

関連する問題