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

  • View
    104

  • Download
    2

Embed Size (px)

Text of Programmation Objet en JAVA Cours 9 : R©seau R.M.I : Remote Method Invocation (r©vision du...

  • Page 1
  • Programmation Objet en JAVA Cours 9 : Rseau R.M.I : Remote Method Invocation (rvision du cours de Patrick Itey INRIA-Sophia)
  • Page 2
  • Plan
  • Page 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
  • Page 4
  • Exemple du morpion (suite) Partie JeuJoueur x2 Peut tre un JoueurHumain ou un JoueurIA, via l impl mentation de l interface Joueur Limplmentation 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 !
  • Page 5
  • Morpion : Passage au rseau 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 rseau
  • Page 6
  • UI Morpion architecture locale Partie JeuJoueur Le moteur JoueurGeneric JoueurHumain JoueurHumainG UI
  • Page 7
  • Morpion architecture rseau Partie JeuJoueur UI : user interface Rseau UI JoueurNetwork
  • Page 8
  • Morpion architecture rseau UI : user interface Rseau UI JoueurNetwork JoueurNetwork implmente linterface Joueur et assure linteraction utilisateur. Relais dinformation entre lutilisateur et le moteur : transmets lUI le ncessaire afficher, transmets au moteur les ordres de lutilisateur Le rseau 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 caractres (txt, xml,...), soit en serialisant des objets, soit les 2.
  • Page 9
  • Morpion avec des sockets UI : user interface Rseau UI JoueurNetwork Dpliage Socket + InputStream Pliage Socket + OutputStream
  • Page 10
  • Morpion avec serialization : objet distribu UI : user interface Rseau JoueurHumainG Jeu Dpliage Socket + InputStream Pliage Socket + OutputStream
  • Page 11
  • Le rseau comme un systme distribu Lidal serait davoir un systme distribu utilisant la technologie objet : Invoquer une mthode dun objet se trouvant sur une autre machine exactement comme sil se trouvait au sein de la mme machine et du mme JRE : objetDistant.methode(); Utiliser un objet distant (OD), sans savoir o il se trouve : objetDistant= ServiceDeNoms.recherche("monObjet"); Pouvoir passer un OD en paramtre une mthode locale ou distante : resultat = objetLocal.methode(objetDistant); resultat = objetDistant.methode(autreOD); ObjetDistant = ObjetDistant.methode() ;
  • Page 12
  • RMI (Remote Method Invocation) Un systme dobjets distribus performant destin au dveloppement dapplications distribues entirement en Java. RMI est une core API (intgr au JDK 1.1) gratuit (diffrent de CORBA) et 100 % Java. RMI propose un systme dobjets distribus plus simple que CORBA. RMI est uniquement rserv aux objets Java.
  • Page 13
  • RMI : prsentation Mcanisme permettant lappel de mthodes entre objets Java sexcutant sur des machines virtuelles diffrentes (espaces dadressage distincts), sur le mme ordinateur ou sur des ordinateurs distants relis par un rseau; utilise directement les sockets, mais cest dj fait; code ses changes avec un protocole propritaire : R.M.P. (Remote Method Protocol).
  • Page 14
  • RMI : objectifs Rendre transparent laccs aux objets distribus via le rseau Faciliter la mise en oeuvre et lutilisation dobjets distants Java Prserver la scurit (inhrent lenvironnement Java) RMISecurityManager Distributed Garbage Collector (DGC)
  • Page 15
  • RMI : principes Un objet distant (server) : ses mthodes sont invoques depuis une autre JVM (autre processus distant ou local) Lobjet distant est dcrit par une interface (ou plus) : dclaration des mthodes distantes utilisables par le client.. Une invocation distante (RMI) concerne une mthode dun objet distant via linterface distante. Du cot client, un objet distant se manipule comme un objet local.
  • Page 16
  • Distribution dobjets Une rfrence un OD peut tre passe en argument ou retourne en rsultat dun appel dans toutes les invocations (locales ou distantes). Un OD peut tre transform (cast) en nimporte quelles interfaces distantes supports par limplmentation de lobjet. Les clients (objets clients) des OD (objets serveurs) interagissent avec des interfaces distantes, jamais directement avec leurs implmentations. Les arguments locaux et les rsultats dune invocation distante sont toujours passs par copie et non par rfrence leurs classes doivent implments Serializable.
  • Page 17
  • RMI : le passage des paramtres Largument ou la valeur de retour dune mthode 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 paramtres locaux, le transfert se fait ncessairement par copie. Pour un objet, lensemble de ses variables est srilializ (Serializable). Pour les rfrences dun OD, lobjet amorce (Stub) est pass.
  • Page 18
  • RMI : usage des interfaces Linterface est le contrat (abstrait) liant objets serveurs et clients. Elle est destine tre implmente par lOD et constitue la base dappel pour les objets clients. Elle dfinie les signatures (noms, types de retours, paramtres) dun ensemble de mthodes et seules ces mthodes seront accessibles par un objet client. Pour RMI, linterface de dpart est java.rmi.Remote : Hritons pour dfinir nos interfaces !
  • Page 19
  • RMI : Exception Lexception RemoteException Les objets clients doivent traiter des exceptions supplmentaires comme RemoteException. Toute invocation distante de mthode doit lever ou traiter cette exception. Peut se produire si la connexion a t interrompue ou si le serveur distant ne peut tre trouv.
  • Page 20
  • RMI : architecture Rseau Client Server Stub / Amorce Couche de rfrences des objets (rmiregister) Stub /(Skeleton) Couche de transport (connexion des JVMs) JVM1 JVM2
  • Page 21
  • Objets Amorces Programmes adaptateurs pour le transport des appels distants Ralisent les appels sur la couche rseau pliage / dpliage des paramtres A une rfrence dOD manipule par un client correspond une rfrence damorce Les amorces sont gnres par le compilateur damorces : rmic Deux types damorces pour linterface avec le rseau (srialisation): stub : reprsentant local (chez le client) de lobjet distant. skeleton : adaptateur cot server.
  • Page 22
  • Couches rseau La couche des rfrences distantes : Permet lobtention dune rfrence dobjet distant partir de la rfrence 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 rpond aux invocations. Construit une table des OD disponibles et ralise laiguillage des invocations.
  • Page 23
  • Etapes de dveloppement 1.Dfinir une interface Java pour lobjet distant 2.Crer et compiler une classe implmentant cette interface 3.Crer et compiler une application serveur RMI 4.Crer les classes Stub (et Skeleton) (rmic) 5.Dmarrer rmiregister et lancer lapplication serveur RMI. 6.Crer, compiler et lancer le client accdant des OD du serveur
  • Page 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, lvocation de la mthode (et de lobjet) et distante. 4 classes sont ncessaires : Echo: linterface dcrivant lobjet distant EchoDistant : limplmentation de lobjet distant EchoServer : une application serveur RMI MainClient : lapplication cliente utilisant
  • Page 25
  • Interface Echo Attention : java.rmi.RemoteException
  • Page 26
  • EchoDistant, implmentation de Echo. Aprs la compilation, il faut gnrer le stub (et Skeleton) : rmic echo.EchoDistant;//dans le repertoire au-dessus On obtient alors le fichier : echo.EchoDistant_Stub.class On peut spcifier un autre rpertoire -d Compiler pour lancienne version (avec Skeleton)... regarder man rmic.
  • Page 27
  • Application server pour lobjet Distant Le programme qui est lcoute des demandes des clients. Il lui faut un SecurityManager spcifique : RMISecurityManager Pour rendre lobjet disponible, il faut lenregistrer dans le RMIregistry via la mthode 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);
  • Page 28
  • Lancer le server et le service dannuaire > rmiregistery & > java demo.rmi.EchoServer Le serveur est dsormais disponible pour de futurs clients.... Attention lordre et au & !
  • Page 29
  • Le client Remarquons : Ce code manipule lobjet distant comme sil tait local. Aprs avoir install un RMISecurityManager, le client recherche lobjet di