gpt4 book ai didi

java - AspectJ LTW 无法与 JMX 远程配合使用

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:31 26 4
gpt4 key购买 nike

我尝试用简单的方面来做一个简单的项目(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。

为什么?

最佳答案

我终于找到了解决方案:我需要将“-Xbootclasspath/p:libs/aspectjweaver-1.7.3.jar;libs/aspectjrt-1.7.3.jar”添加到我的命令行中。

使用此选项,一切正常。

完整的命令行是:

java
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-Xbootclasspath/p:libs/aspectjweaver-1.7.3.jar;libs/aspectjrt-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Daj.weaving.verbose=true -Dorg.aspectj.weaver.showWeaveInfo=true
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App

感谢安迪·克莱门特的帮助

双线

关于java - AspectJ LTW 无法与 JMX 远程配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com