Java - RMI Remote Method Invocation. Java - RMI



Documents pareils
RMI le langage Java XII-1 JMF

Remote Method Invocation (RMI)

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Remote Method Invocation en Java (RMI)

Intergiciel - concepts de base

Programmation répartie RPC & RMI

Conception de serveurs d'applications ouverts

Calcul Parallèle. Cours 5 - JAVA RMI

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Remote Method Invocation Les classes implémentant Serializable

Patrons de Conception (Design Patterns)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Etude critique de mécanismes de sécurité pour l architecture Jini

GEI 465 : Systèmes répartis

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Architectures n-tiers Intergiciels à objets et services web

2 Chapitre 1 Introduction

La technologie Java Card TM

Firewall IDS Architecture. Assurer le contrôle des connexions au. Sécurité 1

Initiation à JAVA et à la programmation objet.

Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

CORBA. (Common Request Broker Architecture)

Cours CCNA 1. Exercices

NFP111 Systèmes et Applications Réparties

Java Naming and Directory Interface

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Module BD et sites WEB

TP1 : Initiation à Java et Eclipse

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Mise en œuvre des serveurs d application

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

18 TCP Les protocoles de domaines d applications

Projet de Veille Technologique

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Modèle client-serveur Plan. Modèle client-serveur. Modèle client-serveur définition. Modèle client-serveur communication par messages.

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

as Architecture des Systèmes d Information

La carte à puce. Jean-Philippe Babau

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Groupe Eyrolles, 2004 ISBN :

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Chapitre I Notions de base et outils de travail

Evaluation Idéopass Cahier d analyse technique

Programmer en JAVA. par Tama

Projet gestion d'objets dupliqués

Java c est quoi? Java pourquoi?

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Chapitre 2. Classes et objets

Software Engineering and Middleware A Roadmap

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Java et les bases de données

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Cisco Certified Network Associate

Cahier des charges (CDC)

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

La VOIP :Les protocoles H.323 et SIP

Chapitre 1 Windows Server

CORBA haute performance

Architectures d'intégration de données

OS Réseaux et Programmation Système - C5

Les Services Web. Jean-Pierre BORG EFORT

Description de la formation

Architecture Orientée Service, JSON et API REST

Compte Rendu d intégration d application

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Devenez un véritable développeur web en 3 mois!

Composants Logiciels. Le modèle de composant de CORBA. Plan

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

JOnAS Day 5.1. Clustering

Chapitre VI- La validation de la composition.

Meta Object Facility. Plan

Vulgarisation Java EE Java EE, c est quoi?

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

Auto-évaluation Programmation en Java

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

L3 informatique TP n o 2 : Les applications réseau

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Cours Bases de données

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Introduction aux intergiciels

Plan du cours. Historique du langage Nouveautés de Java 7

Bases Java - Eclipse / Netbeans

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Druais Cédric École Polytechnique de Montréal. Résumé

Traduction des Langages : Le Compilateur Micro Java

Fiche Technique. Cisco Security Agent

«clustering» et «load balancing» avec Zope et ZEO

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Java DataBaseConnectivity

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

OPC Factory Server- Réglage des paramètres de communication

Transcription:

Remote Method Invocation Yann Viémont Université de Versailles St-Quentin Plan 1. Introduction 2. Rappels sur les RPC 3. Le modèle objet de Java-RMI 4. Architecture générale

1. Introduction = Disponible à partir de la version 1.1 du JDK de Sun (1995) = Concurrent de CORBA et DCOM (.NET) pour offrir un système d objets distribués = Conçu pour un environnement homogène de machines virtuelles Java Multiplateforme / Monolangage = Sécurité et disponibilité (RMI Security Manager) = Compatible avec le modèle objet de Java Polymorphisme, instanceof, GC distribué, = Intégration des standards Internet Fonctionnalité = Obtention de références sur les objets serveurs = Invocation de méthode à distance = Invocation sans compilation = Importation / exportation / transmission dynamique d objets Par référence ou par copie = Intégration au modèle objet de Java = Préservation de l intégrité des références = Importation / exportation / transmission dynamique de comportement (code) = Cycle de vie des objets distants Activation / Passivation / Persistance

