J'ai besoin de votre aide autour de Java RMI, j'ai développé un exemple de programme utilisé pour trier les tables. mais j'ai eu cette exception:
Erreur RemoteException occurred in server thread; nested exception is:
Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
Java.lang.ClassNotFoundException: ServicesTableau
et voici le code source de mon serveur:
public class Serveur {
public static void main(String args[]) {
try {
System.out.println("Server start ...");
ServicesTableauImpl od = new ServicesTableauImpl();
String url = "rmi://" + args[0] + "/ServicesTableauImpl";
System.out.println("Passe");
Naming.rebind(url, od);
System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
} catch (Exception e) {
System.out.println("Erreur " + e.getMessage());
}
/*
catch(Java.net.MalformatedURLException e){
System.out.println("Mauvais nom de serveur");
System.exit(1);
}
catch(RemoteException e){
System.out.println("Pas de Rmiregistry");
System.exit(1);
}
*/
}
}
Cette classe n'est pas disponible sur le CLASSPATH du registre RMI. La solution la plus simple consiste à démarrer le registre dans la même machine virtuelle, via LocateRegistry.createRegistry().
. Stocker le résultat dans un champ statique.
Cela m'est arrivé parce que je n'ai pas exécuté rmiregistry
dans le même répertoire que le serveur.
Dans certains cas, vous devez déplacer le code de votre client rmi (interface et main) dans le package par défaut. Répétez-le pour le côté serveur. Cela peut résoudre votre problème (travailler avec l’emballage dans rmi n’est pas si évident).