Vous êtes sur la page 1sur 5

Université de Monastir A.U.

: 2023-2024
Faculté des Sciences de Monastir Développement d’application
Département des Sciences de l'Informatique réparties

TP N°5 : RMI (Remote Method Invocation)

Introduction :
Remote Method Invocation (RMI) est une API Java qui permet aux objets Java de faire appel à des
méthodes sur des objets Java distants.
Une application Client-Server utilisant les RMI met en œuvre 3 composantes logicielles :
 Une application serveur,
Stub : un stub est une représentation (proxy) de l’objet distant chez le client. Il réside dans le
système client ; il agit comme une passerelle pour le programme client.
 Une application cliente,
Squelette(skeleton) : c’est l’objet qui réside du côté serveur. Stub communique avec ce squelette
pour transmettre la requête à l’objet distant.
 L’application médiatrice RMIRegistry dédiée :
o à l’enregistrement des objets distants du serveur qui sont accessibles aux clients.
o à l’association de noms à ces objets permettant ainsi de le référencer.

Pourquoi RMI plutôt qu'un simple socket ?


Lorsque l'on pense à la communication entre machines, l'utilisation de sockets peut sembler une option
évidente. Les sockets permettent l'échange de données entre des applications distantes, mais elles ne
fournissent pas directement le niveau d'abstraction nécessaire pour une interaction plus orientée objet. C'est
là qu'intervient le RMI.

1
1. Abstraction orientée objet : Le RMI offre une approche orientée objet pour la communication distante.
Il permet aux objets sur une machine d'invoquer des méthodes d'objets situés sur une machine distante,
comme s'ils étaient locaux. Cette abstraction facilite la programmation et permet de concevoir des
systèmes distribués plus modulaires et évolutifs.
2. Gestion transparente de la communication : Contrairement aux sockets, le RMI gère de manière
transparente la communication entre les objets distants. Il prend en charge la sérialisation des objets et la
transmission des appels de méthodes à distance, masquant ainsi la complexité de la communication réseau.
Les développeurs peuvent se concentrer sur la logique métier de leur application plutôt que sur les détails
de la communication bas niveau.
3. RMI est plus fiable que les sockets. Il fournit une couche de sécurité et de gestion des erreurs qui peut
aider à protéger les données et à garantir la fiabilité des communications.

Etapes de création d’un objet distant et son appel :


Lorsqu’un objet instancié sur une machine cliente désire accéder à des méthodes d’un objet distant, il
effectue les opérations suivantes :
 Il localise l’objet distant grâce à un service de désignation (le registre RMI)
 Il obtient dynamiquement une image virtuelle de l’objet distant (appelée stub). Le stub possède
exactement la même interface que l’objet distant.
 Le stub transforme l’appel de la méthode distante en une suite d’octets, c’est ce qu’on l’appelle la
sérialisation, puis les transmets au serveur instanciant l’objet sous la forme de flot de données. On
dit que le stub «marchalise» les arguments de la méthode distante.
 Le squelette instancié sur le serveur « déserialise » les données envoyées par le stub (on dit qu’il les
« démarchalise »), puis appelle la méthode locale.
 Le squelette récupère les données renvoyées par la méthode (type de base, objet ou exception) puis
les marchalise.
 Le stub démarchalise les données provenant du squelette et les transmet à l’objet faisant l’appel de
méthode à distance.
 Ces deux classes se chargent d’assurer tous les mécanismes d’appel, de communication,
d’exécution, de renvoi et de réception du résultat.

2
Exercice 1 :
1. Créer l’interface distante : Une interface Java qui étend Remote et définit les méthodes qui peuvent
être invoquées à distance.

2. Implémenter l’interface distante

3. Créer le Serveur RMI : un programme qui met en œuvre l'interface distante et s'enregistre auprès du
registre RMI pour permettre aux clients de le localiser. 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 auprès du registre RMI (en utilisant la méthode rebind). Ceux-ci sont enregistrés à l’aide
d’un nom unique appelé nom de liaison.

3
4. Créer le Client RMI : Un programme qui utilise l'interface distante pour invoquer des méthodes sur
des objets distants. Le client récupère l’objet dans le registre en utilisant son nom de liaison à l’aide
de la méthode lookup().

4
Serveur

1. Créer l’objet distant


Client
remoteServer : RemoteInterfaceImp
4. Créer le stub
sayHello() : String

Stub

Skeleton

5. Connexion

3. Récupérer la 2. Publier la référence


référence de l’objet de l’objet distant
distant
Naming service

Nom de l’objet référence


distant
remoteServer réf1

Vous aimerez peut-être aussi