Bonjour,
Je fais un petit programme utilisant le RMI. Je crée mon serveur qui implémente une interface je me suis basé sur le turorial de sun. Mais j'ai des exceptions du type ClassNotFound, il y a dans la FAQ des éléments de réponse mais je ne suis arrivé à rien, apparemment c'est un problème de classpath mais je n'y connais pas beaucoup(pour ne pas dire pas du tout).
import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class Serveur implements InterfaceExec {
private ListePeople personne = new ListePeople();
private static int PORT = 65533;
public Serveur () throws RemoteException {}
public static void main(String[] args) {
try {
Serveur serveur = new Serveur();
InterfaceExec stub = (InterfaceExec) UnicastRemoteObject.exportObject(serveur, 0);
Registry registry = LocateRegistry.getRegistry();
System.out.println("salut3");
registry.bind("Hello", stub); // Là il plante.
System.out.println("Serveur bindé");
} catch (Exception e) {
System.err.println("Serveur exception: " +
e.getMessage());
e.printStackTrace(); // track
}
}
}
J'ai enlevé les méthodes de l'InterfaceExec qui sont implémentées car ce n'est pas où réside le problème.
L'interface :
import java.net.InetAddress;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface InterfaceExec extends Remote {
Object donneListe() throws RemoteException ;
Object recherche(String date, String nom, String mot) throws RemoteException;
int addLogin(InetAddress Ip, String log) throws RemoteException;
void delLogin (int indice) throws RemoteException;
void talkTo (Echange echange) throws RemoteException;
void addSomeone (Echange echange) throws RemoteException;
}
J'obtiens au lancement du serveur (je lance bien le rmiregistry avant en spécifiant 1099 comme port).
Je travaille avec la jdk 1.5 donc je n'ai pas à faire de rmic.
salut3
Serveur exception: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: InterfaceExec
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: InterfaceExec
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at Serveur.main(Serveur.java:67)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: InterfaceExec
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: InterfaceExec
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1494)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
... 9 more
Je ne comprends pas pourquoi j'ai ce problème car je fais pareil que dans le tutorial de sun pour le RMI qui de toute manière me renvoit le même type d'exceptionalos que ce tutorial marche sur d'autres PCs mais toujouts pas mon programme.
Merci d'avance pour vos explications![]()
Ramyn
Partager