I've been trying that, but something is still not working right. The
individual module classloaders are not seeing the class as defined by my
startup string.
I'm staring WF using the following arguments:
-Djboss.modules.system.pkgs=org.jboss.byteman,org.aspectj,
test.aspectj,org.jboss.logmanager
-javaagent:c:/dev/tmp/jboss-eap-7.0.0/modules/system/
layers/base/org/aspectj/main/aspectjweaver-1.8.10.jar
-Dorg.aspectj.weaver.showWeaveInfo=true"
-Dorg.aspectj.weaver.loadtime.configuration=file:c:/tmp/poc/aop.xml
-cp C:/dev/Projects/jms/mixed-arch/ear-app/aspectj/target/
aspectj-0.0.1-SNAPSHOT.jar
But I get the following errors thrown my the AspectJ Weaver:
2017-10-26 12:11:39,889 ERROR [stderr] (MSC service thread 1-7)
[ModuleClassLoader@336f62a1] info register aspect test.aspectj.TestAspect
2017-10-26 12:11:54,632 ERROR [stderr] (MSC service thread 1-7)
[ModuleClassLoader@336f62a1] error The specified aspect
'test.aspectj.TestAspect' cannot be found
I've confirmed that my class (test.aspectj.TestAspect) is indeed in the
aspectj-0.0.1-SNAPSHOT.jar.
So I get the impression that the aspectj-SNAPSHOT jar is not being made
visible to the individual module classloaders. I've tried to debug the
weaver, and can see that it does indeed do the following:
private URL toURL(String className) {
URL url = (URL) nameMap.get(className);
if (url == null) {
String classFile = className.replace('.', '/');
url = loaderRef.getClassLoader().getResource(classFile + ".class");
nameMap.put(className, url);
}
return url;
}
where the loaderRef.getClassLoader() looks like it is the classloader that
is passed to the ClassFileTransformer.transform() method (
https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/
ClassFileTransformer.html).
I'm not sure where/how to go from here. Am I not passing the arguments
correctly? is the -cp not included in the classloader that is used by the
-javaagent/Instrumention? Where is the -Djboss.modules.system.pkgs used?
Thanks,
Eric
On Tue, Oct 24, 2017 at 2:31 PM, Stuart Douglas <stuart.w.douglas(a)gmail.com>
wrote:
Basically if the package name matches it just delegates to the
system
class loader, so if it is on the classpath or boot classpath it should be
found.
Stuart
On Tue, Oct 24, 2017 at 8:59 AM, Eric B <ebenzacar(a)gmail.com> wrote:
> Where does WF know where to find the corresponding jar that contains that
> package name? Does it take it from the jvm startup classpath parameters?
> Does it matter if it's -cp or -Xbootclasspath/a?
>
> Thanks
>
> Eric
>
> On Oct 23, 2017 3:07 PM, "Stuart Douglas"
<stuart.w.douglas(a)gmail.com>
> wrote:
>
>>
>>
>> On Tue, Oct 24, 2017 at 2:04 AM, Eric B <ebenzacar(a)gmail.com> wrote:
>>
>>> Thanks for the tips, but i'm still struggling with this. Here's
what
>>> I've done so far.
>>>
>>> I've added the module name under -Djboss.modules.system.pkgs and added
>>> it as a cp argument as :
>>>
>>
>> This is not a module name, but a package name. You should not be
>> creating a aspectj modules.
>>
>> Stuart
>>
>>
>>>
>>> -Djboss.modules.system.pkgs=org.jboss.byteman,org.aspectj,
>>> org.jboss.logmanager
>>> -classpath "D:\jboss-eap-7.0\modules\syst
>>> em\layers\base\org\aspectj\main\aspectj-0.0.1-SNAPSHOT.jar"
>>>
>>> My org.aspectj module is defined as:
>>>
>>> <module xmlns="urn:jboss:module:1.3"
name="org.aspectj">
>>> <resources>
>>> <resource-root path="aspectjweaver-1.8.10.jar"/>
>>> <resource-root path="aspectj-0.0.1-SNAPSHOT.jar"/>
>>> </resources>
>>> </module>
>>>
>>>
>>>
>>> Now when I start Wildfly, I still don't see it trying to weave any of
>>> the base Wildfly/undertow modules. If I define the org.aspectj as a
>>> global module in the standalone.xml, the I see the weaver attempting to
>>> weave my application deployment but none of the base WF classes.
>>>
>>> Does the jboss.modules.system.pkgs argument relate to the module name
>>> or to the package naming of the libraries? ie: do my aspects in
>>> aspectj-0.0.1-SNAPSHOT.jar also have to be in an 'org.aspectj' java
>>> package or am I free to use any package naming structure I want as long as
>>> they are part of the org.aspectj WF module definition? My aspect is
>>> actually in a test package called "aspectj". I even tried added
"aspectj"
>>> to the jboss.modules.system.pkgs variable, but to no avail.
>>>
>>> How does WF know where to find classes/packages defined in
>>> 'jboss.modules.system.pkgs'?
>>>
>>> Thanks,
>>>
>>> Eric
>>>
>>>
>>>
>>>
>>> On Sun, Oct 22, 2017 at 7:09 PM, Stuart Douglas <
>>> stuart.w.douglas(a)gmail.com> wrote:
>>>
>>>> I think you probably want to modify the classpath and also
>>>> add -Djboss.modules.system.pkgs=org.aspectj (or whatever package
>>>> aspectj classes are under). This system property is a comma separated
list
>>>> of non-modular packages that JBoss modules will just pass straight
through
>>>> to the system class loader.
>>>>
>>>> Stuart
>>>>
>>>> On Sat, Oct 21, 2017 at 1:29 AM, Eric B <ebenzacar(a)gmail.com>
wrote:
>>>>
>>>>> I'm trying to use AspectJ to advise some core classes in
>>>>> Wildfly/undertow. Specifically, I'm trying to advise some of the
Undertow
>>>>> HttpSession methods to get some more detailed logging when Sessions
are
>>>>> created/expire/etc.
>>>>>
>>>>> I've added AspectJ as a -javaagent which is launched on startup
of
>>>>> Wildfly. I had to follow some of the steps listed at:
>>>>>
https://github.com/ChienChingLee/How-to-launch-Wildfly-9
>>>>> .0-with-AspectJ-1.8-LTW. But it works; I can see that the AJ weaver
>>>>> is loaded and present.
>>>>>
>>>>> My problem now is that I don't know where to put my jar of
aspects
>>>>> for it to be loaded/visible by the weaver for all modules. I've
managed to
>>>>> get it to work by modifying the io.undertow.servlet module, adding my
jar
>>>>> in the folder and modifying the module.xml, but that only advises
the
>>>>> io.undertow.servlet.* classes. And it seems like quite an ugly hack
to get
>>>>> to that.
>>>>>
>>>>> I tried creating an independent module for it, and declaring it as a
>>>>> global module in my standalone.xml, but that didn't seem to work.
Nor did
>>>>> modifying the servlet module.xml and specifying my module as a
dependency.
>>>>>
>>>>> I tried to add it to the startup parameters in the standalone.conf
>>>>> file, specifying it as -classpath path/to/myaspect.jar, but that
only
>>>>> advised the startup WF (org.jboss) classes and none of the modules.
>>>>>
>>>>> At the moment, I'm looking to advise any implementation of
>>>>> javax.servlet.http.HttpSession.invalidate(). In AJ language, the
>>>>> pointcut is simple: execution(*
javax.servlet.http.HttpSession+.invalidate(..))
>>>>> will match any implementation of the HttpSession interface. However,
to
>>>>> make it active, I need to get that Aspect in the classpath of every
module
>>>>> loaded and visible to the AJ weaver.
>>>>>
>>>>> Is there a "generic" place I can declare the the
aspects.jar so that
>>>>> it is part of the classpath of every module loaded or is my only
choice to
>>>>> modify every module.xml in the system?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Eric
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> wildfly-dev mailing list
>>>>> wildfly-dev(a)lists.jboss.org
>>>>>
https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>>>>
>>>>
>>>>
>>>
>>