TP3RMI
TP3RMI
TP3RMI
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()).
Pour écrire une application Java RMI, vous devez suivre les étapes ci-dessous:
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.
● 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;
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:
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.
● 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.
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
try {
reg.bind("Hello", stub);
} catch (Exception e) {
System.err.println(e.toString());
e.printStackTrace();
Le programme client, récupère l’objet distant et appelle la méthode requise à l’aide de cet objet.
● 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.
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
private Client() {}
try {
// Récupérer le registre
// Recherche dans le registre de l'objet distant -> récupérer la référence de l’objet distant
System.out.println(stub.showMsg());
} catch (Exception e) {
System.err.println(e.toString());
e.printStackTrace();