Architecture de RMI (Remote Method Invocation)

Décembre 2016

Architecture de RMI


L'architecture de RMI est schématisée ci-dessous :


Architecture RMI


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 ou souche en français).

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 que l'on appelle

la sérialisation, puis les transmet au serveur instanciant l'objet sous forme de flot de données.
On dit que le stub "marshalise" les arguments de la méthode distante.
  • Le squelette instancié sur le serveur "désérialise" les données envoyées

par le stub (on dit qu'il les "démarshalise"), puis appelle la méthode en local
  • Le squelette récupère les données renvoyées par la méthode (type de base, objet

ou exception) puis les marshalise
  • le stub démarshalise les données provenant du squelette et les transmet à l'objet

faisant l'appel de méthode à distance

Mise en oeuvre de RMI


Pour créer une application avec RMI il suffit de procéder comme suit :

  • définir la classe distante. Celle-ci doit dériver de java.rmi.server.UnicastRemoteObject (utilisant elle-même les classes Socket et SocketServer, permettant la communication par protocole TCP)
  • définir l'interface pour la classe distante. Celle-ci doit implémenter

l'interface java.rmi.Remote et déclarer les méthodes publiques globales
de l'objet, c'est-à-dire les méthodes partageables. De plus ces méthodes doivent
pouvoir lancer une exception de type java.rmi.RemoteException.
  • créer les classes pour le stub et le squelette grâce à

la commande rmic
  • Lancer le registre RMI et lancer l'application serveur, c'est-à-dire instancier

l'objet distant. Celui-ci lors de l'instanciation créera un lien avec le registre
  • Créer un programme client capable d'accèder aux méthodes

d'un objet sur le serveur grâce à la méthode Naming.lookup()
  • Compiler l'application cliente
  • Instancier le client

A voir également :

Ce document intitulé «  Architecture de RMI (Remote Method Invocation)  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.