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

Programmation Objet en JAVA Cours 9 : Réseau R.M.I : Remote Method Invocation (révision du cours de Patrick Itey INRIA-Sophia)

Présentations similaires


Présentation au sujet: "Programmation Objet en JAVA Cours 9 : Réseau R.M.I : Remote Method Invocation (révision du cours de Patrick Itey INRIA-Sophia)"— Transcription de la présentation:

1 Programmation Objet en JAVA Cours 9 : Réseau R.M.I : Remote Method Invocation (révision du cours de Patrick Itey INRIA-Sophia)

2 Plan

3 Le morpion en package moteurui PartieMorpion JoueurHumain JoueurHumainG JoueurGeneric Jeu Joueur JoueurMachine Au sein d un package, la communication avec l ext é rieur ne doit pas pr é sumer de l impl é mentation. Les interfaces sont une solution. interface abstract class JoueurGeneric implements Joueur

4 Exemple du morpion (suite) Partie JeuJoueur x2 Peut être un JoueurHumain ou un JoueurIA, via l impl é mentation de l interface Joueur Limplémentation du Joueur est fournie par un autre package Ce package peut être r é alis é ind é pendamment. R é partition du travail Int é gration du code garantie !

5 Morpion : Passage au réseau Association de deux architecture. –Moteur/UI VS Client/Server –Association possible : Moteur et Server Client et UI Le moteur converse avec un joueur, pas avec un server ou un client. Du point de vue du moteur, un interlocuteur : le joueur. Le joueur masque, englobe le réseau

6 UI Morpion architecture « locale » Partie JeuJoueur Le moteur JoueurGeneric JoueurHumain JoueurHumainG UI

7 Morpion architecture réseau Partie JeuJoueur UI : user interface Réseau UI JoueurNetwork

8 Morpion architecture réseau UI : user interface Réseau UI JoueurNetwork JoueurNetwork implémente linterface Joueur et assure linteraction utilisateur. Relais dinformation entre lutilisateur et le moteur : transmets à lUI le nécessaire à afficher, transmets au moteur les « ordres » de lutilisateur Le réseau est traité dans les classes UI et JoueurNetwork, comment ? Le JoueurNetwork attend la connexion de l UI avec un ServerSocket. La communication peut se faire soit via un flux de caractères (txt, xml,...), soit en serialisant des objets, soit les 2.

9 Morpion avec des sockets UI : user interface Réseau UI JoueurNetwork Dépliage Socket + InputStream Pliage Socket + OutputStream

10 Morpion avec serialization : objet distribué UI : user interface Réseau JoueurHumainG Jeu Dépliage Socket + InputStream Pliage Socket + OutputStream

11 Le réseau comme un système distribué Lidéal serait davoir un système distribué utilisant la technologie objet : Invoquer une méthode dun objet se trouvant sur une autre machine exactement comme sil se trouvait au sein de la même machine et du même JRE : objetDistant.methode(); Utiliser un objet distant (OD), sans savoir où il se trouve : objetDistant= ServiceDeNoms.recherche("monObjet"); Pouvoir passer un OD en paramètre à une méthode locale ou distante : resultat = objetLocal.methode(objetDistant); resultat = objetDistant.methode(autreOD); ObjetDistant = ObjetDistant.methode() ;

12 RMI (Remote Method Invocation) Un système dobjets distribués performant destiné au développement dapplications distribuées entièrement en Java. RMI est une core API (intégré au JDK 1.1) gratuit (différent de CORBA) et 100 % Java. RMI propose un système dobjets distribués plus simple que CORBA. RMI est uniquement réservé aux objets Java.

13 RMI : présentation Mécanisme permettant lappel de méthodes entre objets Java sexécutant sur des machines virtuelles différentes (espaces dadressage distincts), sur le même ordinateur ou sur des ordinateurs distants reliés par un réseau; utilise directement les sockets, mais cest déjà fait; code ses échanges avec un protocole propriétaire : R.M.P. (Remote Method Protocol).

14 RMI : objectifs Rendre transparent laccès aux objets distribués via le réseau Faciliter la mise en oeuvre et lutilisation dobjets distants Java Préserver la sécurité (inhérent à lenvironnement Java) –RMISecurityManager –Distributed Garbage Collector (DGC)

15 RMI : principes Un objet distant (server) : ses méthodes sont invoquées depuis une autre JVM (autre processus distant ou local) Lobjet distant est décrit par une interface (ou plus) : déclaration des méthodes distantes utilisables par le client.. Une invocation distante (RMI) concerne une méthode dun objet distant via linterface distante. Du coté client, un objet distant se manipule comme un objet local.

