2009-07-29 12 views
5

Intento invocar el método de MBean desde la aplicación web de Tomcat. Target MBean se ejecuta bajo JBoss 4.2.3. Tomcat y JBoss aplicaciones utilizan la misma versión del frasco con la misma clase, pero en la invocación que ver la siguiente excepción:Error en la invocación JMX remota con ClassNotFoundException: ... (no security manager: cargador de clase RMI deshabilitado

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 

Creo que JBoss no utiliza propia clase, pero intenta descargar esta clase de alguna parte y no con " no hay administrador de seguridad: cargador de clase RMI deshabilitado ". Pero cómo cambiar este comportamiento para usar la clase local ya cargada. O tal vez me equivoco en esta conjetura ...?

Respuesta

0

proporcionó la propiedad -Djava.rmi.server.codebase mientras se ejecutaba el servidor. Incluya esta propiedad y debería funcionar.

1

La carga de clases dinámicas con la propiedad -Djava.rmi.server.codebase rara vez es realmente necesaria, es mucho más simple compilar las interfaces más cualquier implementación de clase serializada tanto en el cliente como en el servidor.

Leer esta respuesta para más detalles: RMI Question - Where do clients get a definition for remote classes that have not been added to registry?

+0

Solo para aclarar aquí para cualquiera que lea este post; cuando dice "compilar las interfaces + clases en el cliente y el servidor", asegúrese de no terminar utilizando el mismo archivo JAR para las implementaciones del servidor y del cliente. Para los clientes, asegúrese de compilar solo las clases requeridas en el JAR provisto. –

Cuestiones relacionadas