Удаленный вызов JMX не выполнен с ClassNotFoundException: ... (нет менеджера безопасности: загрузчик класса RMI отключен - PullRequest
5 голосов
/ 29 июля 2009

Я пытаюсь вызвать метод MBean из веб-приложения от Tomcat. Целевой MBean работает под JBoss 4.2.3. И приложения Tomcat, и JBoss используют одну и ту же версию jar с одним и тем же классом, но при вызове я вижу следующее исключение:

Caused by: java.lang.ClassNotFoundException: ...thisClass... (no security manager: RMI class loader disabled)
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:375)
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
    at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
    at org.jboss.system.JBossRMIClassLoader.loadClass(JBossRMIClassLoader.java:91)
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
    at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.util.ArrayList.readObject(ArrayList.java:593)
    at sun.reflect.GeneratedMethodAccessor164.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.util.HashMap.readObject(HashMap.java:1030)
    at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.rmi.MarshalledObject.get(MarshalledObject.java:142)
    at javax.management.remote.rmi.RMIConnectionImpl$6.run(RMIConnectionImpl.java:1513)
    ... 20 more

Я думаю, что JBoss не использует свой собственный класс, но пытается загрузить этот класс откуда-то и завершается неудачно с «без менеджера безопасности: загрузчик класса RMI отключен». Но как изменить это поведение, чтобы использовать локальный уже загруженный класс. Или, возможно, я ошибаюсь в этом предположении ..?

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Динамическая загрузка классов с помощью свойства -Djava.rmi.server.codebase редко требуется на самом деле, гораздо проще просто скомпилировать интерфейсы и любые реализации сериализованных классов как на клиенте, так и на сервере.

Прочтите этот ответ для более подробной информации: RMI Вопрос. Где клиенты получают определение для удаленных классов, которые не были добавлены в реестр?

0 голосов
/ 31 июля 2009

вы указали свойство -Djava.rmi.server.codebase при запуске сервера. Включите это свойство, и оно должно работать.

...