Vous êtes sur la page 1sur 5

Université de Monastir Développement des Applications Réparties

Institut Supérieur d’Informatique Niveau d’étude : L3 Informatique


Et de Mathématiques de Monastir (ISIMM) Année Universitaire : 2022/2023

TP3 : Programmation Répartis JAVA RMI

RMI signifie Remote Method Invocation. Il s’agit d’un mécanisme qui permet à un objet résidant dans
un système (JVM) d’accéder à / invoquer un objet exécuté sur une autre JVM.

RMI est utilisé pour créer des applications distribuées, il fournit une communication à distance entre
les programmes Java. Il est fourni dans le package java.rmi.

Registre RMI

Le registre RMI est un espace de noms sur lequel tous les objets serveur sont placés. Chaque fois que
le serveur crée un objet, il enregistre cet objet avec RMIregistry (en utilisant les méthodes bind() ou
reBind()). Ceux-ci sont enregistrés en utilisant un nom unique appelé ‘bind name’.

Pour appeler un objet distant, le client a besoin d’une référence de cet objet. À ce moment, le client
récupère l’objet à partir du Registre à l’aide de son nom ‘bind name’ (à l’aide de la méthode
lookup()).

Exemple d’une application Java RMI

Pour écrire une application Java RMI, vous devez suivre les étapes ci-dessous:

● Étape 1: Définir l’interface de l’objet distant


● Étape 2: Développer la classe qui implémente l’interface de l’objet distant
● Étape 3: Développer le programme serveur
● Étape 4: Développer le programme client
● Étape 5: Compiler l’application
● Étape 6: Exécutez l’application
Étape 1: Définir l’interface de l’objet distant

L’interface de l’objet distant fournit la description de toutes les méthodes d’un objet distant
particulier. Le client communique avec cette interface distante.

Pour créer l’interface de l’objet distant :

● Créez une interface qui hérite de l’interface prédéfinie Remote.


● Déclarez toutes les méthodes métier pouvant être invoquées par le client dans cette
interface.

● Puisqu’il existe un risque de problèmes de réseau pendant les appels distants, une exception
nommée RemoteException peut se produire.

Voici un exemple de l’interface de l’objet distant. Ici, nous avons défini une interface avec le nom
Hello et elle a une méthode appelée showMsg().
import java.rmi.Remote;

import java.rmi.RemoteException;

// Créer l'interface de l'objet distant

public interface Hello extends Remote {

String showMsg() throws RemoteException;

Étape 2: Développer la classe qui implémente l’interface de l’objet distant

Nous devons implémenter l’interface distante créée à l’étape 1. Pour créer la classe qui implémente
l’interface de l’objet distant:

● Implémentez l’interface créée à l’étape 1.


● Fournit l’implémentation de toutes les méthodes abstraites de l’interface distante.
Voici la classe qui implémente l’interface de l’objet distant. Ici, nous avons créé une classe nommée
‘HelloImp’ et implémenté l’interface Hello créée à l’étape précédente et fourni le corps de cette
méthode qui affiche le message Hello World!.

// implémenter l'interface créée à l'étape 1

public class HelloImpl implements Hello {

// implémenter la méthode d'interface

public String showMsg() throws RemoteException{

return "Hello World!";

Étape 3: Développer le programme Serveur

Le programme Serveur doit hériter la classe qui implémente l’interface de l’objet distant. Ici, nous
devons créer un objet distant et le lier à RMIregistry.

Pour développer le programme Serveur:

● Créez un objet distant en instanciant la classe qui implémente l’interface de l’objet distant.
● Exportez l’objet distant à l’aide de la méthode exportObject() de la classe nommée
UnicastRemoteObject qui appartient au package java.rmi.server.

● Récupérez le registre RMI à l’aide de la méthode getRegistry() de la classe LocateRegistry qui


appartient au package java.rmi.registry.
● Liez l’objet distant créé au registre à l’aide de la méthode bind() de la classe nommée
Registry. À cette méthode, passe une chaîne représentant le nom associé à cet objet(bind
name) et l’objet exporté, en tant que paramètres.

import java.rmi.RemoteException;

import java.rmi.registry.Registry;

import java.rmi.registry.LocateRegistry;

import java.rmi.server.UnicastRemoteObject;

public class Server extends HelloImpl {

public Server() throws RemoteException {}

public static void main(String args[]) {

try {

// crée l'objet distant

HelloImpl obj = new HelloImpl ();

// ici, nous exportons l'objet distant vers le stub

Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

// Liaison de l'objet distant (stub) dans le Registre

Registry reg = LocateRegistry.getRegistry();

// publier la référence de l’objet distant

reg.bind("Hello", stub);

System.out.println("Le Serveur est prêt...");

} catch (Exception e) {

System.err.println(e.toString());

e.printStackTrace();

Étape 4: Développer le programme Client

Le programme client, récupère l’objet distant et appelle la méthode requise à l’aide de cet objet.

Pour développer un programme client:


● Récupérez le registre RMI à l’aide de la méthode getRegistry() de la classe LocateRegistry qui
appartient au package java.rmi.registry.

● Récupérez l’objet dans le registre en utilisant la méthode lookup() de la classe Registry qui
appartient au package java.rmi.registry. Pour cette méthode, vous devez passer une chaîne
représentant le nom associé à cet objet(bind name) en tant que paramètre. Cela vous rendra
l’objet distant.

● lookup() renvoie un objet de type Remote, le transtypage vers le type Hello.


● Enfin, appelez la méthode requise en utilisant l’objet distant obtenu.

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class Client {

private Client() {}

public static void main(String[] args) {

try {

// Récupérer le registre

Registry reg = LocateRegistry.getRegistry();

// Recherche dans le registre de l'objet distant -> récupérer la référence de l’objet distant

Hello stub = (Hello) reg.lookup("Hello");

// Appel de la méthode distante à l'aide de l'objet obtenu -> invocation de la méthode


showMsg()

System.out.println(stub.showMsg());

} catch (Exception e) {

System.err.println(e.toString());

e.printStackTrace();

Étape 5: Compiler l’application

Pour compiler l’application :

● Compilez l’interface de l’objet distant.


● Compilez la classe qui implémente l’interface de l’objet distant.
● Compilez le programme Serveur.
● Compilez le programme Client.
Ou, vous pouvez compiler tous les fichiers Java en une seule fois. comme indiqué ci-dessous.

> javac *.java

Étape 6: Exécutez l’application

Démarrez le registre rmi à l’aide de la commande suivante:

> start rmiregistry

Exécutez le serveur comme indiqué ci-dessous.

> java Server

Exécutez le client comme indiqué ci-dessous.

> java Client

Vous aimerez peut-être aussi