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

Invocation de Méthode à distance Exemple : Java Remote Method Invocation ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc À travailler seuls.

Présentations similaires


Présentation au sujet: "Invocation de Méthode à distance Exemple : Java Remote Method Invocation ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc À travailler seuls."— Transcription de la présentation:

1 Invocation de Méthode à distance Exemple : Java Remote Method Invocation ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc À travailler seuls Concepts généraux Mise en œuvre Java

2 2 Maturation de la technologie orientée objet Crediter debiter Compte AM montant Objet = module logiciel Compte AM Crediter 1000 Interaction entre objets : message

3 3 Objets + Messages module logiciel indépendance de la programmation et de la construction unité autonome Méthode = comportement des objets Message = interaction entre objets de lapplication Application = Collection d objets interagissant

4 4 Classes et héritage Mécanisme dabstraction + Généralisation Surcharge des méthodes par héritage

5 5 Classe et Composition CARROSSERIE MOTEUR VEHICULE

6 6 Objets = briques logicielles Assembler des briques élémentaires Réduire la complexité des systèmes dinformation Séparation entre interface et implémentation Représentation et types de données Mécanismes dabstraction

7 7 Maturation des communications Client Serveur Des programmes (fonctionnant sur des machines différentes) qui communiquent au travers du réseau. Un programme Client envoie des requêtes à un programme serveur (qui prend en charge limplémentation)

8 8 Infrastructure Client Serveur CLIENT SERVEUR requêtes

9 9 Client Serveur

10 10 Objets distribués Comment trouver une solution ? –Programmation OO = envoi de requêtes entre plusieurs objets –Ne peut-on pas placer des objets sur différents ordinateurs de sorte quils puissent s envoyer directement des messages ?

11 11 Infrastructure Objets Distribués ClientClient ServeurServeur Objet1 Objet2Objet3

12 12 Invocation de méthodes distantes Mécanisme qui permet à des objets localisés sur des machines distantes de séchanger des messages (invoquer des méthodes)

13 13 Invocation de méthodes distantes Semble simple en théorie un peu plus complexe en réalité !!!

14 14 RMI Heureusement, on utilise Java ;-) –Java Remote Method Invocation est la solution à notre problème –RMI permet à des objets Java d invoquer des méthodes sur des objets localisés dans des JVM différentes, et même distantes sur le réseau, et ceci de façon quasi transparente !!!

15 15 Invocation de méthodes distantes

16 16 Stubs et encodage des paramètres le code dun objet client invoque une méthode sur un objet distant –Utilisation dun objet substitut dans la JVM du client : le stub (souche) de l objet serveur

17 17 Stubs et encodage des paramètres

18 18 Générateur de stubs Les stubs gèrent la communication ainsi que l'encodage des paramètres Processus évidemment complexe... Entièrement automatique –Un outil permet de générer les stubs pour les OD

19 19 Stubs et rmic La commande rmic du jdk rend transparent la gestion du réseau pour le programmeur –une référence sur un ODréférence son stub local syntaxe = un appel local –objetDistant.methode()

20 20 Un exemple : le sempiternel « Hello World » !!!

21 21 Interfaces et classes prédéfinies

22 22 L interface HelloWorld import java.rmi.*; interface HelloWorld extends Remote { public String sayHello() throws RemoteException; } Interface = protocole d application

23 23 Rôle de l interface HelloWorld

24 24 L exception RemoteException doit être déclarée par toutes les méthodes distantes –Appels de méthodes distants moins fiables que les appels locaux Serveur ou connexion peut être indisponible Panne de réseau... Les exceptions

25 25 HelloWorld hello =...; // Nous verrons par la suite comment obtenir // une première référence sur un stub String result = hello.sayHello(); System.out.println(result); Du côté client

26 26 Implémentation de la classe qui gère les méthodes de l interface HelloWorld // Classe d'implémentation du Serveur public class HelloWorldImpl extends UnicastRemoteObject implements HelloWorld { public String sayHello() throws RemoteException { String result = « hello world !!! »; System.out.println(« Méthode sayHello invoquée... » + result); return result; } Du côté Serveur

27 27 doit implanter l interface HelloWorld doit étendre la classe RemoteServer du paquetage java.rmi RemoteServer est une classe abstraite UnicastRemoteObject est une classe concrète qui gére la communication et les stubs Classe d implémentation

28 28 Classe d implémentation HelloWorld HelloWorldImpl

29 29 On sait implanter un serveur d un côté, et appeler ses méthodes de l autre MAIS Comment obtient-on une référence vers un stub de notre objet serveur ??? Référence sur un objet

30 30 –On pourrait appeler une méthode sur un autre objet serveur qui renvoie une référence sur le stub... –Mais quoi qu il en soit, le premier objet doit lui aussi être localisé (La poule et l œuf) !!! –On a alors recours a un Service de Nommage Localisation des objets de serveur

31 31 Obtention d'une première référence sur un objet distant : « bootstrap » à laide dun Service de Nommage ou Annuaire Enregistrement des références d'objets dans l'annuaire afin que des programmes distants puissent les récupérer Les Services de Nommage

32 32 Implémentation d'un service de nommage Fourni en standard avec RMI Permet d'enregistrer des références sur des objets de serveur afin que des clients les récupèrent On associe la référence de l'objet à une clé unique (chaîne de caractères) Le client effectue une recherche par la clé, et le service de nommage lui renvoie la référence distante (le stub) de l'objet enregistré pour cette clé Exemple : Le RMIRegistry

33 33 –Programme exécutable fourni pour toutes les plates formes –S'exécute sur un port (1099 par défaut) sur la machine serveur –Pour des raisons de sécurité, seuls les objets résidant sur la même machine sont autorisés à lier/délier des références –Un service de nommage est lui-même localisé à l'aide d'une URL Le RMIRegistry

34 34 du package java.rmi –permet de manipuler le RMIRegistry –supporte des méthodes statiques permettant de Lier des références d'objets serveur –Naming.bind(...) et Naming.rebind(...) Délier des références d'objets serveur –Naming.unbind(...) Lister le contenu du Naming –Naming.list(...) Obtenir une référence vers un objet distant –Naming.lookup(...) La classe Naming

35 35 –Le Service de Nommage n'a pas pour fonction le référencement de tous les objets de serveur Il devient vite complexe de gérer l'unicité des clés –La règle de bonne utilisation du Naming est de lier des objets qui font office de point d'entrée, et qui permettent de manipuler les autres objets serveurs Remarque

36 36 Rappel –On veut invoquer la méthode sayHello() d'un objet de serveur distant de type HelloWorld depuis un programme Java client Nous allons devoir coder –L'objet distant –Le serveur –Le client –Et définir les permissions de sécurité et autres emplacements de classes... Conception, implémentation et exécution de l'exemple

37 37 1) définir une interface Java pour un OD 2) créer et compiler une classe implémentant cette interface 3) créer et compiler une application serveur RMI 4) créer les classes Stub ( rmic ) 5) démarrer rmiregistry et lancer lapplication serveur RMI 6) créer, compiler et lancer un programme client accédant à des OD du serveur Processus de développement

38 38 Que doit connaître le client ? Lorsqu un 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

39 39 Que 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é

40 40 Que 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

41 41 Chargement dynamique des classes Problème de sécurité Le programme client télécharge du code sur le réseau Ce code pourrait contenir des virus ou effectuer des opérations non attendues !!! Utilisation d un gestionnaire de sécurité pour les applications de clients RMI Possibilité de créer des gestionnaires de sécurité personnalisés pour des applications spécifiques RMI fournit des gestionnaires de sécurité suffisants pour un usage classique

42 42 Pour ne plus déployer les classes du serveur chez le client Utilisation des chargeurs de classes qui téléchargent des classes depuis une URL Utilisation d un serveur Web qui fournit les classes Ce que ça change Bien entendu, les classes et interfaces de l objet distant ne changent pas Le code du serveur ne change pas le client et la façon de le démarrer sont modifiés Et lancer un serveur Web pour nos classes Chargement dynamique

43 43 Séparation des classes –Serveur (fichiers nécessaires a l'exécution du serveur) HelloWorldServer.class HelloWorldImpl.class HelloWorld.class HelloWorldImpl_Stub.class –Download (fichiers de classes à charger dans le programme client) HelloWorldImpl_Stub.class –Client (fichiers nécessaires au démarrage du client) HelloWorld.class HelloWorldClient.class Hello World : chargement dynamique

44 44 Mettre les classes Download dans le répertoire des documents Web du serveur Web, accessibles via une URL Le programme Java client doit pouvoir se connecter aux ports de la base de registres RMI et des implémentations des objets de serveur, ainsi qu'au port du serveur Web Le client intègre un gestionnaire de sécurité RMI pour les stubs téléchargés dynamiquement Les étapes

45 45 Passage de paramètres On sera souvent amenés a 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 –Les objets distants

46 46 Passage 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 !!!

47 47 Appel de Procédure à Distance CLIENT SERVEUR F(1, x) marshalling unmarshalling F(1,x) 10

48 48 Langages de spécifications Spécifications des types de données qui transitent sur le réseau XDR et RPC de SUN Protocole := CHOICE { requete [0] REQUETE, reponse [1] REPONSE } Programme protocol{ version { REPONSE rerep(REQUETE) = 1 }= 1 } = ASN.1 et norme ISO

49 49 Générateurs de Stubs RPCGEN / MAVROS ASN1 XDR Librairie marshalling et unmarshalling squelettes du client et du serveur Spécifications des données Générateurs Types de données C Lisp Java Types de données C Fichiers générés


Télécharger ppt "Invocation de Méthode à distance Exemple : Java Remote Method Invocation ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc À travailler seuls."

Présentations similaires


Annonces Google