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 :

[RMI] accès a un objet du serveur a partir du client


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Est-ce que l'interface côté client est exactement la même que côté serveur (y compris dans le même package) ?

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Par défaut
    Citation Envoyé par Alain Defrance Voir le message
    Est-ce que l'interface côté client est exactement la même que côté serveur (y compris dans le même package) ?
    En fait j'ai un seul et meme projet qui contient le client et le serveur.
    Donc mes package sont comme suit:
    Model
    Prog
    ModelInterface
    Programme
    Client
    Server

    Dois je comprendre qu il faut 2 interface? une utilisée par le client l autre par le serveur?

  4. #4
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Non justement il faut que ca soit la même interface.
    On a juste besoin de la distribuer sur le clien avec de donner un type à la référence vers l'instance distante.

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Par défaut
    Citation Envoyé par Alain Defrance Voir le message
    Non justement il faut que ça soit la même interface.
    On a juste besoin de la distribuer sur le clien avec de donner un type à la référence vers l'instance distante.
    Donc il semblerait que ce soit bon comme ça?
    Bizarrement lorsque je fais un petit getHelloWord() qui retourne un String "Hello Word" j'arrive a y accéder depuis mon client. Pourquoi ne puis je pas accéder à mon objet Prog?

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Par défaut
    Je viens de tester quelque chose et je voudrais savoir si c'est ça le problème...
    En fait le ModelInterface me revoir un Prog. Or ne devrait-il pas retourner un ProgInterface pour que ça marche? C'est de la que vient le problème?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2011, 10h15
  2. Objet côté serveur observé par des clients web
    Par SuperAllumette dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 02/06/2009, 14h14
  3. [RMI] Accès d'un serveur par plusieurs clients
    Par AlambicTalon dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 09/04/2008, 17h26
  4. Réponses: 9
    Dernier message: 15/02/2006, 20h54
  5. Réponses: 2
    Dernier message: 24/09/2005, 08h47

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