java.rmi.ServerException: une exception RemoteException s’est produite dans le thread du serveur (ClassNotFoundException)

La méthode suivante:

private void startServer() { // snippet that starts the server on the local machine try { RemoteMethodImpl impl = new RemoteMethodImpl(); Naming.rebind( "Illusive-Server" , impl ); }catch(Exception exc) { JOptionPane.showMessageDialog(this, "Problem starting the server", "Error", JOptionPane.ERROR_MESSAGE); System.out.println(exc); } } 

lève cette exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf exception java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf

Quand je commence mon projet, je suis accueilli avec le message dans JOptionPane qui dit que le problème pour démarrer le serveur et ensuite l’exception ci-dessus. Quelle pourrait en être la raison ?

Je ne comprends pas pourquoi la dernière déclaration d’exception indique que la classe n’a pas été trouvée exc lorsque j’ai importé les bons packages

Il existe trois cas de cette exception.

  1. Lors de l’exportation: vous n’avez pas lancé ‘rmic’ et vous n’avez pas suivi les étapes décrites dans le préambule du Javadoc pour UnicastRemoteObject pour le rendre inutile.

  2. Lors de la liaison: le registre ne dispose pas du stub, de l’interface distante ou de quelque chose dont ils dépendent dépend de son chemin de classe.

  3. en levant les yeux: le client n’a pas ces choses sur son classpath.

C’est le cas 2. Le registre ne peut pas trouver la classe nommée.

Il y a quatre solutions:

  1. Démarrez le registre avec un CLASSPATH incluant les fichiers JAR ou les répertoires pertinents.

  2. Démarrez le registre dans la machine LocateRegistry.createRegistry(). votre serveur, via LocateRegistry.createRegistry().

  3. Utilisez des stubs dynamics, comme décrit dans le préambule de la Javadoc de UnicastRemoteObject. Cependant, vous pouvez toujours rencontrer le même problème avec l’interface distante elle-même ou une classe dont elle dépend, auquel cas les cas 1 à 3 ci-dessus s’appliquent toujours à cette classe / ces classes.

  4. Utilisez la fonction codebase. C’est vraiment une option de déploiement et, à notre connaissance, quelque chose à éviter dès la phase de développement initiale.

 Remote Server Error:RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: mathInterface 

L’erreur très simple à résoudre consiste à effectuer les étapes suivantes:

  • Par exemple, votre fichier java considère le lecteur D
  • Démarrez le lecteur rmiregistry D (exemple D: \ start rmiregistry) puis ne démarrez pas la chimie sur les autres lecteurs, cela produira l’erreur ci-dessus.

(Où que se trouve votre fichier, démarrez la rmiregistry )

Vous pouvez lancer rmiregistry à partir de n’importe où mais vous devez vous assurer que les classes compilées sont déjà dans votre chemin de classe. Par exemple:-

 E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>set classpath=%classpath%;E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes  E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>c:  C:\>rmiregistry 

Et ce qui précède devrait bien fonctionner.

En général, si vous lancez rmiregistry à partir de l’emplacement racine des classes compilées (par exemple, il s’agit de E: \ ARMSRemoteUpdater \ WebContent \ WEB-INF \ classes), cela fonctionnera car. (point – répertoire actuel) est déjà défini dans votre chemin de classe.

Mais dès que vous enlevez. (point – répertoire courant) de votre chemin de classe, la condition de travail ci-dessus va également échouer.

J’espère avoir expliqué en détail.