16 Distribution dobjets Une référence à un OD peut être passée en argument ou retournée en résultat dun appel dans toutes les invocations (locales ou distantes). Un OD peut être transformé (cast) en nimporte quelles interfaces distantes supportés par limplémentation de lobjet. Les clients (objets clients) des OD (objets serveurs) interagissent avec des interfaces distantes, jamais directement avec leurs implémentations. Les arguments locaux et les résultats dune invocation distante sont toujours passés par copie et non par référence –leurs classes doivent implémentés Serializable.

17 RMI : le passage des paramètres Largument ou la valeur de retour dune méthode distante peut être de nimporte quel type « Java » (types primitifs, classes locales ou distantes). Si jamais le type nest pas disponible localement, il est chargé dynamiquement (RMIClassLoader) pour les paramètres locaux, le transfert se fait nécessairement par copie. Pour un objet, lensemble de ses variables est « sérilializé » (Serializable). Pour les références dun OD, lobjet amorce (Stub) est passé.

18 RMI : usage des interfaces Linterface est le contrat (abstrait) liant objets serveurs et clients. Elle est destinée à être implémentée par lOD et constitue la base dappel pour les objets clients. Elle définie les signatures (noms, types de retours, paramètres) dun ensemble de méthodes et seules ces méthodes seront accessibles par un objet client. Pour RMI, linterface de départ est java.rmi.Remote : Héritons pour définir nos interfaces !

19 RMI : Exception Lexception RemoteException Les objets clients doivent traiter des exceptions supplémentaires comme RemoteException. Toute invocation distante de méthode doit lever ou traiter cette exception. –Peut se produire si la connexion a été interrompue –ou si le serveur distant ne peut être trouvé.

20 RMI : architecture Réseau Client Server Stub / Amorce Couche de références des objets (rmiregister) Stub /(Skeleton) Couche de transport (connexion des JVMs) JVM1 JVM2

21 Objets Amorces Programmes adaptateurs pour le transport des appels distants –Réalisent les appels sur la couche réseau –pliage / dépliage des paramètres A une référence dOD manipulée par un client correspond une référence damorce Les amorces sont générées par le compilateur damorces : rmic Deux types damorces pour linterface avec le réseau (sérialisation): –stub : représentant local (chez le client) de lobjet distant. –skeleton : adaptateur coté server.

22 Couches « réseau » La couche des références distantes : Permet lobtention dune référence dobjet distant à partir de la référence locale au Stub Ce service est assuré par le lancement du programme rmiregister. Lancer quune fois par JVM, pour tous les objets à distribuer une sorte dannuaire/connecteur de service distants. La couche de transport Connecte les 2 espaces dadressage (JVM) Suit les connexions en cours : écoute et répond aux invocations. Construit une table des OD disponibles et réalise laiguillage des invocations.

23 Etapes de développement 1.Définir une interface Java pour lobjet distant 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 (et Skeleton) (rmic) 5.Démarrer rmiregister et lancer lapplication serveur RMI. 6.Créer, compiler et lancer le client accédant à des OD du serveur

24 Un exemple : lecho Un objet permettant de faire lecho au message quon lui envoie : Echo ec; ec.echo(coucou); Echo : coucou Lobjet de type Echo est distant, lévocation de la méthode (et de lobjet) et distante. 4 classes sont nécessaires : –Echo: linterface décrivant lobjet distant –EchoDistant : limplémentation de lobjet distant –EchoServer : une application serveur RMI –MainClient : lapplication cliente utilisant

25 Interface Echo Attention à : java.rmi.RemoteException

26 EchoDistant, implémentation de Echo. Après la compilation, il faut générer le stub (et Skeleton) : rmic echo.EchoDistant;//dans le repertoire au-dessus On obtient alors le fichier : echo.EchoDistant_Stub.class On peut spécifier un autre répertoire « -d » Compiler pour lancienne version (avec Skeleton)... regarder man rmic.

27 Application server pour lobjet Distant Le programme qui est à lécoute des demandes des clients. Il lui faut un SecurityManager spécifique : RMISecurityManager Pour rendre lobjet disponible, il faut lenregistrer dans le RMIregistry via la méthode statique : Naming.rebind("echo", od); Par la suite, cet objet distant est accessible en indiquant son URL –String url= "rmi://nomServeurRMI:port/nomOD" –String url= "rmi://leo.inria.fr/echo" Pour interroger le serveur : Naming.lookup(url);

28 Lancer le server et le service dannuaire > rmiregistery & > java demo.rmi.EchoServer Le serveur est désormais disponible pour de futurs clients.... Attention à lordre et au « & » !

29 Le client Remarquons : Ce code manipule lobjet distant comme sil était local. Après avoir installé un RMISecurityManager, le client recherche lobjet distant en interrogeant le service dannuaire RMI par : Naming.lookup(url);


Télécharger ppt "Programmation Objet en JAVA Cours 9 : Réseau R.M.I : Remote Method Invocation (révision du cours de Patrick Itey INRIA-Sophia)"

Présentations similaires


Annonces Google