Hi Michael,
Did you compile the aspect or just put the
source in that directory? With load-time weaving, you still need to compile your
aspects into bytecode, but you don’t need to “weave” with the
classes at build-time. Try compiling your aspect and putting the result in the
same directory, e.g.,
cd WEB-INF\classes
ajc com\test\MyAspect.aj
(of course for production use, I’d
recommend compiling with an ant task and deploying this class file with the
rest of your application…)
From:
aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Michael Kantarovich
Sent: Monday, November 07, 2005
8:36 AM
To: aspectj-users@xxxxxxxxxxx
Subject: [aspectj-users] @missing@
exception while using LTW.
Hi
everybody!
I'm
using aspectj M4 version and
trying to enable load-time weaving for my application. The application is web
application.
I
have created aop.xml under WEB-INF/classes/META-INF.
Here
is the file:
<aspectj>
<aspects>
<aspect
name="com.test.MyAspect"/>
</aspects>
<weaver options="-XlazyTjp -showWeaveInfo">
<include
within="com.test.*"/>
</weaver>
</aspectj>
I'm
using weaving agent through the JVMTI.
The
trouble is that weaver is unable to find MyAspect, although it's present in
directory WEB-INF/classes/com/test.
If
I understand correct, I just have to place .aj file in the classpath of my
application, and to declare it in aop.xml … So what can be wrong?
Here is the stack trace:
warning
Register definition failed -- (RuntimeException) Cannot register non aspect:
@missing@ , com.test.MyAspect
Cannot
register non aspect: @missing@ , com.test.MyAspect
java.lang.RuntimeException:
Cannot register non aspect: @missing@ , com.test.MyAspect
at
org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect(BcelWeaver.java:174)
at
org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:278)
at
org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:166)
at
org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:114)
at
org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:129)
at
org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:134)
at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:100)
at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:65)
at
org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:52)
at
sun.instrument.TransformerManager.transform(TransformerManager.java:122)
at
sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at
sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at
sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
at
sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:76)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:30)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
….
Thanks
a lot!
Misha.