Vous êtes sur la page 1sur 5

Ecole Supérieur de Technologie de Khénifra

Département : Génie de l’informatique et mathématiques


Filière : Administrateur des Systèmes et Réseaux
Module : Systèmes et applications répartis

TP N°3 : Invocation des méthodes sur des objets distants avec java RMI

Objectifs du TP :
L'objectif de ce TP est de permettre à des applications clientes (s'exécutant localement)
d'invoquer des méthodes sur des objets distants, c'est-à-dire localisés dans une autre
application (dans une autre JVM de la même machine physique ou sur une autre machine
accessible via un réseau).

Principes généraux

Le but de RMI est de permettre l'appel, l'exécution et le renvoi du résultat d'une méthode
exécutée dans une machine virtuelle différente de celle de l'objet l'appelant. Cette machine
virtuelle peut être sur une machine différente pourvu qu'elle soit accessible par le réseau.

L'objet (le serveur) qui propose l'appel de ses méthodes par des objets distants doit offrir :

1. Une interface qui décrit l'ensemble des méthodes visibles à distance :


 Cette interface doit hériter de java.rmi.Remote, ce qui rend les paramètres des
méthodes sérialisables.
 Chaque méthode exportée d zz<<bbbb b b b b bb b bbbbbboit lever
l'exception, java.rmi.RemoteException.
2. /a classe qui implémente cette interface :
 Elle doit hériter de java.rmi.Server.UnicatRemoteObject.
3. l'instanciation de cette classe et son enregistrement sous un nom auprès du service de
désignation de RMI (rmiregistry) :
 appel à Naming.rebind.
L'appelant (le client) doit obtenir une référence sur l'objet distant :

1. Utilisation du Naming.lookup pour trouver l'objet distant


2. Appel(s) de méthodes

Page 1/5
Exercice 1 :
Copier puis tester sur même machine et deux machines distantes le programme RMI vu en cours. Ce
programme est constitué des fichiers suivants :

 HelloInterface.java : interface définissant les opérations appelables à distance

import java.rmi.*;

public interface HelloInterface extends Remote {


/* méthode qui imprime un message prédéfini dans l’objet
appelé */

public String sayHello() throws


java.rmi.RemoteException;

 HelloImpl.java : classe implémentant les opérations appelables à distance

import java.rmi.*;
import java.rmi.server.*;

public class HelloImpl extends UnicastRemoteObject


implements HelloInterface {

private String message;

/* le constructeur */

public HelloImpl (String s) throws RemoteException {


super();
message = s ;
}

/* l’implémentation de la méthode */

public String sayHello () throws RemoteException {


return message ;
}
}

Page 2/5
 HelloServer.java : coté serveur, programme qui instancie un objet implétant les
opérations qui seront appelées à distance par les clients

import java.rmi.*;
import java.rmi.registry.LocateRegistry;
public class HelloServer {

public static void main (String [ ] argv) {


try {
/*Lance un registry localement sur le port d'écoute passé
en paramètre : 1099*/
LocateRegistry.createRegistry(1099);

/* créer une instance de la classe Hello et l’enregistrer


dans le serveur de noms */
HelloImpl od=new HelloImpl ("Hello word !");
Naming.rebind ("rmi//localhost:1099/HelloWord”, od) ;
System.out.println ("Serveur prêt.") ;

} catch (Exception e) {
System.out.println ("Erreur serveur : " + e) ; }
}
}

 HelloClient.java : coté client, programme qui appelle les opérations sur l'objet
distant

import java.rmi.*;
public class HelloClient {

public static void main (String [ ] argv) {


Coté serveur
try : {
/* trouver une référence vers l’objet distant */
HelloImpl hello = (HelloImpl)
Naming.lookup("rmi//localhost:1099/HelloWord");

/* appel de méthode à distance */


System.out.println (hello.sayHello()) ;

} catch (Exception e) {
System.out.println ("Erreur client : " + e) ; }
}
}

Page 3/5
Exercice 2 :
Développer une application client serveur RMI dans laquelle le serveur offre les services
distants suivant au client :

 Fournir au client la date du serveur.


 Convertir un montant exprimé en EURO vers un montant exprimé en DH
 Calcule et renvoie le n-ième terme de la suite de Fibonacci

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;

public interface InterfServiceDistant extends Remote {

public Date getServerDate()


throws RemoteException;

public double convertEuroToDH(double montant)


throws RemoteException;

Exercice 3 :
Un serveur gérera tous les comptes bancaires et permettra à des clients de se connecter et d’effectuer les
opérations suivantes :
 Créer un compte en banque.
 De verser un montant sur un compte
 Retirer un montant d’un compte
 Fixer un découvert.

Voici la déclaration des méthodes distantes :

float getSolde();
void verser(float mt);
void retirer(float mt);
float getDecouvert();

1. Ecrire une interface CompteInterface dérivant de Remote qui déclare les méthodes distantes.
2. Ecrire une classe CompteImpl qui implémente les méthodes de l’interface
CompteInterface.
3. Ecrire une classe ServeurBanque qui gère la partie serveur de notre application répartie.
4. Ecrire une classe ClientBanque qui gère la partie client de notre application répartie.
5. Lancer et tester l’application répartie.

Page 4/5
Exercice 4 :
On souhaite créer une application java qui permet de gérer un stock de produits.
La classe produit est défini par les attributs suivants :
 Un numéro de type entier
 La désignation du produit de type chaîne de caractères
 Le prix du produit de type réel
 La quantité en stock de type entier.
Travail demandé :
1) Créer les classes Produit.
2) Créer l’interface InterfStock déclarant les méthodes à implémenter. Les méthodes sont :
 getProduits qui retourne les produits en stock
 getProduit qui retourne un produit donné par son numéro
 montantProduit qui retourne le montant d’un produit en stock (prix*quantité)
 totalProduits qui retourne le montant total des produits en stock.
3) Créer une classe ImplStock qui implémente l’interface InterfStock contenant une liste
permettant de stocker les produits.
4) Générer le stub.
5) Créer une application Serveur.
6) Créer une application Client.
Déployer l’application.

Page 5/5

Vous aimerez peut-être aussi