RMI JAVA Introduction RMI ● Remote Method Invocation ● Système client/serveur ● Invocation distante de méthodes ● Famille des applications distribuées Les applications avec des objets CAS D'UTILISATION objet 2 objet 3 objet 1 objet 6 objet 4 objet 5 UNE APPLICATION ORIENTÉE OBJET EST NATURELLEMENT DISTRIBUÉE Les architectures RMI MACHINE 1 MACHINE 2 Environnement d'exécution Environnement d'exécution objet client Réseau objet serveur DISTRIBUTION D'OBJETS DANS DES ENVIRONNEMENTS D'EXÉCUTION DIFFÉRENTS À TRAVERS LE RÉSEAU RMI et Design pattern PROXY Sujet Sujet Réel Proxy UN CLIENT RMI NE CONNAÎT QUE L'OBJET MANDATAIRE (PROXY). LE PROXY PROPOSE LA MÊME INTERFACE QUE L'OBJET DISTANT. Historique ● ● RMI a été développé par JavaSoft filiale de Sun Microsystems RMI a été livré avec la version JDK1.1 – 19 février 1997 ● RMI est plus simple que CORBA ● RMI ne fonctionne qu'avec des objets JAVA ● Couche d'abstraction au dessus de RPC – Remote Procedure Call Principes des architectures RMI ● Les services sont déclarés par des interfaces ● Les services sont invoqués via ces interfaces ● ● ● Le système permet au client d'obtenir un mandataire local (proxy) du service distant Le système prend en charge la communication entre le client et le serveur Le système peut éventuellement prendre en charge la localisation du service distant Principes RMI La couche RMI transmet au serveur les paramètres nécessaires aux méthodes invoquées et retourne au client les réponses RMI côté client Mandataire proxy Client Réseau propose la même interface que celle implémentée par le serveur RMI côté serveur Interface Implémentation Serveur Avantages de RMI JAVA ● ● Paradigme objet Accès transparent aux objets distribués sur le réseau ● Prise en charge de l'acheminement ● Ramasse miettes distribué (DGC) ● Sécurité avec RMISecurityManager ● Accès dynamique par l'obtention de l'implémentation via le réseau Localisation ● Retrouver un objet sur le réseau sans avoir connaissance de son adresse. – Retrouver l'objet par son nom ● ● ● ServiceDeNoms.rechercher(''unObjet''); Naming.lookup(''unObjet''); Rien ne distingue une référence d'objet local d'une référence d'objet distant. – refObjetLocal – refObjetDistant Invocation ● Rien ne distingue une invocation de méthode sur un objet local d'une invocation sur un objet distant – objetLocal.methode(); – objetDistant.methode(); RMI La technologie Réseau et codage ● Protocole permettant l'appel de méthodes entre objets Java s'exécutant – dans des JVM différentes ● ● ● Protocole de transport – ● sur la même machine sur des machines distantes reliées en réseau Les sockets Codification de l'information échangée – Remote Method Protocol (RMP) Paramètres et retours ● ● Les arguments des méthodes distantes invoquées sont passés par copie et non par référence Les classes qui servent d'arguments ou de valeurs de retour doivent implémenter – ● l'interface java.io.Serializable Tous les types de données sont admis – Si le type n'est pas disponible localement, il est chargé dynamiquement (RMIClassLoader) via le réseau Codage et décodage UnMarshalling Marshalling client JVM 1 Stub objet doit implémenter java.io.Serializable serveur JVM 2 RMI format RMP Skeleton objet Gérants de la communication ● Obtenus par compilation de l'implémentation du serveur RMI – ● Commande rmic Côté serveur – La partie squelette ● ● Skeleton Côté client – La partie souche ● Stub Limites ● ● ● Le serveur de nom (RMI Registry) doit résider sur la même machine que le serveur Pas de pool d'objets (Instance pooling) Pas de transparence au niveau de la localisation de la machine distante ● Possibilité de références d'objet cycliques ● Les objets serveurs – doivent spécialiser UnicastRemoteObject – ou être exportés par la méthode exportObject()