JBoss.org Community Documentation
This section describes how to use loadtime instrumentation of classes with aop. The
classes themselves are just compiled using Java, but are not precompiled with the aop
precompiler.
In the examples given
if your classes are contained in a jar with a META-INF/jboss-aop.xml file, you
would omit the
-Djboss.aop.path
system property.
The JVM has a pluggable way of defining a class transformer via the
java.lang.instrument
package. JBoss AOP uses this mechanism to weave aspects at class load time.
Using loadtime weaving is really easy. All you have to do is define an additional standard switch
on the Java command line.
-javaagent:jboss-aop.jar
.
Here's how run an AOP application with loadtime instrumentation,
where your jboss-aop.xml file is not part of a jar:
$ java -cp=<classpath as described above> -Djboss.aop.path=<path to jboss-aop.xml> \ -javaagent:jboss-aop.jar com.blah.MyMainClass
And to run an AOP application with loadtime instrumentation, where your application contains a jar with a META-INF/jboss-aop.xml file:
$ java -cp=<classpath as described above> -javaagent:jboss-aop.jar \ com.blah.MyMainClass
In the /bin folder of the distribution we have provided batch/script files to make this easier. It includes all the aop libs for you, so you just have to worry about your files. The usage:
$ run-load classpath [-aoppath path_to_aop.xml] [-aopclasspath path_to_annotated] \ com.blah.MyMainClass [args...]
The parameters have the same meaning as for the run-precompiled scripts.
If you invoke the previous
java
examples with ant, by using
the ant
java
task, make sure that you set
fork="true"
in the ant
java
task. Failure
to do so, causes the
java
task to execute in the same VM
as ant which is already running. This means that the special classloader used to
do the loadtime transformations does not replace the standard one, so no
instrumentation takes place.