7.3.1. Ant target for running load-time instrumentation using specialized class loader
Below is the code snippet for the Ant target that is doing loadtime instrumentation through a special classloader. Basically, the Ant target one.test.aop using the bootclass loader generated by the Ant target generateClassLoader to run an individual test. Note that since JBossAop 1.3, a new GenerateInstrumentedClassLoader has been used since the previous SystemClassLoader is error prone.
<target name="generateClassLoader" description=
"Generate a new modified class loader so we can perform load time instrumentation">
<property name="build.bootclasspath" value="${output}/gen-bootclasspath"/>
<java classname="org.jboss.aop.hook.GenerateInstrumentedClassLoader">
<classpath>
<path refid="aop.classpath"/>
</classpath>
<arg value="${build.bootclasspath}"/>
</java>
<path id="bootclasspath">
<pathelement location="${build.bootclasspath}"/>
<path refid="aop.classpath"/>
</path>
<property name="bootclasspath" refid="bootclasspath"/>
</target>
<!-- eg. ant run.examples -Dtest=org.jboss.test.cache.test.local.NoTxUnitTestCase -->
<target name="one.test.aop" depends="compile, generateClassLoader"
description="run one junit test case.">
<junit printsummary="yes" timeout="${junit.timeout}" fork="yes">
<jvmarg value="-Djboss.aop.path=${output}/etc/META-INF/jboss-aop.xml"/>
<jvmarg value="-Xbootclasspath/p:${bootclasspath}"/>
<!-- jvmarg value="-Dbind.address=${bind.address}"/ -->
<classpath path="${output}/etc" />
<sysproperty key="log4j.configuration" value="file:${output}/etc/log4j.xml" />
<classpath refid="lib.classpath"/>
<classpath path="${build}"/>
<formatter type="xml" usefile="true"/>
<test name="${test}" todir="${reports}"/>
</junit>
</target>
If you are running JDK5.0, you can also use the javaagent option that does not require a separate Classloader. Here are the ant snippet from one-test-aop50, for example.
<target name="one.test.aop50" depends="compile, generateClassLoader"
description="run one junit test case.">
<junit printsummary="yes" timeout="${junit.timeout}" fork="yes">
<jvmarg value="-Djboss.aop.path=${output}/resources/jboss-aop.xml"/>
<jvmarg value="-javaagent:${lib-50}/jboss-aop-jdk50.jar"/>
<classpath path="${output}/etc" />
<sysproperty key="log4j.configuration" value="file:${output}/etc/log4j.xml" />
<classpath refid="lib.classpath.50"/>
<classpath refid="build.classpath.50"/>
<formatter type="xml" usefile="true"/>
<test name="${test}" todir="${reports}"/>
</junit>
</target>