2009-07-29 9 views
5

J'essaie d'appeler la méthode de MBean à partir de l'application web de Tomcat.Cible MBean est exécuté sous JBoss 4.2.3. applications utilisent la même version du pot avec la même classe, mais je vois invoquer l'exception suivante:L'invocation JMX distante a échoué avec ClassNotFoundException: ... (pas de gestionnaire de sécurité: chargeur de classe RMI désactivé

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 

Je pense que JBoss n'utilise pas propre classe, mais essayez de télécharger cette classe de quelque part et échoue avec " pas de gestionnaire de sécurité: RMI loader de classe désactivé. »Mais comment changer ce comportement pour utiliser la classe locale déjà chargée, ou peut-être que je me trompe dans cette supposition ..?

Répondre

0

avez-vous fourni la propriété -Djava.rmi.server.codebase lors de l'exécution du serveur. Incluez cette propriété et cela devrait fonctionner.

1

Le chargement dynamique de classe avec la propriété -Djava.rmi.server.codebase est rarement nécessaire, il est beaucoup plus simple de compiler uniquement les interfaces plus toutes les implémentations de classes sérialisées dans le client et le serveur.

Lire cette réponse pour plus de détails: RMI Question - Where do clients get a definition for remote classes that have not been added to registry?

+0

Juste pour préciser ici pour tous ceux qui lisent ce post; quand il est dit "compilez les interfaces + classes dans le client et le serveur", assurez-vous de ne pas utiliser le même fichier JAR pour vos déploiements serveur et client. Pour les clients, assurez-vous de ne compiler que les classes requises dans le fichier JAR fourni. –

Questions connexes