RMI Remote Method Invocation

  • View
    23

  • Download
    0

Embed Size (px)

DESCRIPTION

http://www-adele.imag.fr/~donsez/cours. RMI Remote Method Invocation. Didier DONSEZ Université Joseph Fourier (Grenoble 1) IMA – LSR/ADELE Didier.Donsez@imag.fr, Didier.Donsez@ieee.org Hafid Bourzoufi Université de Valenciennes - ISTV. Sommaire. - PowerPoint PPT Presentation

Text of RMI Remote Method Invocation

  • RMIRemote Method InvocationDidier DONSEZUniversit Joseph Fourier (Grenoble 1) IMA LSR/ADELEDidier.Donsez@imag.fr, Didier.Donsez@ieee.orgHafid BourzoufiUniversit de Valenciennes - ISTVhttp://www-adele.imag.fr/~donsez/cours

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • SommaireRappel et Limites des RPC (Remote Procedure Call)Principe des RMIEtapes de dveloppement et dexcutionParamtres des mthodesObjet ActivablePersonnalisation de la couche de transportRamasse-Miette distribueAutour des RMICORBA, IIOP, EJB

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Rappel des RPCRPC (Remote Procedure Call)modle client/serveurappel de procdures distances entre un client et un serveurle client appelle une procdurele serveur excute la procdure et renvoie le rsultatOutil rpcgengnre la souche dinvocation et le squelette du serveur(en C, C++, Fortran, )la souche et le squelette ouvre un socket et encode/dcode les paramtresCouche de prsentation XDR (eXchange Data Representation)format pivot de reprsentation des donnes de types primitifs et structurs (tableau de longueur variable, structures) quelque soitlarchitecture (Little Endian/Big Endian, IEEE, ) le langage (ordre ligne/colonne dans les tableaux C et les tableaux Fortran)ou le systme (ASCII, IBMECDCII, ...)

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Limites des RPCLimitationsparamtres et valeur de retour sont des types primitifsprogrammation procduraledpendance la localisation du serveurpas dobjetpas de rfrence distanteEvolutionsCORBAMultilangage, multi-plateforme (architecture+OS), MuliVendeursJava RMImono-langage : Java, multiplateforme : de JVM JVMDCOM / Object RPC / .NET Remotingmulti-langages, plateforme Win32 principalement, il existe des implmentations (non MicroSoft) pour Unix, Propritaire.NET Remotingmulti-langages (CLR), plateforme Win32 principalementNormalis lECMA et lISOSOAP (Simple Access Object Protocol)multi-langages, multi-plateformeRponse et requte en XML (DTD SOAP), Transport sur HTTP, IETF

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Principes des RMIRPC la Javainvoquer de faon simple des mthodes sur des objets distribus. Outilspour la gnration des stub/skeleton, lenregistrement par le nom, lactivation Tous les dtails ( connexion, transfert de donnes ..) sont transparents pour le dveloppeur grce au stub/skeleton gnrMono-langage et Multiplateforme.Java : de JVM JVM (les donnes et objets ont la mme reprsentation qqs la JVM)Orient ObjetLes RMIs utilisent le mcanisme standard de srialisation de JAVA pour lenvoi dobjets.DynamiqueLes classes des Stubs et des paramtres peuvent tre charges dynamiquement via HTTP (http://) ou NFS (file:/)Scuritun SecurityManager vrifie si certaines oprations sont autoriss par le serveur

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Structure des couches RMI (i)larchitecture logique

    Client RMI(Application / Applet / Servlet)HelloClient,HelloAppletSouche ou StubHelloImpl_StubCouche de Rfrencejava.rmi.NamingCouche de Transportjava.net.Socket pour TCPRseau(IP)Serveur RMIHelloServer, rmidSquelette ou Skeleton HelloImpl_SkelCouche de Rfrencejava.rmi.NamingCouche de Transportjava.net.SocketServer pour TCPInvocation de mthodessayHello(...)Interface DistanteHelloImplmentation DistanteHelloImpl

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Structure des couches RMI (ii)Souche ou Stub (sur le client)reprsentant local de lobjet distant qui implmente les mthodes exportes de l objet distantmarshalise les arguments de la mthode distante et les envoie en un flot de donnes au serveurdmarshalise la valeur ou lobjet retourns par la mthode distante

    la classe xx_Stub peut tre charge dynamiquement par le client (Applet)

    Squelette ou Skeleton (sur le serveur)dmarshalise les paramtres des mthodesfait un appel la mthode de lobjet local au serveurmarshalise la valeur ou lobjet renvoy par la mthode

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Structure des couches RMI (ii)Couche des rfrences distantestraduit la rfrence locale au stub en une rfrence lobjet distantelle est servie par un processus tier : rmiregistry

    Couche de transportcoute les appels entrantstablit et gre les connexions avec les sites distants

    java.rmi.UnicastRemoteObject utilise les classes Socket et SocketServer (TCP)cependant dautres classes peuvent tre utilises par la couche transport (Compression sur TCP, SSL sur TCP, UDP)

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • La configurationhostregrmiregistry

    hostcliClient HelloClienthostwwwhttpd

    hostserServeur HelloServer

    Instance : .class : Stub Skel Impl ...

    ......

    ......

    ...http ou nfsSocket

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Lenregistrement de lobjethostregrmiregistry

    hostcliClient HelloClienthostwwwhttpd

    hostserServeur HelloServer

    Instance : .class : Stub Skel Impl "HelloObject"

    ...

    ...2- le serveur enregistrelobjet distant : il communique une instance de Stub1- le serveur charge les classes Stub et Skeldaprs java.rmi.server.codebasehttp ou nfsSocket

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • La rcupration du Stubhostregrmiregistry

    hostcliClient HelloClienthostwwwhttpd

    hostserServeur HelloServer

    Instance : .class : Stub Skel Impl "HelloObject"

    ...

    ...3- le client rclame le Stub associ "HelloObject"4- rmiregistry retourne le Stub5- le client charge la classe Stubdaprs java.rmi.server.codebasehttp ou nfsSocket

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Invocation dune mthodehostregrmiregistry

    hostcliClient HelloClienthostwwwhttpd

    hostserServeur HelloServer

    Instance : .class : Stub Skel Impl "HelloObject"

    ...

    ...6- le client invoque une mthode sur le Stub7- le Stub mashalle les paramtres de la mthode et les envoie au serveur8- le Skel demashalle les paramtres de la mthode et invoque la mthode sur lobjetretourne le rsultat marshall9- le Stub demashalle le rsultat de la mthodeappel mthodeSocket

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Cration et manipulation d'objets distants5 Packagesjava.rmi : pour accder des objets distantsjava.rmi.server : pour crer des objets distantsjava.rmi.registry : li la localisation et au nommage dobjets distantsjava.rmi.dgc : ramasse-miettes pour les objets distantsjava.rmi.activation : support pourlactivation dobjets distants. Etapes du dveloppement 1- Spcifier et crire l'interface de l'objet distant.2- Ecrire l'implmentation de cette interface.3- Gnrer les Stub/Skeleton correspondants. (outil rmic)Etapes de lexcution4- Ecrire le serveur qui instancie l'objet implmentant l'interface, exporte son Stub puis attend les requtes via le Skeleton.5- Ecrire le client qui rclame lobjet distant, importe le Stub et invoque une mthode de l'objet distant via le Stub.

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • 1- Spcifier linterface d'un objet distantFormatlinterface tend java.rmi.Remoteles mthodes doivent pouvoir lever java.rmi.RemoteExceptionExemplepackage examples.hello;public interface Hello extends java.rmi.Remote{ public static final int EN=0;// English public static final int FR=1;// French public static final int ES=2;// Spanish String sayHello() throws java.rmi.RemoteException; String sayHello(String name) throws java.rmi.RemoteException; String sayHello(String name, int lang) throws java.rmi.RemoteException;}

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Implmentation de lobjet distantLa classe HelloImpldoit implmenter linterface distante Helloet tendre une des sous-classes de java.rmi.server.RemoteServer comme java.rmi.server.UnicastRemoteObject

    java.rmi.server.UnicastRemoteObjectsous classe le plus souvent utilise

    offre toutes les fonctionnalits des classes distantesappelle la classe squelette pour la (d)marshalisation utilise TCP/IP pour la couche transport

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Implmentation de lobjet distantpackage examples.hello;public class HelloImpl extends java.rmi.server.UnicastRemoteObject implements Hello { private int defaultlang; public HelloImpl(int defaultlang) throws java.rmi.RemoteException{ super(); this.defaultlang=defaultlang; } public String sayHello() { return sayHello(null, defaultlang); } public String sayHello(String name) { return sayHello(name, defaultlang); } public String sayHello(String name, int lang) { switch(lang) { case Hello.EN : break; case Hello.FR : break; case Hello.ES : break; default : lang=Hello.EN; } switch(lang) { case Hello.EN : return "Hello " +((name==null) ? "World" : name) + " !"; case Hello.FR : return "Bonjour " +((name==null) ? "tout le monde" : name) + " !"; case Hello.ES : return "Hola " +((name==null) ? "todo el mundo" : name) + " !"; default : return null; } } // method String sayHello(String name, int lang) } // class HelloImpl

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • La gnration des Stub et SkeletonLoutil rmic gnrela classe souche examples.hello.HelloImpl_Stubla classe squelette examples.hello.HelloImpl_Skel partir de limplmentation examples.hello.HelloImpl

    Exemple (sous Win32)set CLASSPATH=%CLASSPATH%;./myclassesjavac -d .\myclasses Hello.javajavac -d .\myclasses HelloImpl.javarmic -keepgenerated -d ./myclasses examples.hello.HelloImpl

    Remarque: -keepgenerated conserve les sources des Stub et Skeleton

    RMI - H. Bourzoufi, D. Donsez, 1998-2003

  • Implmentationdu serveur de lobjet distantCre un ou plusieurs objets distants (une ou plusieurs classes)Naming.bind() : les enregistre auprs du serveur de liaison rmiregistryExemplepackage examples.hello;public class HelloServer {public static void main(String