> I fail to understand how/why the Felix classloader would be able to find
the aop.xml in the classpath, but not the com.ia.UseProfiler aspect.
I know exactly what you mean, but I have seen classloaders that filter on
the kind of thing you are looking for. If I call
getResourceAsStream("META-INF/aop.xml") they let it through, if I call
getResourceAsStream("com.ia.UseProfiler.class") they say I can't have it
because it is a class file.
cheers,
Andy
On 30 July 2013 17:59, Eric Benzacar <[email protected]> wrote:
> Hi
>
> [ModuleClassLoader@4e730222] info register classloader
>> org.apache.felix.framework.ModuleImpl$ModuleClassLoader@4e730222
>> [ModuleClassLoader@4e730222] info using configuration
>> file:/Library/Tomcat/apache-tomcat-6.0.35-jira/webapps/jira/WEB-INF/lib/ia-aspects-0.0.1-SNAPSHOT.jar!/META-INF/aop.xml
>> [ModuleClassLoader@4e730222] info register aspect com.ia.UseProfiler
>> Jul 29, 2013 1:48:25 PM org.aspectj.weaver.tools.Jdk14Trace error
>> SEVERE: register definition failed
>> java.lang.RuntimeException: Cannot register non aspect:
>> com$ia$UseProfiler , com.ia.UseProfiler
>>
>> implies that the com.ia.UseProfiler aspect couldn't be found. AspectJ
>> isn't trying anything magic, it is using the classloader
>> getResource()/getResourceAsStream() type operations to access the aop.xml
>> and the class files (for the aspect).
>>
>
> On one hand, the explanation makes sense as it seems (I do not know the
> app very well), that the Felix classloader is being used to load OSGi
> plugins from a specific path (outside the app's WEB-INF/lib). However, if
> that is the case, how is it finding the aop.xml? Or is that being
> inherited from the parent classloader? Otherwise, I fail to understand
> how/why the Felix classloader would be able to find the aop.xml in the
> classpath, but not the com.ia.UseProfiler aspect.
>
> Does that felix classloader offer any extra configuration options?
>>
>
> I know very little about Felix, or how it is configured. In fact, until I
> saw thre error, I did not even know that Felix was being used.
>
> Does that just mean you don't have the source? If you have access to the
>> classes you could just binary weave the aspect into the jars before you
>> start it (no source code for the app required):
>>
>> ajc -inpath inputjar.jar UseProfiler.aj -outjar wovenjar.jar
>>
>> This means you don't need any LTW and don't need to worry about funky
>> classloaders.
>>
>
> A valid point/option, but the app validates checksums of its jars before
> running, so that would cause a warning and/or a failure.
>
> Thanks,
>
> Eric
>
>
>> On 29 July 2013 11:07, Eric B <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I'm trying to wrap a LTW aspect around a third-party webapp to do some
>>> debugging/profiling. I have no access to change/modify the code, but at
>>> least I was hoping to see where/why some things were happening. The
>>> webapp is running under a Tomcat 6.0.35 server.
>>>
>>> I tried to write up a small, very innocuous aspect (ie: just prints the
>>> name of the method that is being executed) and tested it out with a
>>> HelloWorld servlet/webapp . Everything worked as expected.
>>>
>>> When I tried to use it with the third-party app, things seem to be
>>> working properly at first:
>>> <catalina.out snip>
>>> WebappClassLoader@1c23f1bb] info AspectJ Weaver Version 1.7.3 built on
>>> Thursday Jun 13, 2013 at 19:41:31 GMT
>>> [WebappClassLoader@1c23f1bb] info register classloader
>>> org.apache.catalina.loader.WebappClassLoader@1c23f1bb
>>> [WebappClassLoader@1c23f1bb] info using configuration
>>> file:/Library/Tomcat/apache-tomcat-6.0.35-jira/webapps/jira/WEB-INF/lib/ia-aspects-0.0.1-SNAPSHOT.jar!/META-INF/aop.xml
>>> [WebappClassLoader@1c23f1bb] info register aspect com.ia.UseProfiler
>>> ....
>>> [WebappClassLoader@1c23f1bb] weaveinfo Join point 'method-execution(int
>>> com.credo.linker.user.util.DefaultUserManager.getTotalUserCount())' in Type
>>> 'com.credo.linker.user.util.DefaultUserManager'
>>> (DefaultUserManager.java:81) advised by after advice from
>>> 'com.ia.UseProfiler' (UseProfiler.aj:20)
>>> [WebappClassLoader@1c23f1bb] weaveinfo Join point
>>> 'method-execution(java.util.Collection
>>> com.credo.linker.user.util.DefaultUserManager.getUsers())' in Type
>>> 'com.credo.linker.user.util.DefaultUserManager'
>>> (DefaultUserManager.java:88) advised by after advice from
>>> 'com.ia.UseProfiler' (UseProfiler.aj:20)
>>> </snip>
>>>
>>>
>>> However, shortly after, I see the following show up in catalina.out:
>>> [ModuleClassLoader@4e730222] info AspectJ Weaver Version 1.7.3 built on
>>> Thursday Jun 13, 2013 at 19:41:31 GMT
>>> [ModuleClassLoader@4e730222] info register classloader
>>> org.apache.felix.framework.ModuleImpl$ModuleClassLoader@4e730222
>>> [ModuleClassLoader@4e730222] info using configuration
>>> file:/Library/Tomcat/apache-tomcat-6.0.35-jira/webapps/jira/WEB-INF/lib/ia-aspects-0.0.1-SNAPSHOT.jar!/META-INF/aop.xml
>>> [ModuleClassLoader@4e730222] info register aspect com.ia.UseProfiler
>>> Jul 29, 2013 1:48:25 PM org.aspectj.weaver.tools.Jdk14Trace error
>>> SEVERE: register definition failed
>>> java.lang.RuntimeException: Cannot register non aspect:
>>> com$ia$UseProfiler , com.ia.UseProfiler
>>> at
>>> org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect(BcelWeaver.java:221)
>>> at
>>> org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:478)
>>> at
>>> org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:303)
>>> at
>>> org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:170)
>>> at
>>> org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:313)
>>> at
>>> org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:318)
>>> at
>>> org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:292)
>>> at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:103)
>>> at
>>> org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
>>> at
>>> sun.instrument.TransformerManager.transform(TransformerManager.java:169)
>>> at
>>> sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>> at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>>> at
>>> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.findClass(ModuleImpl.java:1829)
>>> at
>>> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:716)
>>> at org.apache.felix.framework.ModuleImpl.access$200(ModuleImpl.java:73)
>>> at
>>> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1690)
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>>> at
>>> org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:634)
>>> at
>>> org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3653)
>>> at org.apache.felix.framework.Felix.activateBundle(Felix.java:1812)
>>> at org.apache.felix.framework.Felix.startBundle(Felix.java:1734)
>>> at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1143)
>>> at
>>> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
>>> at java.lang.Thread.run(Thread.java:680)
>>>
>>>
>>> I'm not entirely sure what is happening, but it appears that the webapp
>>> is loading its own classloader (Felix) for use in the application, and that
>>> the Felix classloader does not know how to register the aspects.
>>>
>>> I am starting tomcat with -javaagent:/path/to/aspectjweaver-1.7.3.jar
>>>
>>> Is this a class loader issue in which the Felix classloader does not
>>> have access to the aspectjweaver classes?
>>> How do I get around the problem?
>>>
>>> My aop.xml is pretty mundane as well:
>>> <aspectj>
>>> <weaver options="-verbose -showWeaveInfo">
>>> <include within="com.credo.linker.user.*"/>
>>> </weaver>
>>>
>>> <aspects>
>>> <aspect name="com.ia. UseProfiler"/>
>>> </aspects>
>>> </aspectj>
>>>
>>>
>>> Thanks!
>>>
>>> Eric
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> [email protected]
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users