Title: Invocation de Mthode des Objets distants RMI et Corba
1 Invocation de Méthode à des Objets distants RMI
et Corba
- Applications Réparties
- AM Dery
- Merci à Rémi Vankeisbelck, Michel Riveill, Annick
Fron, Mireille Blay Fornarino etc
2Objectifs des objets répartis RAPPEL
- 1) invoquer des méthodes comme en local
- objetDistant.methode()
- 2) utiliser un objet distant (OD), sans savoir où
il se trouve, en demandant à un service dédié
de renvoyer son adresse - objetDistant
- ServiceDeNoms.recherche("monObjet")
- 3) passer un OD en paramètre dappel à une
méthode - resultat objetLocal.methode(objetDistant)
- resultat objetDistant.methode(autreObjetDistant)
- 4) récupérer le résultat dun appel distant sous
forme dun nouvel objet qui aurait été créé sur
la machine distante - ObjetDistant1 ObjetDistant2.methode()
3- Comparaison Corba RMI
- Premières informations
4Des technologies
- RMI (Remote Method Invocation) est un
- système dobjets distribués performant destiné
- au développement dapplications distribuées
- entièrement en Java
- CORBA (Common Object Request Broker Architecture)
- Plate-forme client/serveur orientée objets permet
de communiquer avec d autres langages (C,
Lisp, Smalltalk, Python)
5Panorama
JRMP
Client Stub Remote reference layer
Serveur Skeleton Remote reference layer
TCP/IP, Unicast
6CORBA par comparaison
IIOP
Client Stub Object request broker
Serveur Skeleton Object request broker
Interface IDL
TCP/IP, Unicast
7Points communs et interopérabilité
- Utilisent les sockets
- Des Protocoles
- Un propriétaire JRMP (Remote Method Protocol)
- Un protocole normalisé par lOMG IIOP
- Il existe des implémentations sur IIOP utilisées
par RMI
8Spécificité Corba gt ORB
I.5. OMA ORB
- la localisation dobjet
- la désignation des objets
- lempaquetage des paramètres (marshalling)
- le dépaquetage des paramètres (unmarshalling)
- linvocation des méthodes
- la gestion des exceptions
- l activation automatique et transparente des
objets - De plus, il fournit des caractéristiques telles
que - la liaison avec tous les langages de
programmation - un système auto-descriptif
- l interopérabilité entre les bus
9Modèle de référence OMA
CORBA
Bus dobjets répartis (O.R.B.)
10Rappel processus RMI
Interface HelloWorld
Interface HelloWorld
Code du client
Classe dimplémentation HelloWorldImpl
Code du serveur
Utilisation du registry
11Corba Interface décrite avec IDL
Client dobjets
Fournisseur d objets
Stub IDL
Bus CORBA
Squelette IDL
Objets Corba
12Étapes de mise en uvre Corba
Spécification interface IDL
Compilation interface IDL
Implantation des objets Corba
Implantation du serveur
Implantation du client
Enregistrement du serveur
Côté client
Côté serveur
Utilisation du service Nommage
13Dans les 2 cas
- Une référence à un OD peut être
- passée en argument
- retournée en résultat d un appel dans toutes les
invocations (locales ou distantes) - Un OD peut être transformé (cast) en nimporte
laquelle des interfaces qu il implémente
14L amorce client (stub) (1)
- Représentant local de l OD qui implémente ses
méthodes exportées - Transmet l invocation distante à la couche
inférieure Remote Reference Layer / ORB - Il réalise le pliage ( marshalling ) des
arguments des méthodes distantes - Dans l autre sens, il réalise le dépliage
( demarshalling ) des valeurs de retour
15L amorce client (Stub) (2)
- Il utilise pour cela la sérialisation des objets
- Il les transforme en un flot de données (flux de
pliage) transmissible par le réseau
16L amorce serveur (Skeleton)
- Réalise le dépliage des arguments reçus par le
flux de pliage - Fait un appel à la méthode de l objet distant
- Réalise le pliage de la valeur de retour
17La couche des références distantes
- Permet l obtention d une référence d objet
distant à partir de la référence locale au Stub
un service dannuaire - Rmiregistry en RMI
- Service de nommage Naming en Corba
- JNDI Interface dannuaire
18La couche de transport
- Connecte les 2 espaces d adressage (JVM pour
Java) - Suit les connexions en cours
- Ecoute et répond aux invocations
- Construit une table des OD disponibles
- Réalise l aiguillage des invocations
- Sécurité ?
19Diagramme d interaction
Stub
Skeleton
Implementation
invoke
Marshal param Send req.
Unmarshal param Invoke impl.
Return result
Return return or exc. Marshal return or exc. Send
reply
Unmarshal reply Return value or exc
20 21Passage de paramètres
- On sera souvent amenés à passer des paramètres
aux méthodes distantes... - Les méthodes distantes peuvent retourner une
valeur ou lever une exception... - On a deux types de paramètres
- Les objets locaux au client
- Les objets distants au client
22Passage de paramètres ATTENTION
- Certains objets sont copiés (les objets locaux),
d'autres non (les objets distants) - Les objets distants, non copiés, résident sur le
serveur - Les objets locaux passés en paramètre doivent
être sérialisables afin d'être copiés, et ils
doivent être indépendants de la plate-forme - Les objets qui ne sont pas sérialisables lèveront
des exceptions - Attention aux objets sérialisables qui utilisent
des ressources locales !!!
23Passage de paramètresObjets locaux RMI
- RMI permet de transporter (copier) des objets
complexes qui doivent avoir la capacité de se
mettre en série - RMI utilise les mécanismes de sérialisation
inclus dans Java (java.io) - Il faut des classes d'objets implémentant
l'interface Serializable
24Passage de paramètresObjets locaux exemple RMI
- On crée un objet sérialisable local StateObject à
deux états que l'on va passer à une méthode
distante - On crée un OD avec une méthode qui change l'état
d'un objet StateObject qu'on lui passe en
paramètre et qui le retourne - Le client crée un objet StateObject et affiche
son état - Il invoque la méthode du serveur en lui passant
l'objet à état créé et récupère le retour dans
une variable - Il affiche l'état de l'objet référencé avant
invocation, puis de celui résultant de
l'invocation
25Passage de paramètresObjets locaux exemple RMI
26Passage de paramètresObjets locaux exemple RMI
27Passage de paramètresObjets locaux exemple RMI
28Passage de paramètresObjets locaux exemple RMI
- La classe StateChangerImpl
29Passage de paramètresObjets locaux exemple RMI
30Passage de paramètresObjets locaux exemple RMI
- Démarrage du serveur
- On lance le rmiregistry
- On lance le serveur
31Passage de paramètresObjets locaux exemple RMI
32Passage de paramètresObjets locaux exemple RMI
- Démarrage du client
- Conclusion
- L'état de l'objet créé en local n'a pas changé,
par contre, l'objet retourné a un état différent - Il y a bien eu copie de l'objet
- Dans notre exemple, 2 copies !!!
- Une lors du passage de so1 en paramètre
- Lautre lors du retour de la méthode
33Passage de paramètresObjets locaux exemple RMI
34Passage de paramètresObjets distants RMI
- Passage d'objets distants
- Le passage d'un objet distant à une méthode ou
comme valeur de retour manipule en fait un stub - Exemple typique la recherche d'objets dans la
base de registres rmiregistry - HelloWorld h (HelloWorld)Naming.lookup(...)
- Retourne un stub pour un OD de type HelloWorld
- L'appelant peut ensuite manipuler l'OD au travers
du stub reçu - Pas de copie de l'objet, mais transmission du stub
35Passage de paramètresObjets distants
- Passage d'objets distants
- Très différent du passage d'objets locaux
- Les objets locaux sont copiés
- Les deux protagonistes ne manipulent pas le même
objet - Passage d'OD passage du stub
- Pas de copie
- Les deux protagonistes manipulent le même objet
au travers de son stub
36Passage de paramètresObjets distants RMI
- On va créer un OD (1) de type HelloAccessor qui
permet d'accéder à un autre OD (2) de type
HelloWorld, situé dans la même JVM - Un client va
- 1) Obtenir une référence vers l'OD (1)
- 2) Invoquer sa méthode et récupérer l'OD (2)
- 3) Invoquer la méthode sayHello() de l'OD (2)
- gt sayHello() affiche une trace dans la
console... regardons si la trace s'affiche chez
le client ou le serveur
37Passage de paramètresObjets distants exemple
RMI
38Passage de paramètresObjets distants exemple
RMI
- L'interface HelloAccessor
39Passage de paramètresObjets distants exemple
RMI
- La classe HelloAccessorImpl
40Passage de paramètresObjets distants exemple
RMI
- Le serveur HelloAccessorServer
41Passage de paramètresObjets distants exemple
RMI
- Démarrons le serveur
- 1) Démarrage du rmiregistry
- 2) Démarrage du serveur
- gt Le serveur est lancé, occupons nous maintenant
du client...
42Passage de paramètresObjets distants exemple
RMI
- Le client HelloAccessorClient
43Passage de paramètresObjets distants exemple
RMI
- Démarrage du client
- gt Pas de trace niveau client...
- Regardons la trace serveur
44Objets distants exemple RMI
45Passage de paramètresConclusion
- Il faut être vigilant quand au passage des
paramètres - Certains objets sont copiés (les objets locaux),
d'autres non (les objets distants) - Les objets distants, non copiés, résident sur le
serveur - Les objets locaux passés en paramètre doivent
être sérialisables afin d'être copiés, et ils
doivent être indépendants de la plate-forme - Les objets qui ne sont pas sérialisables lèveront
des exceptions - Attention aux objets sérialisables qui utilisent
des ressources locales !!!
46 47Que doit connaître le client ?
- Lorsquun objet serveur est passé à un programme,
soit comme paramètre soit comme valeur de retour,
ce programme doit être capable de travailler avec
le stub associé - Le programme client doit connaître la classe du
stub
48Que doit connaître le client ?
- les classes des paramètres, des valeurs de retour
et des exceptions doivent aussi être connues... - Une méthode distante est déclarée avec un type de
valeur de retour... - ...mais il se peut que l objet réellement
renvoyé soit une sous-classe du type déclaré
49Que doit connaître le client ?
- Le client doit disposer des classes de stub,
classes des objets retournés - copier les classes sur le système de fichiers
local du client (CLASSPATH)... - ...cependant, si le serveur est mis à jour et que
de nouvelles classes apparaissent, il devient
vite pénible de mettre à jour le client - C est pourquoi les clients RMI peuvent charger
automatiquement des classes de stub depuis un
autre emplacement - Il s agit du même type de mécanisme pour les
applets qui fonctionnent dans un navigateur
50Chargement dynamique des amorces
- Rappel un objet client ne peut utiliser un
objet distant qu au travers des amorces - RMI permet l utilisation des OD dont les amorces
ne sont pas disponibles au moment de la
compilation - A l exécution, RMI réclamera au serveur
l amorce client manquante et la téléchargera
dynamiquement (byte code)
51Chargement dynamique des classes
- Plus généralement, le système RMI permet le
chargement dynamique de classes comme les
amorces, les interfaces distantes et les classes
des arguments et valeurs de retour des appels
distants - C est un chargeur de classes spécial RMI qui
s en charge - java.rmi.server.RMIClassLoader
52Sécurité (1)
- RMI n autorise pas le téléchargement dynamique
de classes (avec RMIClassLoader) si
l application (ou l applet) cliente n utilise
pas de SecurityManager pour les vérifier. - Dans ce cas, seules les classes situées dans le
CLASSPATH peuvent être récupérées
53Sécurité (2)
- Le gestionnaire de sécurité par défaut pour RMI
est java.rmi.RMISecurityManager - Il doit être absolument utilisé
(System.setSecurity()) pour les applications
standalone - Pas de problèmes pour les applets, c est
l AppletSecurityManager (par défaut) qui s en
charge
54RMISecurityManager
- Il est très simple
- Vérifie la définition des classes et autorise
seulement les passages des arguments et des
valeurs de retour des méthodes distantes - Ne prend pas en compte les signatures éventuelles
des classes
55Quelques bouquins...
- Core Java Volume 2
- Par Cay S. Horstmann Gary Cornell
- Editions CampusPress
- Une référence pour les développeurs Java
- Bonne section sur RMI, servi de base pour ce
cours - Java Distributed Computing
- Par Jim Farley
- Editions O'Reilly
- Tout sur les applications reparties avec Java
- Plus technique...