我试图用一个简单的方面做一个简单的项目(hello world)。我使用 Maven 构建这个项目,LTW 用于方面,logback 用于日志。当我使用时编织方面:
"C:\Program Files\Java\jdk1.6.0_22\bin\java"
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Daj.weaving.verbose=true
-Dorg.aspectj.weaver.showWeaveInfo=true
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App
但是当我为 JMX 添加参数时,不再编织方面:
"C:\Program Files\Java\jdk1.6.0_22\bin\java"
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Daj.weaving.verbose=true
-Dorg.aspectj.weaver.showWeaveInfo=true
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App
我不知道发生了什么,如果你们中的任何人可以帮助我。
我添加的 JMX 远程选项是:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
注意:我尝试了一个 OSGI 应用程序(Equinox),它在 JMX 的这个参数上工作得很好,但我真的需要一个常规的 Java 应用程序。
编辑 1
我添加了一个 Java 代理来检查类加载器。
当我激活 JMX 远程时,类加载器层次结构是(containsConfiguration 表示 Aspectj 配置由 java.lang.ClassLoader.getResource(String) 找到):
- root
- AdaptorKey [sysHashCode=1672527304, loaderClass=javax.management.remote.rmi.NoCallStackClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=1040288884, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=239625678, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=1818873899, loaderClass=javax.management.remote.rmi.NoCallStackClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=527532737, loaderClass=sun.misc.Launcher$ExtClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=132787710, loaderClass=sun.misc.Launcher$AppClassLoader, containsConfiguration=true, hasParent=true]
- AdaptorKey [sysHashCode=426901684, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
如果没有激活 JMX 远程,类加载器层次结构是:
- root
- AdaptorKey [sysHashCode=527532737, loaderClass=sun.misc.Launcher$ExtClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=132787710, loaderClass=sun.misc.Launcher$AppClassLoader, containsConfiguration=true, hasParent=true]
有了这个结果……我还是不明白发生了什么。配置是由我的代理找到的,但不是由 Aspectj 找到的……
在日志中,我看到 AspectJ 除了 javax.management.remote.rmi.NoCallStackClassLoader 之外没有注册其他类加载器。
为什么?