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 + comment appeler la méthode distante


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut RMI + comment appeler la méthode distante
    Bonjour ,
    J'ai un projet à faire en RMI.
    J'ai fait un client et un serveur, le client fait appel à une méthode donnerNom sur le serveur qui lui permet de récuperer un bonjour+nom.
    Pour l'instant je veux juste réussir un appel .
    Voici le code de l'implémentation
    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
     
    public class pairImlp extends java.rmi.server.UnicastRemoteObject implements PairInt {
     
        // On va redéfinir les méthodes
     int n =0 ; 
     private String nom ;
     
        // Le constructeur de cette classe
     
     public pairImlp(String nom) throws java.rmi.RemoteException
     {
         this.nom = nom ;
     }
     
     
      public String donnerNom(String nom) throws java.rmi.RemoteException
        {
              String ch="Bonjour" ;
              ch = ch+nom ;
            return ch ;
        }
    }
    Voici le code du serveur
    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
    28
    29
    30
    31
     
    import java.rmi.*;
     
    public class Serveur {
     
        // Les attributs
     
        // Le constructeur
     
        public Serveur()
        {
            try {
                // Création d'un objet de l'mplémentation
                PairInt  noeud1 = new pairImlp("noeud1") ;
                System.out.println("L'objet a été créé") ;
     
                // Inscription dans le rmiregistry
                Naming.bind("noeud1",noeud1);
                System.out.println("L'objet a été inscrit dans le registry") ;
                System.out.println("Je suis en attente") ;
            }
            catch(Exception e){
     
            }
        }
    // Classe de Test
        public static void main(String []argv)
        {
            Serveur instance = new Serveur() ;
        }
    }
    ET enfin voici le code du client je crois que j'ai un problème dans la
    partie en gras
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    public class Client {
    
        // Les attributs
        String nom ;
        String n ;
        
        // Le constructeur
        
        public Client(String nom){
                try{
    
            this.nom = nom ;
            
            // le client implemente aussi l'interface
            PairInt  noeudClient = new pairImlp(nom) ;
            
            System.out.println("Un objet client a été créé ") ;
            // Le client va aussi s'inscrire dans le rmiregistry
            // par un Naming.bind
            
            Naming.bind(nom,noeudClient) ;
            
            System.out.println("Je suis bien enregistré dans le registry") ;
            
            // En même temps il va rechercher un autre client
            PairInt ref = (PairInt)Naming.lookup("rmi/localhost/noeud1") ;
            n = ref.donnerNom(nom);
            System.out.println(n) ;
        }
        catch (Exception e){
            System.out.println(e.getMessage()) ;
        }
                
    } // Fin du constructeur
        // Début de la classe de test
        public static void main (String [] argv)
        {
            Client client = new Client("joseph") ;
        }
    
    }
    Actuellement mon objet client est crée,il s'inscrit dans le registry mais il ne m'affiche pas bonjour + le nom.
    Merci d'avance pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Bonjour


    Je crois qu'effectivement il y a une erreur dans ta façon de programmer le RMI.
    Le client n'est pas obligé de venir s'inscrire dans le registre du serveur pour pouvoir accéder à l'objet partagé.

    normalement, coté client tu devrai avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Registry registre = LocateRegistry.getRegistry(adresseIPServeur,portServeur);
    PairInt ref = (PairInt)registre.lookup("noeud1");
    et ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String n = ref.donnerNom(nom);
    Si je me trompe pas ça devrai fonctionner. Maintenant, l'avis d'une personne plus expérimenté que moi serait necessaire, maiss essayes déjà ça.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci beaucoup ,
    Je ne sais pas ce qui s'est passé mais ça refonctionne.
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/04/2007, 18h07
  2. Comment appeler une méthode dont le nom est dans un string?
    Par Ireon dans le forum API standards et tierces
    Réponses: 22
    Dernier message: 13/04/2007, 17h22
  3. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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