Objectifs Le mécanisme doit permettre les opérations de base suivantes : = Obtenir une référence sur un objet distant = Invoquer à distance une méthode sur cet objet = Utiliser un objet d un site distant comme un objet local (importation d une copie de l objet) = Importer dynamiquement une classe (type + méthodes) avec les objets correspondants = Exporter dynamiquement une classe (type + méthodes) avec les objets correspondants Obtenir une référence RMI comprend un serveur de nom (registry) basé sur les URL : = Les méthodes de la classe Naming accèdent au registry Du coté serveur, l application invoque la méthode : = Naming. bind (URL, objet) Du coté client, l application invoque la méthode : = référence = Naming.lookup (URL) L objet reste sur le serveur = Une instance de la souche (stub) est importée sur le client = La référence client désigne cette souche qui référence l objet distant

Utiliser un objet distant On peut utiliser localement un objet distant : = De façon transparente = Aussi simplement qu un objet local = résultat = objetlocal.méthode (objetdistant) Invoquer une méthode distante Une méthode distante s invoque de façon transparente : = résultat = objetdistant.méthode (param1,, paramn) Les paramètres d entrée peuvent être : = Des objets locaux transmis par copie et sérialisation = Des objets distants (du serveur ou d un site tiers) dont la référence (objet + stub) est retransmise Au retour : = Les objets locaux modifiés sont recopiés = Des références à de nouveaux objets distants peuvent être obtenues

Beaucoup plus qu un simple RPC pour Java 2. Rappels sur les RPC Machine A Client Machine B Serveur Processus uitilisateur Requête Invocation du service (Processus veilleur) Réponse Réseau Exécution du service (Processus serveur) renvoit des valeurs de retour

Caractéristiques d un RPC Un APD, appel de procédure à distance (RPC, Remote Procedure Call en anglais) permet : = La transparence Type de machine Type de réseau Localisation Type de codage et standards = Plusieurs sémantiques des appels Synchrone / asynchrone Au-moins-une-fois / au-plus-une-fois Processus serveur Question : qui exécute la procédure distante? Réponse : un processus serveur autonome = Un second processus est utilisé sur le serveur

Problèmes Les espaces d adressage des processus client et serveur sont disjoints = Nouvelle pile, nouvelles variables Une procédure appelée à distance forme un bloc opaque pour les règles de visibilité = Toutes les communications se font par passage de paramètre = On ne peut pas passer un pointeur Les machines et / ou les systèmes sont différents = Transformation des formats = Interdiction des calculs explicites d adresse Solutions Solution 1 : les paramètres sont limités aux types de base = Passage de paramètres par valeurs = Sans pointeur, uniquement des tableaux = Les structures et / ou listes doivent être décomposées par le programmeur Plusieurs standards ont été proposés = Le plus utilisé est DXF (Data exchange Format) Solution 2 : sérialisation (languages objets) = Les objets complexes sont transformés en un flot de caractères selon un format d échange

Mécanisme d appel compilé = La procédure distante et le programme appelant sont compilés séparément = Le compilateur utilise une définition d interface abstraite = L appelant utilise le mécanisme d appel habituel = Une pseudo procédure se substitue localement à la procédure distante La souche client (stub) = L appelé utilise le mécanisme d appel habituel = Une pseudo procédure appelante se substitue à la vraie sur la machine distante La souche serveur (squeleton) Client Architecture Serveur Procédure appelante Souche client Librairie APD Système et communication Appel de procédure Appel de procédure Appel système Procédure appelée Souche serveur Librairie et runtime APD Système et communication Appel de procédure Appel de procédure Appel système

Définition d interface Une procédure distante n est connue que par son interface = type_retour nom_procedure (mode_p1 type_p1, mode_p2 type_p2,, mode_pn type_pn) ; = type_1 = ; = = type_m = ; L interface est générée par le compilateur serveur Elle est utilisée par le compilateur client 3. Le modèle objet de Java-RMI Le modèle objet distribué de RMI distingue deux types d objets : = Les objets distants (remote object) = Les objets locaux Un objet distant est connu des autres sites par une ou plusieurs interfaces distantes (remote interfaces) Chaque interface distante définit un ensemble de méthodes invocables depuis les autres sites Pour invoquer une méthode d un objet distant : = On connait son interface - son comportement = On ne connait pas sa classe exacte - son implémentation

Interfaces et classes en Java Une interface définit un comportement abstrait = Elle ne comporte pas de constructeur d objets = Elle définit la signature de méthodes abstraites = Elle peut aussi définir des constantes Une classe définit une implémentation particulière = Elle comporte un constructeur d objets = Elle définit un type pour la structure des objets = Elle spécifie des méthodes (signature + corps) Une classe peut implémenter une ou plusieurs interfaces = Elle doit alors fournir une implémentation des méthodes correspondantes Exemple InterfaceX méthodex1 () méthodex2 () InterfaceY méthodey1 () méthodey2 () InterfaceZ méthodez1 () méthodez2 () IntX IntY IntX IntZ ClasseA méthodex1 () méthodex2 () méthodey1 () méthodey2 () méthodea1 () méthodea2 () ClasseB méthodex1 () méthodex2 () méthodez1 () méthodez2 () méthodeb1 () méthodeb2 ()

Interfaces et héritage en Java Un objet Java est créé comme une instance d une classe particulière Java supporte trois mécanismes d héritage = simple : une classe peut étendre une autre classe - sa superclasse - = simple : une interface peut étendre une autre interface - sa superinterface - = multiple : une classe peut implémenter une ou plusieurs interfaces En résultat, un objet Java est aussi : = Une instance de sa ou ses superclasses = Une instance des toutes les interfaces implémentées par sa classe et sa (ou ses) superclasse (s) InterfaceX méthodex1 () Exemple InterfaceY méthodey1 () InterfaceW méthodew1 () IntX IntY ClasseA InterfaceZ méthodez1 () méthodex1 () méthodey1 () méthodea1 () implements extends IntZ ClasseC méthodey2 () méthodew1 () méthodez1 () méthodec1 () méthodec2 ()

Exemple (suite) Les instructions suivantes sont toutes correctes : ClasseC c1 = new ClasseC () ; ClasseA a1 = new ClasseC () ; ClasseA a2 = c1 ; ClasseC c2 = (ClasseC) a2 ; InterfaceX ix1 = new ClasseA () ; InterfaceX ix2 = new ClasseC () ; InterfaceZ iz1 = c1 ; InterfaceZ iz2 = (ClasseC) a1 ; L instruction suivante est incorrecte : InterfaceZ iz3 = new ClasseA () ; Interfaces et classes de RMI Interfaces Classes Exceptions Remote Serializable RemoteObject IOException RemoteServer RemoteException UnicastRemoteObject

L interface Remote Remote CompteBancaire Remote sert à identifier et référencer les objets distants Remote ne définit aucune méthode public interface Remote {} Remote est la racine de toutes les interfaces distantes définies par les utilisateurs pour manipuler les objets distants public interface CompteBancaire extends Remote { public void depot (float montant) throws RemoteException ; public void retrait (float montant) throws RemoteException ; } Objets distants de Java-RMI Définition : un objet distant est une instance d une classe implémentant une ou plusieurs interfaces distantes. Un objet non-distant est dit objet local. NB : distant et local désignent la nature de l objet et non pas sa localisation sur un certain site. Exemple pour l accès aux objets depuis un site particulier (Site local dans le tableau ci-dessous) selon la nature et la localisation d un objet : Nature des objets Objet local Objet distant Localisation des objets Site local accès local accès local Site distant accès copie locale accès distant

La classe UnicastRemoteObject La classe abstraite RemoteObject redéfinit plusieurs méthodes de Object et en ajoute pour les objets distants = hashcode, equals, tostring = getref, tostub, writeobject, readobject La classe abstraite RemoteServer définit des méthodes communes à tous les serveurs = unexportobject, getclienthost, La classe UnicastRemoteObject implémente les objets distants non répliqués (mono-serveur) = exportobject, Conformité avec le modèle Java Une référence à un objet distant peut être : = Passée en paramètre de toute invocation de méthode locale ou distante = Retournée par toute invocation de méthode locale ou distante = Fondue en une référence sur des interfaces distantes de son implémentation = Utilisée en argument de instanceof pour tester les interfaces supportées

Spécificité du modèle RMI Les clients des objets distants = Ne voient que les interfaces distantes = Ne voient jamais directement les classes qui les implémentent Les paramètres des méthodes distantes sont passés = Par référence pour les objets distants = par copie pour les autres objets Classes souches de Java-RMI A chaque classe C d objets distants sur le serveur est associée : = Une classe souche CS (stub class) = L ensemble des interfaces I distantes de C Implémentées directement par C Ou implémentées par une superclasse de C Pour un objet distant référencé depuis un site client : = La classe souche est importée par le réseau = Un objet de cette classe est créé localement Le système normal de type de Java fonctionne avec les références sur les objets souches

Exemple : hiérarchie de classe Interfaces Serializable Classes RemoteObject Remote RemoteServer RemoteInterfaceX RemoteInterfaceY UnicastRemoteObject RemoteInterfaceZ RemoteInterfaceW ClasseA InterfaceM ClasseB InterfaceN ClasseC Exemple : souches Interfaces Remote Souches RemoteInterfaceX RemoteInterfaceY RemoteInterfaceZ RemoteInterfaceW SoucheA SoucheB

Exemple : objets souches Serveur RIX RIW ClasseA SoucheA RIX RIZ RIW IM ClasseB SoucheB Importation des souches Client RIX RIW SoucheA RIX RIZ RIW SoucheB RIX RIZ RIW IM IN ClasseC Création d objets substituts Obj_CAi Obj_CBj Obj_CCk Obj_SAi Obj_SBj Obj_SCk références distantes 4. Architecture générale RMI se décompose en trois couches : Client Serveur Application Souches client (Stubs) Souches Serveur (Skeletons) Couche des références distantes (Remote Reference Layer) Mécanisme RMI Couche Transport

La couche des souches La couche des souches : = Constitue l interface application / système RMI. = Comporte les souches client (stubs) agissant comme un objet par procuration (proxy) = Comporte les souches serveur implémentant toutes les interfaces de l objet distant. = Soumet les données à la couche des références distantes sous forme de flots de données entrants et sortants - après sérialisation. Sérialisation Sérialisation Définition : technique permettant la transmission des données objets entre deux espaces d adressage différents Les références à d autres objets conduisent à une copie en profondeur Entrée : = Un ensemble d objets en mémoire (virtuelle) = Organisé en graphe (connexe ou non) Sortie : = Un flot séquentiel de données = Utilisant exclusivement un adressage relatif Désérialisation

Les souches client (stubs) La souche client : = Initialise l appel vers un objet distant (via la couche des références distantes ) = Sérialise les arguments sous forme d un unique flot de sortie = Informe la couche des références distantes que l appel peut être invoqué = Désérialise le flot d entrée contenant la valeur de retour ou une exception = Informe la couche des références distantes que l appel est achevé Les souches serveur (squeletons) La souche serveur : = Reçoit l appel par une méthode unique (aiguilleur) = Désérialise le flot d entrée des arguments = Prépare l appel vers l implémentation réelle de l objet distant = Distribue l appel vers la bonne méthode cible = Sérialise les valeurs de retour ou les exceptions dans le flot de sortie

La couche des références distantes Plusieurs protocoles d invocation possibles : = Invocation point à point (Unicast) = Invocation vers des groupes de réplication (Multicast) Stratégie de reconnexion (si un objet devient inaccessible) Deux composantes coopérantes : = la composante coté client (client-side) = la composante coté server (server-side) Transmission de données entre couches transport par une connexion orientée flux La couche transport La couche transport de Java-RMI effectue : = Mise en place, gestion, surveillance de la connexion = Ecoute des appels arrivant = Maintien d une table d objets distants pour l espace d adressage = Localisation du dispatcher pour la cible d un appel distant et transmission de la connexion

Concepts de la couche transport 4 abstractions : = Un endpoint indique l @ machine virtuelle Java. = Un channel conduit entre 2@. = Une connexion permet le transfert des données. = Le transport effectue la gestion des channels. Nettoyage des objets distants Ramasse-miette Ramasse-miette (Garbage Collector) distribué Invoqué quand : = Les objets distants ne sont plus appelés (compteur ref_counting == 0) = Il n y a plus ni référence locale ni référence distante sur les objets locaux ou distants Remarque : = Le GC ne garantit pas l intégrité des références, il peut rester une référence sans objet correspondant ( fi RemoteException)

