Java RMI - Introduction

RMI signifie Remote Method Invocation. C'est un mécanisme qui permet à un objet résidant dans un système (JVM) d'accéder / d'appeler un objet s'exécutant 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 packagejava.rmi.

Architecture d'une application RMI

Dans une application RMI, nous écrivons deux programmes, un server program (réside sur le serveur) et un client program (réside sur le client).

  • Dans le programme serveur, un objet distant est créé et la référence de cet objet est rendue disponible pour le client (en utilisant le registre).

  • Le programme client demande les objets distants sur le serveur et tente d'appeler ses méthodes.

Le schéma suivant montre l'architecture d'une application RMI.

Parlons maintenant des composants de cette architecture.

  • Transport Layer- Cette couche relie le client et le serveur. Il gère la connexion existante et établit également de nouvelles connexions.

  • 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.

  • Skeleton - C'est l'objet qui réside côté serveur. stub communique avec ce squelette pour transmettre la demande à l'objet distant.

  • RRL(Remote Reference Layer) - C'est la couche qui gère les références faites par le client à l'objet distant.

Fonctionnement d'une application RMI

Les points suivants résument le fonctionnement d'une application RMI -

  • Lorsque le client effectue un appel à l'objet distant, il est reçu par le stub qui transmet finalement cette demande au RRL.

  • Lorsque le RRL côté client reçoit la demande, il appelle une méthode appelée invoke() de l'objet remoteRef. Il transmet la demande au RRL côté serveur.

  • Le RRL côté serveur transmet la requête au Skeleton (proxy sur le serveur) qui appelle finalement l'objet requis sur le serveur.

  • Le résultat est renvoyé au client.

Marshalling et démarshalling

Chaque fois qu'un client appelle une méthode qui accepte des paramètres sur un objet distant, les paramètres sont regroupés dans un message avant d'être envoyés sur le réseau. Ces paramètres peuvent être de type primitif ou des objets. En cas de type primitif, les paramètres sont rassemblés et un en-tête y est attaché. Si les paramètres sont des objets, ils sont sérialisés. Ce processus est connu sous le nom demarshalling.

Du côté serveur, les paramètres compressés sont dégroupés, puis la méthode requise est appelée. Ce processus est connu sous le nom deunmarshalling.

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 auprès de RMIregistry (en utilisantbind() ou reBind()méthodes). 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-là, le client récupère l'objet du registre en utilisant son nom de liaison (en utilisantlookup() méthode).

L'illustration suivante explique l'ensemble du processus -

Objectifs du RMI

Voici les objectifs de RMI -

  • Pour minimiser la complexité de l'application.
  • Pour préserver la sécurité des types.
  • Collecte des déchets distribuée.
  • Minimisez la différence entre travailler avec des objets locaux et distants.