2009-07-29 8 views
5

Provo a richiamare il metodo di MBean dall'applicazione Web di Tomcat. Target MBean è in esecuzione in JBoss 4.2.3. Sia Tomcat che JBoss applicazioni utilizzano la stessa versione di vaso con la stessa classe, ma su come richiamare vedo la seguente eccezione:Invocazione JMX remota non riuscita con ClassNotFoundException: ... (nessun gestore sicurezza: loader classe RMI disabilitato

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 

Penso che JBoss non usa propria classe ma cercare di scaricare questa classe da qualche parte e non riesce con " nessun gestore di sicurezza: RMI class loader disabilitato. "Ma come modificare questo comportamento per utilizzare la classe già caricata locale o forse mi sbaglio in questa ipotesi ..?

risposta

0

hai fornito la proprietà -Djava.rmi.server.codebase mentre esegui il server.include questa proprietà e dovrebbe funzionare.

1

Il caricamento dinamico della classe con la proprietà -Djava.rmi.server.codebase è raramente effettivamente necessario, è molto più semplice compilare semplicemente le interfacce e tutte le implementazioni di classi serializzate sia nel client che nel server.

leggere questa risposta per maggiori dettagli: RMI Question - Where do clients get a definition for remote classes that have not been added to registry?

+0

Giusto per chiarire qui per chiunque legga questo post; quando dice "compila le interfacce + classi in client e server", assicurati di non utilizzare lo stesso file JAR per le distribuzioni sia del server che del client. Per i clienti assicurati di compilare solo le classi richieste nel JAR fornito. –

Problemi correlati