IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Problème RMI


Sujet :

Entrée/Sortie Java

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut Problème RMI
    J'ai posté hier pour un problème dont j'avais pris une classe statique responsable, mais là je crois que je viens de comprendre. Ca n'a rien à voir avec cette classe, mais bien avec mon serveur RMI.

    Voilà j'ai un serveur et un client RMI. (jusque là tout va bien).
    Classe serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Je vous passe l'interface RMI...
    public class CommunicateurServeur extends UnicastRemoteObject implements CommunicateurInterFace{
    private Jeu jeu;
    //un constructeur dans lequel on fait le rebind... et où on déclare un objet Jeu...
    public CommunicateurServeur(Jeu jeu){
    ...}
     
    //une méthode dans laquelle on peut obtenir l'objet Jeu
    public Jeu obtenirJeu() throws RemoteException{
            return jeu;
        }
     }
    ensuite il y a la classe Jeu
    qui sait faire des traitements, en utilisant d'autres objets imbriqués... C'est aussi ma classe contenant le main de mon serveur. Je vais écrire un petit exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public Jeu extends Serializable, ActionListener{
    //constructeur où on instancie la classe présentée précédemment,....
    //main dans lequel on instancie Jeu, dans lequel on met le driver MySql....
    //méthode dans laquelle on crée un objet Utilisateur :
    public Utilisateur creerJoueur(String identifiant, String motPasse, String eMail) {
         Utilisateur   utilisateur=Utilisateur.creerUtilisateur(identifiant,motPasse,eMail,"joueur",listeUtilisateur);
    ...
    listeUtilisateur.put(utilisateur.id,utilisateur);
    ...
    return Utilisateur
    }
    Et enfin le client dans lequel on appelle notre classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.utilisateur=communicateur.obtenirJeu().creerJoueur(identifiant,motPasse,eMail);
    Je ne parle pas de syntaxe : il n'y a pas d'erreur dans mon programme il tourne très bien.

    Le problème que j'avais repéré c'est que je ne voyais pas arriver au sein de ma classe serveur, mes utilisateurs créés.
    Je crois que je viens de comprendre, mais je voudrais m'assurer que c'est ça.
    RMI me télécharge le contenu du serveur, et donc mon objet Jeu, mais si je l'utilise, je l'utilise localement au lieu d'utiliser l'instance qui se trouve sur le serveur.

    Mon hypothèse est elle juste ? Que faudrait-il faire ?
    Merci d'avance parce que je galère et je ne connais personne à qui demander.

  2. #2
    Membre émérite Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Par défaut
    RMI me télécharge le contenu du serveur, et donc mon objet Jeu, mais si je l'utilise, je l'utilise localement au lieu d'utiliser l'instance qui se trouve sur le serveur.
    Non, tu n'es pas censé avoir des instances différentes sur le serveur et sur le client, en principe tu travailles bien sur les objets qui se trouvent sur le serveur, c'est même là le principal avantage de RMI, sinon à quoi cela servirait-il ? (dans ce cas là, rmi ne servirait qu'a telecharger des classes, ce qui serait limité)

    à mon avis, le problème vient plutot du code de ta classe Jeu qui n'a pas l'air tres rigoureux à premiere vue (difficile à dire car tu ne nous en donne qu'un extrait tres succint). En effet, ca à l'air un peu tout mélangé ... peux-tu montrer le code complet des classes jeu et utilisateur ?

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Oui je peux te montrer ça, mais ce soir seulement. C'est chez moi. J'ai mis seulement ce que je pensais être digne d'intérêt.

    Ce qui m'étonne, c'est que j'avais fait un jeu de petits chevaux il y a deux ans avec cette techno, et je n'avais pas éprouvé ces difficultés.

    Là où je pense avoir fait une erreur c'est dans mon truc qui récupère l'instance de jeu"obtenirJeu()", j'ai réellement l'impression qu'ensuite il l'éxécute dans mon programme en local. Comme je n'ai qu'un ordi,... difficile de vérifier !

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Bon ben voilà ça marche.

    Ma supposition était bonne, si on demande un objet de manière explicite à travers une méthode, on récupère réellement l'objet sérialisé du côté Client.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Jeu getJeu() throws RemoteException{
       return new Jeu();
    }
    Ainsi on perd la référence à l'objet serveur. Et on exécute les commandes sur l'objet jeu à l'intérieur du client ou du serveur.
    En conclusion RMI permet d'exécuter uniquement des méthodes s'un objet à distance, et les objets "téléchargé" par ses méthodes sont réellement du côté client et non serveur.

    Si on veut travailler sur plusieurs objets il faut y accéder dans des méthodes bien déclarées dans le RMI Registry.

    Je sais pas si j'ai été assez clair, mais j'espère que ça vous servira.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Help probléme RMI
    Par redknight dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/03/2011, 15h20
  2. Problème RMI sous OVH (Linux)
    Par Koko22 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 26/06/2010, 17h11
  3. probléme & rmi
    Par clio671 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/03/2008, 22h21
  4. Problème RMI, création _Skel.class
    Par ikeaboy dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 29/05/2006, 23h04
  5. Problème RMI.
    Par rumps dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 22/04/2006, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo