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

1 JAVA RMI Remote Method Invocation Anne BENOIT Monitrice ESISAR Laboratoire Informatique et Distribution de lIMAG (Montbonnot) 2000-2001.

Présentations similaires


Présentation au sujet: "1 JAVA RMI Remote Method Invocation Anne BENOIT Monitrice ESISAR Laboratoire Informatique et Distribution de lIMAG (Montbonnot) 2000-2001."— Transcription de la présentation:

1 1 JAVA RMI Remote Method Invocation Anne BENOIT Monitrice ESISAR Laboratoire Informatique et Distribution de lIMAG (Montbonnot)

2 2 Modèle client-serveur zUne application fait appel à des services distants zEnvironnement dexécution yFondé sur le RPC (appel de procédures à distance) ySémantique fixée par limplémentation xTraitement des pannes yMis en œuvre par échange de messages RPC : mécanisme de bas niveau

3 3 Environnements client-serveur zClient-serveur « traditionnel » yDCE (Distributed Computing Environment) xChaque fonction est utilisable via une interface normalisée. zClient-serveur « de données » yRequêtes SQL à une base de données. zClient-serveur « à objet » yJava RMI, Corba 2.x, COM zClient-serveur « à composant » yCorba 3.x, DCOM

4 4 Client-serveur « à objet » zMotivations ypropriétés de lobjet (encapsulation, modularité, réutilisation, polymorphisme, composition) yobjet : unité de désignation et de distribution zéléments d'une "invocation" yréférence d'objet yidentification d'une méthode yparamètres d'appel et de retour (y compris signal d'exception) xpassage par valeur : types élémentaires et types construits xpassage par référence zobjets "langage" yreprésentation propre au langage : instance d'une classe yexemple : Java RMI zobjets "système" yreprésentation "arbitraire" définie par l'environnement d'exécution yexemple : CORBA

5 5 Appel de méthode à distance Remote Method Invocation (RMI) Methode_1 Methode_n état objet serveurobjet client. appel Système de communication Talon serveur Talon client référence Référence d'objet + méthode + arguments Résultat ou exception désignation envoi de requêtes exécution de requête retour de résultat

6 6 Rôle des talons Talon client - stub zCest la procédure dinterface du site client yqui reçoit lappel en mode local yle transforme en appel distant en envoyant un message. yreçoit les résultats après l'exécution yretourne les paramètres résultats comme dans un retour de procédure. Talon serveur - skeleton zCest la procédure sur le site serveur yqui reçoit lappel sous forme de message, yfait réaliser lexécution sur le site serveur par la procédure serveur (choix de la procédure) yretransmet les résultats par message.

7 7 Java RMI zUn RPC objet intégré à Java zInteraction d'objets situés dans des espaces d'adressage différents sur des machines distinctes zSimple à mettre en œuvre : un objet distribué se manipule comme tout autre objet Java

8 8 JVM Java RMI Architecture (1) Objet Client Objet Serveur StubStubSkeletonSkeleton Remote Reference Layer TransportTransport

9 9 Java RMI Architecture (2) JVM Client JVM Serveur ClientClient SkeletonSkeleton rmiregistryrmiregistry ServeurServeur NamingNaming

10 10 Java RMI Mode opératoire coté serveur z1 - L'objet serveur s'enregistre auprès du Naming de sa JVM (méthode rebind) z2 - L objet skeleton est créé, celui-ci crée le port de communication et maintient une référence vers l'objet serveur z3 - Le Naming enregistre l'objet serveur, et le port de communication utilisé auprès du serveur de noms zL'objet serveur est prêt à répondre à des requêtes

11 11 Java RMI Architecture (3) JVM Client JVM Serveur NamingNaming ClientClient StubStub SkeletonSkeleton rmiregistryrmiregistry ServeurServeur NamingNaming

12 12 Java RMI Mode opératoire coté client z4 - L'objet client fait appel au Naming pour localiser l'objet serveur (méthode lookup) z5 - Le Naming récupère les "références" vers l'objet serveur,... z6 - crée lobjet Stub et... z7 - rend sa référence au client z8 - Le client effectue l'appel au serveur par appel à lobjet Stub

13 13 Java RMI Manuel d'utilisation zDéfinition de l'interface de l'objet réparti yinterface : "extends java.rmi.Remote" ymethodes : "throws java.rmi.RemoteException » yparamètres sérialisables : "implements Serializable » zEcrire une implémentation de l'objet serveur yclasse : "extends java.rmi.server.UnicastRemoteObject"

14 14 Java RMI Mode opératoire zcodage ydescription de linterface du service yécriture du code du serveur qui implante linterface yécriture du client qui appelle le serveur zcompilation ycompilation des sources (javac) ygénération des stub et skeleton (rmic) zactivation ylancement du serveur de noms (rmiregistry) ylancement du serveur ylancement du client

15 15 RPC Java RMI : écriture de linterface zMêmes principes de base que pour linterface dun objet local zPrincipales différences ylinterface distante doit être publique ylinterface distante doit étendre linterface java.rmi.Remote ychaque méthode doit déclarer au moins lexception java.rmi.RemoteException ytout objet distant passé en paramètre doit être déclaré comme une interface (passage de la référence de lobjet) ytout objet local passé en paramètre doit être sérialisable

16 16 fichier Hello.java public interface Hello extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException; } fichier Hello.java public interface Hello extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException; } Java RMI Exemple : Interface Description de l interface

17 17 RPC Java RMI : écriture du serveur zServeur = la classe qui implémente linterface yspécifier les interfaces distantes qui doivent être implémentées xobjets locaux passés par copie (il doivent implémenter linterface java.io.serialisable) xobjets distants passés par référence (actuellement référence à un stub) ycest un objet java standard xdéfinir le constructeur de lobjet xfournir la mise en œuvre des méthodes pouvant être appelée à distance xainsi que celle des méthodes napparaissant dans aucune interface implémentée ycréer au moins une instance du serveur yenregistrer au moins une instance dans le serveur de nom (rmiregistry)

18 18 fichier HelloServeur.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloServeur extends UnicastRemoteObject implements Hello { private String msg; // Constructeur public HelloServeur(String msg) throws java.rmi.RemoteException { this.msg = msg; } // Implémentation de la méthode distante. public String sayHello() throws java.rmi.RemoteException { return "Hello world: " + msg; } … fichier HelloServeur.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloServeur extends UnicastRemoteObject implements Hello { private String msg; // Constructeur public HelloServeur(String msg) throws java.rmi.RemoteException { this.msg = msg; } // Implémentation de la méthode distante. public String sayHello() throws java.rmi.RemoteException { return "Hello world: " + msg; } … Java RMI Exemple : Serveur Réalisation du serveur

19 19 fichier HelloServeur.java … public static void main(String args[]) { try { // Crée une instance de l objet serveur. HelloServeur obj = new HelloServeur("HelloServeur"); // Enregistre l'objet créer auprès du serveur de noms. Naming.rebind("//suldrun/mon_serveur", obj); System.out.println("HelloServer" + " bound in registry"); } catch (Exception exc) {… } } fichier HelloServeur.java … public static void main(String args[]) { try { // Crée une instance de l objet serveur. HelloServeur obj = new HelloServeur("HelloServeur"); // Enregistre l'objet créer auprès du serveur de noms. Naming.rebind("//suldrun/mon_serveur", obj); System.out.println("HelloServer" + " bound in registry"); } catch (Exception exc) {… } } Java RMI Exemple : Serveur Réalisation du serveur (suite) ATTENTION : dans cet exemple le serveur de nom doit être activé avant la création du serveur

20 20 Java RMI Activation du serveur de nom par le serveur fichier HelloServeur.java public static void main(String args[]) { int port; String URL; try {// transformation d une chaîne de caractères en entier Integer I = new Integer(args[0]); port = I.intValue(); } catch (Exception ex) { System.out.println(" Please enter: Server "); return; } try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port); // Création d une instance de l objet serveur HelloServeur obj = new HelloServeur("Coucou, je suis le serveur de port : "+port); // Calcul de l URL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) {... fichier HelloServeur.java public static void main(String args[]) { int port; String URL; try {// transformation d une chaîne de caractères en entier Integer I = new Integer(args[0]); port = I.intValue(); } catch (Exception ex) { System.out.println(" Please enter: Server "); return; } try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port); // Création d une instance de l objet serveur HelloServeur obj = new HelloServeur("Coucou, je suis le serveur de port : "+port); // Calcul de l URL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) {... Réali- sation du serveur (autre approche)

21 21 fichier HelloClient.java import java.rmi.*; public class HelloClient { public static void main(String args[]) { try { // Récupération d'un stub sur l'objet serveur. Hello obj = (Hello) Naming.lookup("//suldrun/mon_serveur"); // Appel d'une méthode sur l'objet distant. String msg = obj.sayHello(); // Impression du message. System.out.println(msg); } catch (Exception exc) { … } } fichier HelloClient.java import java.rmi.*; public class HelloClient { public static void main(String args[]) { try { // Récupération d'un stub sur l'objet serveur. Hello obj = (Hello) Naming.lookup("//suldrun/mon_serveur"); // Appel d'une méthode sur l'objet distant. String msg = obj.sayHello(); // Impression du message. System.out.println(msg); } catch (Exception exc) { … } } Java RMI Exemple : Client Réalisation du client

22 22 Java RMI Compilation zCompilation de linterface, du serveur et du client yjavac Hello.java HelloServeur.java HelloClient.java zGénération des talons yrmic HelloServeur skeleton dans HelloServeur_Skel.class stub dans HelloServeur_Stub.class.

23 23 Java RMI Déploiement z1) Activation du serveur de nom ystart rmiregistry (W95) ou rmiregistry & (Unix) z2) Activation du serveur yjava HelloServeur yjava -Djava.rmi.server.codebase=http://suldrun/… HelloServeur xpath indiquant à quelle endroit la machine virtuelle cliente va pouvoir chercher le code du stub xNécessaire si le client et le serveur ne sont pas sur la même station z3) Activation du client yjava HelloClient

24 24 Java RMI Principe de lappel de procédure Java VM Client R_objet1.m () Stub R_objet1 Skeleton R_objet1 m ()

25 25 Java RMI Passage en paramètre dun objet local Java VM Client R_objet1.m ( O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( O2 ) O2 clone_O2

26 26 Java RMI Passage en paramètre dun objet distant Java VM Client R_objet1.m ( R O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( R objet ) Stub R_O2 Objet O2

27 27 Java RMI Passage en paramètre dun objet distant Java VM Client R_objet1.m ( R O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( R objet ) Stub R_O2 Objet O2 Stub R_O2

28 28 Chargement dynamique et sécurité zSi le code du stub nest pas présent sur le site local, le protocole RMI prévoit le chargement dynamique du stub en utilisant un serveur web et le protocole HTTP yjava -Djava.rmi.server.codebase=http://suldrun/… HelloServeur zSi chargement dynamique… yle chargeur dynamique utilisé par RMI (RMIClassLoader) regarde si la classe demandée correspond au niveau de sécurité requis xutilisation dun SecurityManager ycréer et installer le « gestionnaire de sécurité » xSystem.setSecurityManager(new RMISecurityManager());

29 29 Java RMI : bilan zTrès bon exemple de RPC yfacilité dutilisation yintégration au langage Java et à linternet yutilisation de lapport de Java xHétérogénïté des plateformes -> machine virtuelle xPassage par valeur -> sérialisation xPersistance -> sérialisation xAbsence de talon -> chargement dynamique xDésignation -> URL zDes ouvertures yAppel asynchrones ? yUtilisation d autres protocoles réseaux ?

30 30 RPC asynchrone zLe client poursuit son exécution après lémission du message dappel yla procédure distante sexécute en parallèle avec la poursuite du client et retourne les paramètres résultats en fin de son exécution yle client récupère les résultats quand il en a besoin (primitive spéciale) yavantage : parallélisme plus important ycritique le client ne retrouve pas la sémantique de lappel de procédure xcontrôle de la récupération des résultats : pb de synchronisation (risque derreur)

31 31 Appel asynchrone avec futur zFutur yobjet particulier pour la récupération des résultats yfutur explicite : xconstruction avant lappel de lobjet dans lequel les résultats seront déposé yfutur implicite : xcest le mécanisme dappel qui construit les objets résultats ymode dutilisation : xla lecture rend un résultat nul si le résultat nest pas disponible xla lecture bloque le client si le résultat nest pas disponible

32 32 Les limites du modèle client- serveur zServices pour la construction dapplications réparties yle RPC est un mécanisme de bas niveau ydes services additionnels sont nécessaires pour la construction dapplications réparties (désignation, fichiers répartis, sécurité, etc.) xCORBA, EJB,... zOutils de développement ylimités à la génération automatique des talons ypeu (ou pas) doutils pour le déploiement et la mise au point d'applications réparties

33 33 Plan de la présentation zIntroduction (Client-Serveur) yModèle client-serveur, environnement client-serveur yclient-serveur à objet zArchitecture de Java RMI ySchéma global, rôle des talons yArchitecture, mode opératoire zMode opératoire yCodage : interface, serveur, client yCompilation et activation zPassage des paramètres yobjet local, objet distant, chargement dynamique zConclusion

34 34 Exemple #Compilation cd Hello javac Hello.java HelloServeur.java HelloClient.java #Génération des talons rmic HelloServeur #Lancement du serveur de noms rmiregistry & #Lancement du serveur dobjets java HelloServeur >> HelloServeur bound in registry #Dans une autre fenêtre, lancement du client java HelloClient >> Hello world : HelloServeur


Télécharger ppt "1 JAVA RMI Remote Method Invocation Anne BENOIT Monitrice ESISAR Laboratoire Informatique et Distribution de lIMAG (Montbonnot) 2000-2001."

Présentations similaires


Annonces Google