C’est quoi RMI ?

Présentation

RMI (Remote Methode Invocation) permet l’appel, l’exécution et le renvoi du résultat d’une méthode exécutée dans une machine virtuelle différente de celle de l’objet l’appelant. Cette machine virtuelle peut être sur une machine différente pourvu qu’elle soit accessible par le réseau. La machine sur laquelle s’exécute la méthode distante est appelée serveur. RMI permet donc d’appeler des méthodes distantes sur des objets distants contenus dans un serveur. Le prérequis à l’utilisation de RMI est que le langage JAVA est obligatoire aussi bien du côté serveur que du côté client.

L’appel côté client d’une telle méthode est un peu plus compliqué que l’appel d’une méthode d’un objet local mais il reste simple. Il consiste à obtenir une référence sur l’objet distant puis à simplement appeler la méthode à partir de cette référence.

La technologie RMI se charge de rendre transparente la localisation de l’objet distant, son appel et le renvoi du résultat.En fait, elle utilise deux classes particulières, le stub et le skeleton, qui doivent être générées avec l’outil rmic fourni avec le JDK. Le stub est une classe qui se situe côté client et le skeleton est son homologue côté serveur. 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.

Mise en place

Le développement coté serveur se compose de :

  • La définition d’une interface qui contient les méthodes qui peuvent être appelées à distance
  • L’écriture d’une classe qui implémente cette interface
  • L’écriture d’une classe qui instanciera l’objet et l’enregistrera en lui affectant un nom dans le registre de noms RMI (RMI Registry)

Le développement côté client se compose de :

  • L’obtention d’une référence sur l’objet distant à partir de son nom
  • L’appel à la méthode à partir de cette référence
  • Enfin, il faut générer les classes stub et skeleton en exécutant le programme rmic avec le fichier source de l’objet distant.

Avantages

Simple (les aspects réseau sont transparents), nécessite uniquement le développement d’une couche métier, permet une architecture n-tiers

Inconvénients

Technologie supportée uniquement par Java aussi bien du côté client que serveur, Lenteur relative de cette technologie due notamment à la sérialisation des paramètres

Sérialisation / Désérialisation 

Pour l’échange de données, RMI utilise le procédé de sérialisation / désérialisation ! La sérialisation d’un objet permet d’envoyer dans un flux les informations sur la classe et l’état d’un objet pour permettre de le récréer ultérieurement. Ces informations permettent de restaurer l’état de l’objet même dans une classe différente qui dans ce cas doit être compatible. Elle permet donc de transformer l’état d’un objet pour permettre sa persistance en dehors de la JVM ou de l’échanger en utilisant le réseau.

Foire aux questions

Que représentent les références en RMI ? Ce sont des identificateurs permettant l’accès physique à une entité.

Différences entre serveur itératif et concurrent ? Un serveur itératif traite les appels un par un alors qu’un serveur concurrent fait appel à un pool de threads pour traiter les demandes des clients.

A quoi sert la méthode rebind de la classe java.rmi.Naming ? Donnez un exemple de son utilisation. Elle sert à remplacer l’objet serveur dans le registre de noms RMI (associer un autre objet au nom déjà enregistré auparavant avec la méthode bind()). La méthode rebind (ou bind) permet d’enregistrer sur le serveur un objet squelette ainsi qu’une référence vers l’objet serveur, pour un port donné choisi par le service de nom (classe Naming de la JVM).

Pour les applications suivantes, indiquez si RMI ou les Sockets sont adaptés pour les mettre en œuvre en justifiant vos décisions

  • Vidéo à la demande (type ITunes) : Sockets car pas de traitement côté serveur et RMI n’est pas adapté pour l’envoi de beaucoup de données
  • Récupération d’informations boursières : RMI car traitement côté serveur et peu de données envoyées 
  • Gestion des stocks d’une entreprise : RMI car traitement côté serveur et peu de données envoyées
  • Récupération d’informations météo : Sockets car pas de traitement côté serveur 
  • Diffusion instantanée de message : RMI car principe de notifications et transfert de messages 

A quoi sert la classe RemoteException ? Donnez un exemple d’utilisation. Elle permet de traiter les erreurs d’invocation d’une méthode à distance. Exemple : public String getInformation() throws RemoteException;

A quoi sert le rmiregistry ? Le rmiregistry permet de publier la référence vers un objet serveur RMI que va récupérer le client afin d’avoir accès aux méthodes distantes.

A quoi servent les références distances (aussi appelées souches clientes) ? Elles servent à appeler des méthodes distantes ?

A quoi sert le programme rmic ? C’est le compilateur RMI, qui se charge de générer automatiquement les classes stub et skeleleton à partir de la définition des classes serveur.

A quoi sert IDL ? IDL permet de faire communiquer des modules implémentés dans des langages différents, ou déployés à travers un réseau sur des systèmes hétérogènes (Windows, Linux, Mac OS X, VMS, etc.) dans la perspective d’architecture distribuée. (En clair, IDL = RMI, mais pas réservé au Java).

Qu’est ce que le binding ? C’est une liaison, une association entre la désignation d’une entité et la référence à sa localisation physique. Il permet d’assurer une mise en relation dynamique entre client et serveur (UDDI, RMI Registry…). Service de noms (~ pages blanches). Annuaires (~ pages jaunes).

Objectifs d’un stub dans un appel de procédure à distance ? Le stub est une classe qui se situe côté client et le skeleton est son homologue coté serveur. Ces deux classes assurent la transmission réseau : les mécanismes d’appel, de communication, d’exécution, de renvoi et de réception du résultat.

Quelles sont les différences entre synchrone et asynchrone ? Asyncrhone : A peut faire quelque chose après un envoi et n’attends donc aucun retour de B. Syncrhone : A ne peut rien faire après l’envoi à B car il attends son retour.

Leave a Comment