RMI - Passer un objet Remote en paramètre d'une méthode

Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
-
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019
-
Bonjour,

Je suis débutant en RMI java.
Après avoir consulté de nombreux tutos, je n'ai trouvé nul part ma réponse.

J'ai un Serveur et un Client.
Le Serveur a deux classes : User et Note
J'ai créé toutes les interfaces et classes nécessaires.

Le client récupère les références d'un User et d'une Note.

User user = (User) Naming.lookup("rmi://localhost:2048/user");
Note note = (Note)Naming.lookup("rmi://localhost:2048/note");

Le client peut appeler des méthodes sur User et Note, tout ceci fonctionne, par exemple :

note.setTitre("mon titre");
user.setPrenom("toto");

Par contre, à un moment, le Client doit appeler une méthode de ce genre :

user.add(note)

Et là ça plante, j'ai cette erreur :

Erreur : java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote object

Je pense que c'est parce-que je passe l'objet note en paramètre, qui est lui même un objet distant..

J'ai vu à des endroits qu'il fallait implémenter "Serializable", mais ça ne marche pas, toujours la même erreur.


En fait, je voudrais passer un objet Remote en paramètres d'une méthode, comment faire svp ?
Si je passe des paramètres de type "String", "int", etc... tout fonctionne.

Merci beaucoup.

3 réponses


Bonjour

La classe qui implémente l'interface Remote ne contient pas la méthode add(Note note). Cordialement



















Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019

Bonjour,

Merci pour votre réponse, mais ma classe contient bien la méthode :

Par exemple, si je fais user.printNote(note) ça ne marche pas.

Dans la classe qui implémente l'interface User j'ai :

public class User extends UnicastRemoteObject implements interfaceUser{

public String printNote(Note note) throws RemoteException{
return( note.getTitre() + " : " + note.getContenu());
}
...


Mon interface de User :

import java.rmi.*;

public interface interfaceUser extends Remote{
public void setTitre(String titre) throws RemoteException;
public String printNote(Note note) throws RemoteException;
}
Messages postés
45
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 janvier 2019

C'est bon j'ai trouvé, il fallait mettre (interfaceNote note) comme paramètre de la méthode printNote de la classe User.
Je mettais (Note note)