Chargement dynamique des classes Pendant l exécution : Chargement dynamique des classes nécessaires à l invocation des méthodes de l objet distant. = Classes stub et squelette (~proxies) = Classes indirectement utilisées par RMI Chargement dynamique des classes pour les copies des objets locaux hors-site = Classes et interfaces des objets hors-site Différents chargeurs de classe = LocalClassLoader (selon le Classpath) Chargement des classes connues localement = AppletClassLoader Chargement de l applet Chargement des classes dépendantes sur le réseau = RMIClassLoader Vérifie que l on ne peut pas charger avec le Classpath. Localise la classe grâce à l URL dans le flot (objet distant). Localise la classe grâce à l URL spécifié par java.rmi.server.codebase local (souche/squelette).

Sécurité Chargement local de classe : = Pas de problème de sécurité Chargement à partir du réseau : = Nécessité d un Security Manager. Applet Security Manager (à lancer en 1er dans une application). RMI Security Manager (par défaut). Sécurité Applet Security : = Le chargement doit être fait sur applet (travail des développeurs). RMI Security : = Lorsque non local (ex : bootstrapping). = Toutes les classes téléchargées par le RMIClassLoader. = Pb : on ne peut pas prévenir le chargement de classes abusant de ressource.

Scénarios Serveurs en mode ouvert ou fermé. Application Java utilisant RMI : Mode Client / Serveur Mode Serveur / Client (callback) Mode égal à égal (peer to peer) Mode ouvert ou fermé Serveur fermé : = Pas de chargement de classe = Interfaces locales au serveur = Pas de Security Manager Serveur ouvert : = Chargement de classes avec l URL du java.rmi.server.codebase = Contrôle par le RMI Security Manager

Applets Classes fournies par serveur HTTP ou FTP (URL page HTML) Pas de chargement de classes si elles existent déjà sur le serveur. Application Java distribuée NB : Applet Un seul serveur HTTP pour toutes les applications distribuées sur le réseau Chargement local d une application : = Chargement des interfaces distantes = Chargement des classes souche et squelette. Chargement réseau (bootstrapping) : = Toutes les classes peuvent être chargées à partir de la même source réseau

RMI à travers les Firewalls Problème : = Ouvrir un socket en présence de parefeux (Firewalls) sur Intranet Solution : = Encapsulation d un appel RMI par le protocole HTTP Appel RMI envoyé dans le corps d une requête HTTP POST. Retour dans une requête HTTP response. L usine à sockets Le factory de sockets : = java.rmi.server.rmisocketfactory = Fournisseur de ressource pour les sockets = Création de socket permettant le tunneling Socket client : connexion HTTP vers les hôtes Socket serveur : si HTTP POST alors réponse HTTP

Configuration Configuration du client : RAS Configuration du serveur : = La totalité du nom de l hôte serveur doit être incluse dans les références distantes = Si le serveur ne supporte pas les clients RMI en dehors du parefeux : Utilisation d un serveur HTTP à l écoute sur le port 80. Utilisation d un script CGI : /cgi-bin/java-rmi Multithreading NAME ADDRESS Client NAME ADDRESS Client NAME ADDRESS RMI RMI Server RMI Client JDBC Expense records

Comparaison RMI / RPC Orientation Objet = Passage d objets complexes en paramètre. = Création d objets à distance. Séparation interface / implémentation Client Server Architecture d objets distribués Répartition des objets sur une architecture C/S ou 3 tiers de façon libre. Utilisation d un Security Manager standard ou spécialisé. Portable sur toute machine (VM). Ramasse-miette distribué. Multithreaded.

Intégration intranet / extranet Appel à distance / téléchargement de code Encapsulation code non-java avec JNI Encapsulation BD avec JDBC Récupère les avantages d un BUS Java : = Puissance = Sécurité = Portabilité Implémentation des souches L implémentation des souches s appuie sur les possibilités objets de Java

Classes et Interfaces des souches Classe RemoteStub = Superclasse pour tous les stubs Interface RemoteCall = Gestion du transport des informations (flux) Interface RemoteRef = Attache locale à un objet distant Interface Skeleton = Répartiteur d appels JINI Architecture destinée à la gestion de périphériques en réseau = Utilise RMI = Télécharge des données et du code pour piloter le périphérique = Constitue une première application de Service Web

Fonctionnnement de JINI Lors de l ajout d un périphérique: Celui-ci se déclare auprès du serveur Lookup Service puis lui envoie son pilote Le client voulant utiliser le pilote envoie une demande au serveur Le serveur lui envoie le pilote du périphérique