La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours 12 Contenu du cours : RMI : a quoi ca sert Comment ca marche La RMIRegistry Créer un serveur RMI La sérialisation Créer un client RMI Deploiement.

Présentations similaires


Présentation au sujet: "Cours 12 Contenu du cours : RMI : a quoi ca sert Comment ca marche La RMIRegistry Créer un serveur RMI La sérialisation Créer un client RMI Deploiement."— Transcription de la présentation:

1 Cours 12 Contenu du cours : RMI : a quoi ca sert Comment ca marche La RMIRegistry Créer un serveur RMI La sérialisation Créer un client RMI Deploiement dune application RMI Téléchargement des Stubs & Securite Références

2 Remote Method Invocation Le RMI permet à des objets distants de communiquer par appels de méthodes. Il permet de construire des applications java distribuées, reposant sur des composants (objets) interopérables. A quoi ça sert ? 2

3 Remote Method Invocation Les composants Une application distribuée en RMI comprend : Une (ou plusieurs) RMIregistry : Ce composant logiciel (inclus dans la jdk) agit comme un service de nommage (annuaire) entre les différents composants des applications RMI. Il maintient une structure de noms arborescente. Les objets désirant proposer leurs services (serveurs) à des clients distants s'inscrivent dans cette structure (opérations de bind-rebind). Les objets désireux d'utiliser ces services (clients) demandent à la registry de leur trouver un serveur adéquat ( opérations de lookup ). Un (ou plusieurs) serveur(s) : Un serveur propose ses services/méthodes à des objets distants, c'est dans la création des serveurs que l'effort de programmation est le plus important. Un (ou plusieurs) client(s) : Un client requiert les services (appelle les méthodes) d'un serveur distant, ces appels de méthodes sont aussi simples que s'il s'agissait de manipuler des objets locaux. 3

4 Remote Method Invocation Comment ça marche ? JVM B JVM A Objet Client Objet Serveur RMI registry 2-Le client demande à la registry un serveur. 1-Le serveur s'enregistre auprès de la registry. 3-Le client appelle des méthodes du serveur. Le schéma d'utilisation typique (et le plus simple ) de RMI, est basé sur ces 3 étapes. 4

5 Remote Method Invocation La RMI registry (reggie) La RMI registry est une application (RMI :) )créant un processus qui écoute et accepte les connexions (par défaut, sur le port 1099), elle maintient une structure de noms hiérarchisée. racine nomObjet1 objet1 nomRepertoire1 nomObjet2 nomObjet3 objet2 objet3 Ici, l'objet1 est associé au nom : "/nomObjet1" l'objet2 est associé au nom : "/nomRepertoire1/nomObjet2" l'objet3 est associé au nom : "/nomRepertoire1/nomObjet3" 5

6 Objet Serveur Remote Method Invocation Créer un serveur Le but de l'intéropérabilité est de pouvoir exécuter les méthodes d'un objet distant. Un client n'est pas intéressé par l'implémentation propre des méthodes du serveur, c'est le coeur de la notion de services. Un serveur peut vouloir cacher son implémentation des services qu'il publie, pour des raisons de sécurité. Un serveur n'est jamais téléchargé sur le poste client. Un serveur est décrit par une interface, c'est à travers cette interface que ses méthodes sont accessibles aux clients. 6 JVM B JVM A Objet Client Interface du serveur

7 Remote Method Invocation Créer une interface pour un serveur Le package java.rmi et les sous packages contiennent l'API RMI. Les interfaces décrivant les serveurs RMI doivent étendre java.rmi.Remote. Cette interface est un marqueur. Seules les méthodes décrites dans l'interface d'un serveur RMI seront accessibles à distance. Les interfaces des serveurs RMI doivent dériver de java.rmi.Remote, cette interface est un marqueur : elle ne contient ni méthode ni constante. Chaque méthode de l'interface déclare une RemoteException dans sa clause throws Toutes les méthodes des interfaces de serveurs doivent déclarer une RemoteException dans leur clause Throws. 7

