[RMI] accès a un objet du serveur a partir du client
Bonjour,
Je vais essayer de vous résumer mon problème le plus possible.
J'ai un objet Prog qui est créé lors de a création de mon serveur.
J'ai une interface ModelInterface pour pouvoir chercher cet objet Prog
Code:
1 2 3 4
|
public interface ModelInterface extends Remote{
public Prog getProg() throws RemoteException;
} |
Voici une partie de mon serveur (il implémente l'interface ModeInterface)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public static void main(String[] args) throws Exception {
String serverName = "Server";
Server server = new Server();
try{
//le registre RMI est initialisé ici!
java.rmi.registry.LocateRegistry.createRegistry(1099);
} catch (Exception e) {
System.out.println("Erreur: le programme n'a pas pu créer le registre");
}
//On lance le rebind avec le nom du serveur et l'objet serveur qu'on vient de créer
Naming.rebind(serverName, server);
//On affiche l'adresse IP du serveur
System.out.println(serverName +" est en marche" + " l'adresse IP du serveur est: "+
InetAddress.getLocalHost().toString());
//Une instance de la classe prog, qui gère le jeu, est lancée
prog = new Prog();
FakeFill fakefill = new FakeFill(prog);
fakefill.fill();
}
/**
* Envoie l'objet Prog
*/
public Prog getProg() throws RemoteException {
return prog;
} |
Donc si maintenant j'essaie d'obtenir mon objet prog en faisant (depuis le cient):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
public static void main(String[] args) throws RemoteException {
//ici on introduit l'adresse IP du serveur
String hostname = "//127.0.1.1/Server";
if (args.length > 0) {
hostname = args[0];
} else {
System.out.println("Pas de hostname saisi, le client est lancé" +
" sur cette machine");
}
try{
/**Le client effectue un lookup sur les deux interfaces du jeu,
* pourintéragir avec le serveur
*/
modelServ = (ModelInterface) Naming.lookup(hostname);
System.out.println("La connexion au serveur a été établie!");
}
catch(Exception e){
System.out.println("Le serveur n'a pas été trouvé!");
}
finally{
// C'EST ICI QUE CA NE MARCHE PAS!!!
Prog prog =modelServ.getProg();
}
} |
Il me retourne une erreur:
Code:
1 2 3
| Exception in thread "main" java.lang.ClassCastException: $Proxy1 cannot be cast to Model.Prog
at $Proxy0.getProg(Unknown Source)
at okstats.OkStatsClient.main(OkStatsClient.java:61) |
D'où provient cette erreure et comment faire pour pouvoir utiliser cet objet prog?
Merci