parallélisme en Java - partie3
R.M.I (Remote Method Invocation) permet d’invoquer à distance des méthodes, et de construire des applications java distribuées.
Une application distribuée se présente sous forme d’un ensemble de classes distribuées sur un réseau. La technologie RMI s’inspire du protocole RPC qui permet la gestion des messages dans le modèle client-serveur, et peut être utilisée avec le CORBA (Common Object Request Broker Architecture) qui fonctionne sous plusieurs langages. Le protocole l’IIOP (internet InterObject Protocol) permet l’interopérabilité entre RMI et CORBA.
I. La programmation distribuée en java : RMI
1. Présentation :
RMI est une version légère du CORBA, il a le même modèle de programmation mais s’utilise de manière plus simplifiée.
RMI assure la communication entre le serveur et le client via le protocole TCP/IP et utilise les sockets de façon interne sans que l’utilisateur les gère. La gestion de sécurité se fait pat la classe RMISecurityManager et en ce qui concerne la mémoire distribuée un ramasse miettes similaire à celui de la JVM est utilisé.
L'objectif à atteindre est d’instancier un objet sur une machine A et l'utiliser sur une autre machine B de façon tout à fait transparente en ayant l'illusion qu'il fait partie intégrante de la machine B.
2. Architecture Java RMI :
Les stubs et les sekeleton sont les intermédiaires entre le client et le serveur ils gèrent le transfert distant des données comme suit :
Stub :
- représentant local de l’objet distant qui implémente les méthodes de l’objet distant.
- Il prépare les données à émettre et lit les données reçues.
Skeleton :
- Relais du côté serveur.
- Appel la méthode de l’objet local dans le serveur.
- Il emballe les données à émettre au client.
La couche de gestion des références distribuées :
- Utilise le processus rmiregistry, les clients trouvent les services distants en utilisant ce processus qui est un service d’annuaire.
- Ce service traduit les références locales vers les objets en des références distantes.
La couche transport :
- Ecoute les appels entrants et établit et gère les connexions entre les sites distants via le protocole TCP/IP.
- Utilise les classes Socket et SocketServer sans que le programmeur les gère.
3. Schéma de fonctionnement :
Pour utiliser RMI il faut suivre les étapes suivantes :
a. On exécute rmiregistry.
b. On exécute le serveur.
c. On crée l’objet distant.
d. On l’enregistre dans l’annuaire avec la méthode Naming.bind().
e. On exécute le client.
f. On recherche un objet distant avec la méthode Naming ?lookup().
g. L’annuaire renvoie une référence de l’objet distant.
h. On invoque une méthode distante.
i. On reçoit une valeur de retour.
Les actions citées se font soit sur la machine client soit sur la machine serveur, cependant les deux étapes suivantes peuvent se faire dans le côté client ou dans le côté serveur :
- Définir l’interface de l’objet serveur.
- Donner l’implémentation de cette interface.
4. Le package java.rmi :
Ce package rassemble différentes classes et interfaces qui permettent la programmation distribuée en java, la classe Naming est la plus importante elle permet :
- Enregistrer un objet serveur.
- Diffuser les références des objets d’un registre distant.
Elle offre les méthodes suivantes :
· Bind (adresse, objet) : enregistre un objet dans l’annuaire sous le nom de l’adresse.
· Rebind (adresse, objet) : enregistre un nouvel objet dans l’annuaire sous un nom déjà donné.
· Unbind (adress, objet) : enlève l’objet de l’annuaire.
· Lookup (adresse) : retourne une référence à l’objet distant spécifié par son adresse.
1. La mobilité des threads :
Dans les systèmes répartis on parle des agents au lieu de parler des threads, un agent mobile est un thread qui peut se déplacer sur un réseau. Les agents mobiles sont une alternative au modèle client/serveur.
Etat d’un thread java :
L’état d’un thread java est constitué de trois structures principales :
- La pile java :
Chaque thread java possède une pile créée lors de son exécution. Cette pile décrit l’état d’avancement de l’exécution, elle contient les informations sur les variables locales aux méthodes et les résultats des calculs intermédiaires, des registres sont utilisés tels que le registre de sommet ou le registre du compteur ordinal qui indique la prochaine instruction.
- Le tas d’objet :
La machine virtuelle java possède une zone mémoire partagée par tous les threads, cette zone regroupe l’ensemble des objets java crées et utilisés par les threads de la machine virtuelle.
- La zone des méthodes :
La machine virtuelle java possède une zone contenant les méthodes partagées par tous les threads. Cette zone regroupe l’ensemble des classes java utilisées par les threads de la machine virtuelle. Elle contient pour chaque classe le code de ses méthodes et de ses constructeurs.
2. Mécanismes de migration des threads:
La machine virtuelle java n’offre pas de mécanismes qui permettent cette migration, il faut donc mettre en place une extension de la JVM qui permet de rassembler les informations sur les threads et d’appliquer les traitements nécessaires.
L’extension permet la capture de l’état courant de l’exécution d’un thread java et la restauration de cet état, ce mécanisme permet de transférer ce contexte vers une machine distante et de créer un nouveau thread java semblable à celui reçu. Cette extension de la JVM a été réalisée par le laboratoire SIRAC (Systèmes informatique répartis pour applications coopératives) né en 1994 par l’ajout d’un paquetage java.lang.threadpack.