2009-07-29 4 views
5

Я пытаюсь вызвать метод MBean из веб-приложения из Tomcat. Целевой MBean работает под JBoss 4.2.3. Оба Tomcat и JBoss приложения используют ту же версию баночки с тем же классом, но на вызов я вижу следующее исключение:Сбой вызова удаленного JMX с ClassNotFoundException: ... (нет менеджера безопасности: загрузчик класса RMI отключен

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 отключен ». Но как изменить это поведение, чтобы использовать локальный уже загруженный класс. Или, может быть, я ошибаюсь в этом предположении ..?

ответ

0

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

1

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

Прочитайте этот ответ для получения более подробной информации: RMI Question - Where do clients get a definition for remote classes that have not been added to registry?

+0

Просто чтобы прояснить здесь для тех, кто читает этот пост; когда он говорит «скомпилируйте интерфейсы + классы как на клиенте, так и на сервере», убедитесь, что вы не используете один и тот же файл JAR для развертывания сервера и клиента. Для клиентов убедитесь, что вы компилируете только необходимые классы в JAR. –