J'écris une application rmi. Tout fonctionne parfaitement bien quand je mets toutes les classes dans un seul répertoire. Cependant, lorsque j'essaie de diviser la partie serveur et la partie client, elle soulève java.lang.ClassNotFoundException.myclasses Il semble que le registre ne trouve pas cette classe sur son CLASSPATH. Je me demande comment résoudre ce problème?java rmi exceptions
Répondre
Spécifiez-vous les répertoires classpath dans les arguments du client et du serveur?
du tutoriel:
serveur
Sur le système d'exploitation Solaris:
java -classpath classDir -Djava.rmi.server.codebase = fichier: classDir/example.hello. serveur &
Sur les plateformes Windows:
début JAV un -classpath classDir -Djava.rmi.server.codebase = fichier: classDir/example.hello.Server
Une fois que le serveur est prêt, le client peut être exécuté comme suit:
java -classpath exemple classDir. hello.Client où classDir est le répertoire racine de l'arborescence des fichiers de classe
http://java.sun.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html#5
Le registre est là pour relier les interfaces client avec leurs classes d'implémentation de serveur. Sur le client, vous devrez avoir les définitions de classe d'interface sur le chemin de classe.
De même, le client ne devrait pas du tout référencer la classe d'implémentation - tout devrait être dans la classe interface/stub.
Si cela ne répond pas à votre question, vous devrez être plus précis et fournir au moins du code.
Non. le Registre est là pour lier des noms avec des talons. Il ne sait rien sur les classes de mise en œuvre que ce soit. Mais pour contenir une instance du stub, il a besoin de cette classe dans son CLASSPATH et de chaque classe d'application dont dépend le stub. – EJP
il résout le problème. Cependant, j'ai un problème similaire lors de l'exécution du client. Exception dans le thread "principal" java.rmi.ServerException: RemoteException s'est produite dans le thread du serveur; l'exception imbriquée est: \t java.rmi.UnmarshalException: erreur unmarshalling arguments; exception imbriquée est: \t java.lang.ClassNotFoundException: com.v3q6.ClientBootstrap.ClientImpl_Stub (pas responsable de la sécurité: RMI classe chargeur désactivé) \t à sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:353) . .. ... La raison est probablement que j'ai utilisé "UnicastRemoteObject.exportObject (client);" Avez-vous des idées à ce sujet? –
Vous avez probablement besoin d'exécuter à nouveau rmic pour générer les stubs. – UberAlex