L'architecture de RMI est schématisée ci-dessous :
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
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
|