Konfigurieren von load-time-weaving mit AspectJ und Tomcat?
Ich versuchte, konfigurieren von load-time-weaving (für tun profiling mit Perf4J) in der folgenden Weise:
1) ich habe aop.xml
zu META-INF
Ordner. Wenn Sie eingesetzt werden, META-INF in der Artefakt-root-Verzeichnis (d.h. MyAppDeployed/META-INF
).
2) ich habe aspectjrt-1.6.1.jar
, aspectjweaver-1.6.1.jar
, commons-jexl-1.1.jar
, commons-logging.jar
zu den Tomcat/lib
Ordner (auf den ersten ich habe versucht MyAppDeployed/WEB-INF/libs
aber auch nicht funktioniert hat).
3) ich habe -javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar
an-VM-Optionen beim starten von Tomcat.
4) Meine 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>
Ich sehe keine Anzeichen dafür, dass load-time weaving geschieht. Weder Fehlermeldungen noch notwendigen Ergebnisse. Die einzige Fehlermeldung die ich habe ist:
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
in einem Fall, wenn ich einen Fehler in einem aspectjweaver-1.6.1.jar
Namen wenn geben Sie eine parameter-javaagent. Wenn es richtig geschrieben - kein Fehler-Meldungen ausgegeben werden.
Irgendwelche Ideen, was mache ich falsch?
P. S. ich verwende Java 5, und ich habe versucht, die gleichen Dinge mit 1.5.4
version von aspectj mit genau dem gleichen Ergebnis.
- Haben Sie jemals herauszufinden, dieses Problem? Ich bin versucht zu konfigurieren Aspectj + tomcat mit load-time weaving in Eclipse. Speziell ich bin versucht zu Weben, JSP ' s aber ich habe kein Glück.
- Ich habe eine ähnliche situation, aber es funktioniert, wenn sich die Anmerkung auf meine Umsetzung Klasse.Ist Ihr com.mypackages.MyClass eine Schnittstelle oder Umsetzung? Meine Aspekte waren nicht immer gesponnen, wenn ich die Anmerkung auf der Oberfläche. Auch eine weitere Sache, ich habe den aop.xml Datei unter ../webapps/MyAppDeployed/WEB-INF/classes/META-INF/aop.xml nicht sicher, ob das einen Unterschied macht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, verwenden Sie load-time weaving, können Sie die ersten kompilieren Ihrer Klassen mit javac wie gewohnt kompilieren Sie Ihre Aspekt(E) mit (i)ajc. Sie können dies tun, mit einem ant-task wie unten
Ist es genug, um aspectjrt.jar in den Klassenpfad ("master-classpath") während der Kompilierung.
Da alle meine Java-Klassen in ${src.dir}, gebe ich eine Quelle Liste iajc. Im Orderbuch gibt es nur eine Linie.
Quellen.lst
Ich einige iajc Aufgabe, die Attribute wie folgt
Wenn ich compile-Aspekt Aufgabe habe ich ein jar - jar_file_name.jar Datei enthält
Und schließlich fügen Sie die *jar_file_name.jar* um Ihre web-Anwendung WEB-INF/lib Ordner.
Dann starten Sie Tomcat mit -javaagents:/path_to_aspectjweaver.jar wie zuvor.
Wenn ich den aop.xml (oder aop-ajc.xml) in META-INF unter der war-Datei direkt funktioniert es nicht. Auf diese Weise (ich meine Trenn-Aspekt-Klassen in eine jar -) nur funktioniert gut für mich.
Hoffe, das hilft.
outxml="true"
beim Bau. Ohne diese, Sie haben nicht dieMETA-INF/aop-ajc.xml
dass die aspectjweaver nutzt, um zu wissen, was sind die Aspekte zu übernehmen.War ich versucht zu lösen, das gleiche Problem in Tomcat. Neben -javaagent option, die Sie benötigen, um sicherzustellen, dass die aop.xml muss unter WEB-INF/classes/META-INF-Verzeichnis. Dies machte den Unterschied für mich.