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

benji1801 Messages postés 45 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 janvier 2019 - 13 févr. 2011 à 16:26
benji1801 Messages postés 45 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 janvier 2019 - 15 févr. 2011 à 21:48
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

Utilisateur anonyme
15 févr. 2011 à 13:29
Bonjour

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



















0
benji1801 Messages postés 45 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 janvier 2019
15 févr. 2011 à 18:35
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;
}
0
benji1801 Messages postés 45 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 janvier 2019
15 févr. 2011 à 21:48
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)
0
Rejoignez-nous