8 Remote Method Invocation Contraintes sur les méthodes distantes Les arguments et types de retour des méthodes publiées en RMI sont soumis à des contraintes, ils peuvent être : des types primitifs (ie int, long, boolean...) des objets distants (ie UnicastRemoteObject et classes filles) des objets sérialisables et c'est tout ! Les objets sérialisables sont ceux qui implémentent l'interface marqueur java.io.Serializable. Ces objets sont marqués comme étant capables de se convertir en un flux d'octets auto- decrits. A peu près toutes les classes de java sont sérialisables, même les classes de swing ! Seul un nombre restreint de classes ne sont pas sérialisables, il faut alors trouver des moyens détournés pour les transmettre sur le réseau (socket, etc..) En RMI, tous les arguments sont transmis par copie, cela signifie qu'un objet n'est pas modifié localement au retour d'un appel de méthode distant lorsqu'il est passé en argument de cette méthode. 8

9 Remote Method Invocation Créer un serveur qui implémente l'interface Le package java.rmi.server contient les classes utilisées par les serveurs RMI. Chaque méthode publiée (dont le constructeur) d'un serveur RMI doit déclarer une RemoteException dans sa clause throws. Chaque serveur RMI doit implémenter son interface. Les serveurs RMI doivent dériver de java.rmi.server.UnicastRemoteObject pour hériter du comportement de serveur RMI. Les serveurs héritent de UnicastRemoteObject et implémentent leur interface. Le constructeur des serveurs RMI doit déclarer une RemoteException dans sa clause throws, tout comme chacune de ses méthodes. 9

