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 [Link].
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 [Link];
import [Link];
// 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 [Link].
● Récupérez le registre RMI à l’aide de la méthode getRegistry() de la classe LocateRegistry qui
appartient au package [Link].
● 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 [Link];
import [Link];
import [Link];
import [Link];
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) [Link](obj, 0);
// Liaison de l'objet distant (stub) dans le Registre
Registry reg = [Link]();
// publier la référence de l’objet distant
[Link]("Hello", stub);
[Link]("Le Serveur est prêt...");
} catch (Exception e) {
[Link]([Link]());
[Link]();
É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 [Link].
● Récupérez l’objet dans le registre en utilisant la méthode lookup() de la classe Registry qui
appartient au package [Link]. 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 [Link];
import [Link];
public class Client {
private Client() {}
public static void main(String[] args) {
try {
// Récupérer le registre
Registry reg = [Link]();
// Recherche dans le registre de l'objet distant -> récupérer la référence de l’objet distant
Hello stub = (Hello) [Link]("Hello");
// Appel de la méthode distante à l'aide de l'objet obtenu -> invocation de la méthode
showMsg()
[Link]([Link]());
} catch (Exception e) {
[Link]([Link]());
[Link]();
É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