Я попытался сделать простой проект (мир привет) с простым аспектом. Я использую Maven для создания этого проекта, LTW для аспект, logback для журналов. аспект соткан когда я использую:AspectJ LTW не работает с удаленным 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
-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
NB: Я пытался для приложения OSGI (равноденствия) и она отлично работает с этими параметрами для JMX, но мне действительно нужно для обычного приложения Java ,
Edit 1
Я добавил Java Agent для проверки загрузчиков классов.
Когда я активировать 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]
Whithout 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.
Почему?
Это решение только обходной путь. Эта ошибка была решена в AspectJ 1.7.4: [Сведения об ошибке] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=415266) – Tugdual