2013-07-22 3 views
1

Я попытался сделать простой проект (мир привет) с простым аспектом. Я использую 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.

Почему?

ответ

1

я, наконец, нашел решение: мне нужно добавить «-Xbootclasspath/р: ЛИЭС/aspectjweaver-1.7.3.jar; ЛИЭС/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 

Благодаря Энди Климента за помощь

Tugdual

+2

Это решение только обходной путь. Эта ошибка была решена в AspectJ 1.7.4: [Сведения об ошибке] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=415266) – Tugdual

Смежные вопросы