10 Remote Method Invocation Constructeur par défaut des serveurs Le constructeur des serveurs RMI doit déclarer une RemoteException dans sa clause throws car la classe UnicastRemoteObject en déclare une et lhéritage nous force à redéfinir un constructeur pour traiter lexception. Java.rmi.server.UnicastRemoteObject + public UnicastRemoteObject() throws RemoteException Server0Impl + public Server0Impl() { super(); } Server0Impl + public Server0Impl() throws RemoteException { super(); //optionel } Server0Impl + public Server0Impl() throws RemoteException Server0Impl Pas de raitement de lexception avec le constructeur implicite Nous devons définir un construceur qui traite lexception Server0Impl + public Server0Impl() { try { super(); } catch(Exception ex){…} } 10

11 Remote Method Invocation Déclarer un serveur RMI dans la RMIregistry Les serveurs RMI doivent être déclarés à la RMIregistry afin de rendre publics leurs services (aux clients RMI). Pour cela, on utilise la méthode statique rebind de la classe java.rmi.Naming. l'objet serveur est enregistré dans la registry. On utilise la méthode rebind ou bind pour associer un objet distant à un nom dans la structure de nom de la registry. 11

12 Remote Method Invocation Naming.Rebind(rmi://localhost/ServeurDeZero, obj); :// : / : le protocole «rmi» est indiqué optionnellemnt : représente le nom réseau de l'hôte hébergeant la registry du RMI. En pratique lhôte est toujours locahost car un serveur RMI ne peut pas faire de rebind sur une registry distante pour des raisons de sécurité. : représente le port de la registry, défaut à : représente le nom de l'objet dans la structure de noms hiérarchisée de la registry. Les urls de la registry sont toutes basées sur le même schéma. Reggie est, elle-même, un objet distribué RMI, dont les méthodes sont accessibles à des objets distants Les urls de reggie

13 Remote Method Invocation Le client La méthode lookup retourne un java.lang.Object qui doit donc être converti en "l'interface du serveur". (!ET PAS EN SERVEUR!) (cf acétates 16) On utilise la méthode statique lookup de la classe java.rmi.Naming pour obtenir une instance de serveur RMI. Ensuite, les appels distants de méthodes sont aussi simples que les appels locaux. 13 Appel distant de méthode

14 14 Remote Method Invocation Les Stubs (talons) et les Skeletons (squelettes) JVM B JVM A Objet Client Objet Serveur Le modèle dapplication distribuée hérité de CORBA Stub Les clients n'appellent pas directement les méthodes du serveur distant, ils passent par une classe de proxy (prestataire) qui s'occupe de l'aspect réseau de l'appel (timeout, sérialisation, socket,etc..). 14 Skel Appel local Appel distant Appel local réseau ordi

15 Remote Method Invocation Modèle dapplication distribuée de java2 JVM B JVM A Objet Client Objet Serveur 3-Le client appelle des méthodes du serveur par l'intermédiaire d'un proxy : le stub du serveur. Stub Dans la plate-forme java2, il ny a plus de Skeletons. Le Stub est le seul intervenant entre le client et le Serveur. 15

16 Remote Method Invocation Les Stubs Classe StubClasse Serveur Interface Serveur La classe de Stub implémente linterface du Serveur tout comme la classe du Serveur elle-même. Cest le Stub et NON le serveur qui est renvoyé par reggie. 16 Renvoyé par la registry

17 Remote Method Invocation Compilation Les stubs sont des classes java générées par le compilateur RMI : rmic. rmic génère un stub pour chaque classe désirant exporter ses méthodes (UnicastRemoteObject) L'option 1.2 est requise car.... Réglez le classpath comme pour javac Le nom complet de la classe à compiler avec rmic. Le stub généré par rmic. 17 Génération des stubs Il faut dabord compiler toutes les classes avec javac

18 Remote Method Invocation Compilation Exécution windows : exemple> compileAll exemple> rmiServer Exécution linux : exemple>./compileAll.sh exemple>./rmicServer.sh 18

19 Remote Method Invocation Exécution (1/3) On peut exécuter localement toutes les classes dune application RMI. Ce mode de déploiement est trop simple et ne reflète pas la réalité. Côté serveur (tout est sur une seule ligne ) java -cp RMI registry : "registry &" ou "start rmiregistry (sous windows) 19 Côté client java ­cp

20 Remote Method Invocation Exécution (1/3) Exécution windows : exemple> startreggie exemple> executeServer-1 exemple> executeClient-1 Pour tuer reggie : Fermer sa fenêtre Exécution linux : exemple>./startreggie.sh exemple>./executeServer-1.sh exemple>./executeClient-1.sh Pour tuer reggie, : Killall –9 rmiregistry 20

21 Remote Method Invocation Critiques de lexécution (1/3) *Le mode de déploiement proposé précédemment est trop simple. *Il ne rend pas compte de laspect « distribué » de lapplication car le client et le serveur sont au même endroit. *De plus, le Stub du serveur doit être déployé avec le serveur. Ce qui est trop statique…et peut être évité. 21

22 Remote Method Invocation Téléchargement automatique des stubs Stub JVM B Objet Serveur RMI registry bind codebase Stub Lorsquun client veut utiliser un serveur mais quil ne possède pas le Stub du serveur, le stub peut être télécharger automatiquement à partir du codebase donné par le serveur. Côté serveur Lookup JVM B Objet Client RMI registry Stub Côté client 22

23 Remote Method Invocation Un client sécuritaire Lorsquune JVM désire télécharger du code depuis une autre JVM, elle doit mettre en place une politique de sécurité. La politique de sécurité sera indiquée à la JVM avec loption –Djava.security.policy grant { permission java.net.SocketPermission "*: ", "connect,accept"; } Mise en place dun gestionnaire de sécurité Définition de la politique de sécurité dans un fichier texte Un gestionnaire de sécurité applique une politique de sécurité. 23 public class ClientSecure

24 Remote Method Invocation Exécution (2/3) Ce mode de déploiement va simuler deux machines différentes sur un même ordinateur. Chaque répertoire pourrait se trouver sur un ordinateur différent. Côté serveur /tmp/A/ package cours12.client package cours12.server 24 Côté client /tmp/B/ package cours12.client security.policy.file

25 Remote Method Invocation Exécution (2/3) On peut exécuter localement toutes les classes dune application RMI. En placant les fichiers dans des répertoires différents, on simule deux ordinateurs. Côté serveur (tout est sur une seule ligne ) java -Djava.rmi.server.codebase= -cp file:/tmp/A/ RMI registry : "registry &" ou "start rmiregistry" 25 Côté client (tout est sur une seule ligne ) java -Djava.security.policy= ­cp

26 Remote Method Invocation Exécution (2/3) Exécution windows : exemple> start exemple>deploy-2 A>startReggie A> executeServer-2 A>cd..\B B> executeClient-2 Pour tuer reggie : Fermer sa fenêtre Pour supprimer les fichiers de déploiement: exemple>deleteDeploy Exécution linux : exemple>./deploy-2.sh exemple> cd tmp/A A>./startreggie.sh A>./executeServer-2.sh A> cd../B B>./executeClient-2.sh Pour tuer reggie, : Killall –9 rmiregistry Pour supprimer les fichiers de déploiement: exemple>./deleteDeploy.sh 26

27 Remote Method Invocation Critiques de lexécution (2/3) *Lapplication nest pas encore totalement distribuée, le client et le serveur doivent être sur la même machine. *Le Stub du serveur est maintenant téléchargé dynamiquement par le client lorsquil se connecte à reggie. Ce qui impose au client lutilisation dune politique de sécurité : security.policy.file 27

28 Remote Method Invocation Exécution (3/3) Ce mode de déploiement va simuler deux machines différentes sur un même ordinateur. Chaque répertoire pourrait se trouver sur un ordinateur différent. Côté serveur /tmp/A/ package cours12.client package cours12.server + reggie 28 Côté client /tmp/B/ package cours12.client security.policy.file Serveur web Code téléchargeable -Soit une arborescence de classes -Soit un fichier jar

29 Remote Method Invocation Exécution (3/3) Côté serveur (tout est sur une seule ligne ) java -Djava.rmi.server.codebase= -cp RMI registry : "registry &" ou "start rmiregistry" 29 Côté client (tout est sur une seule ligne ) java -Djava.security.policy= ­cp Serveur Web : Contient le fichier jar cvf rmi-deploy.jar -C cours12/server/Server0Impl_Stub.class -C cours12/client/Server0.class

30 Remote Method Invocation Exécution (3/3) Exécution windows : exemple> start exemple> jarAll exemple>deploy-3 A>startReggie A> executeServer-3 A>cd..\B B> executeClient-3 Pour tuer reggie : Fermer sa fenêtre Pour supprimer les fichiers de déploiement: exemple>deleteDeploy Exécution linux : exemple>./deploy-3.sh exemple> cd tmp/A A>./startreggie.sh A>./executeServer-3.sh A> cd../B B>./executeClient-3.sh Pour tuer reggie, : Killall –9 rmiregistry Pour supprimer les fichiers de déploiement: exemple>./deleteDeploy.sh 30

31 Remote Method Invocation Exécution distribuée *Modifier la classe ClientSecure afin que son URL de lookup pointe vers une autre machine qui héberge une registry et un serveur0. *Ensutie, recompilez le programme et exécuter le client de nouveau. *Notre application est désormais totalement distribuée. 31

32 Remote Method Invocation Un mot sur l'organisation des fichiers et la sécurité D'une manière générale, on essaye de faire en sorte que le client ne connaisse pas directement les classes du serveur et que le serveur ne connaisse pas les classes du clients. Il est très judicieux de placer les interfaces utilisées par le client et le serveur dans un package séparé de ceux du client et du serveur. L'un des avantages de RMI sur Corba réside dans la possibilité, pour un client, de télécharger les stubs des serveurs avant de les utiliser. De la même manière, un "serveur" peut télécharger certaines classes depuis un client lorsque ces classes sont inconnues de la jvm du serveur. Cette technologie, transparente pour l'utilisateur et le programmeur, imposent des contraintes très fortes au niveau de la sécurité, puisqu'il s'agit de donner le droit à du code étranger" de s'exécuter sur un hôte qui ne les connait pas. Le modèle de sécurité de la jdk1.2 impose l'utilisation de fichiers "policy" définissant les permissions données à du code étranger", en voici un exemple : grant { permission java.net.SocketPermission "*: ", "connect,accept"; permission java.io.FilePermission "c:\\home\\ann\\publihtml\\classes\\-", "read"; permission java.io.FilePermission "c:\\home\\jones\\publihtml\\classes\\-", "read"; }; 32 Les fichiers de sécurité peuvent être générés par policytool

33 Un excellent tutorial de sun : Un deuxième : La page de RMI : Téléchargement dynamique de code : Le formats des fichiers de sécurité de la jdk : Remote Method Invocation références Les tutoriaux et leur FAQs sont une aide précieuse pour les développeurs d'application RMI. 33

34 Remote Method Invocation LActivation des serveurs RMI Les objets serveurs RMI doivent être maintenus en vie aussi longtemps quun client peut les utiliser. Mais cette technique a des inconvénients : - Un serveur qui nest utilisé que rarement doit rester en vie tout le temps et donc consommera des ressouces inutilement. - Le coût de maintenir de nombreux objets serveurs en vie peut être prohibitif en terme de ressources et dégrader considérablement les performances du serveur. Il serait bon de pouvoir activer les objets uniquement lorsquils sont utilisés. Lorsquun objet est inutilisé, il devrait pouvoir se désactiver et ne plus consommer de ressouces Cest précisément ce que permet lactivation. 34

35 Remote Method Invocation LActivation des serveurs RMI 35 Les acteurs de lactivation : -rmid : le démon dactivation, est un logiciel qui est responsable dactiver les objets lorsquune demande dinvocation de méthode leur est destiné. -Les groupes dactivations : sont les jvms qui vont hébergés les objets activés. -Lapplication de démarrage : enregistre lobjet dans le framework dactivation. -Lobjet activable : est le serveur RMI que lon désire activer au besoin. -( Les descripteurs dactivation : sont des classes qui contiennent toute linformation nécessaire à lactivation dun objet.) Le framework dactivation fait intervenir plusieurs entités pour assurer lactivation des objets. Ces entités ont des rôles très distincts.

36 Remote Method Invocation LActivation des serveurs RMI Descripteur de groupe dactivation Descripteur d objet activable rmid Groupe dactivation Objet activé Enregistrement Activation 36

37 37 Remote Method Invocation LActivation des serveurs RMI Transformer un serveur RMI en objet activable est enfantin. Il suffit de lui appliquer ces deux transformations mineures. Il faut hériter de Activatable pour Rendre activable notre objet. Cette transformation nous oblige à définir un constructeur à deux paramètres qui appelera un des constructeurs de la classe mère.

38 38 Remote Method Invocation Les applications de démarrage suivent toujours le même schéma. Installer un gestionnaire de sécurité Créer un desc. de groupe Enregistrer le groupe Créer un desc. dobjet Enregistrer le serveur On récupère un stub que lon peut placer dans reggie.

39 39 Remote Method Invocation Exécution de lapplication de démarrage Côté serveur (tout est sur une seule ligne ) java -Djava.rmi.server.codebase= -Djava.security.policy= -cp RMI registry : "registry &" ou "start rmiregistry" Côté client (tout est sur une seule ligne ) java -Djava.security.policy= ­cp Serveur Web : Contient le fichier RMI activation daemon : rmid –J-Djava.security.policy= l &" ou "start rmid –J-Djava.security.policy= "

40 Remote Method Invocation Activation-Exécution Exécution windows : exemple> start exemple> rmicServer-2 exemple> jarAll-2 exemple>deploy-4 A>startRmid A>startReggie A> executeServer-4 A>cd..\B B> executeClient-4 Exécution linux : exemple>./rmicServer-2.sh exemple>./jarAll-2.sh exemple>./deploy-4.sh exemple> cd tmp/A A>./startreggie.sh A>./startrmid.sh A>./executeServer-4.sh A> cd../B B>./executeClient-4.sh 40


Télécharger ppt "Cours 12 Contenu du cours : RMI : a quoi ca sert Comment ca marche La RMIRegistry Créer un serveur RMI La sérialisation Créer un client RMI Deploiement."

Présentations similaires


Annonces Google