Remote Method Invocation (RMI)

Documents pareils
RMI le langage Java XII-1 JMF

Remote Method Invocation en Java (RMI)

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

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation répartie RPC & RMI

Conception de serveurs d'applications ouverts

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

Remote Method Invocation Les classes implémentant Serializable

Intergiciel - concepts de base

Java - RMI Remote Method Invocation. Java - RMI

Programmation réseau avec Java. 3/7 RMI, un peu de sécurité et CORBA

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

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

GEI 465 : Systèmes répartis

Java Naming and Directory Interface

Développement, déploiement et sécurisation d'applications JEE

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

Corrigé des exercices sur les références

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Dis papa, c est quoi un bus logiciel réparti?

Projet gestion d'objets dupliqués

Auto-évaluation Programmation en Java

Gestion distribuée (par sockets) de banque en Java

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

TP1 : Initiation à Java et Eclipse

Programmer en JAVA. par Tama

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Cours 1: Java et les objets

Synchro et Threads Java TM

TP1. Outils Java Eléments de correction

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

INITIATION AU LANGAGE JAVA

Utiliser Java sans BlueJ

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Bases Java - Eclipse / Netbeans

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

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

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

CORBA. (Common Request Broker Architecture)

Création d une application JEE

Chapitre I Notions de base et outils de travail

Projet de Veille Technologique

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Projet de programmation (IK3) : TP n 1 Correction

Vulgarisation Java EE Java EE, c est quoi?

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)

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

Java Licence professionnelle CISII,

Compte Rendu d intégration d application

Programmation Objet Java Correction

as Architecture des Systèmes d Information

Initiation à JAVA et à la programmation objet.

Programmation par composants (1/3) Programmation par composants (2/3)

2 Chapitre 1 Introduction

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

EXA1415 : Annotations

Architecture applicative et Cartographie

Héritage presque multiple en Java (1/2)

Le Modèle de Sécurité dans JAVA

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Mise en œuvre des serveurs d application

NFP111 Systèmes et Applications Réparties

Java DataBaseConnectivity

TP, première séquence d exercices.

Traitement de données

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

La carte à puce. Jean-Philippe Babau

Système de Virtualisation pour une application de gestion commerciale d entreprise

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

PROGRAMMATION PAR OBJETS

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

TD/TP PAC - Programmation n 3

Java Licence Professionnelle CISII,

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Applications des patrons de conception

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

Langage Java. Classe de première SI

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

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

TP Programmation Java / JDBC / Oracle

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

.NET remoting. Plan. Principes de.net Remoting

TD/TP PAC - Programmation n 3

Architecture Orientée Service, JSON et API REST

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

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Serveur d'archivage 2007 Installation et utilisation de la BD exist

ACTIVITÉ DE PROGRAMMATION

Threads. Threads. USTL routier 1

JOnAS Day 5.1. Clustering

Transcription:

Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007

Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe de fonctionnement Comment concevoir une application utilisant RMI? Classe Naming Conception et exemple de serveurs et clients RMI Aspects pratiques Exercice 2

Objectifs de RMI RMI répond aux objectifs suivants : Masquer les aspects réseau d une application distribuée gestion des sockets, transfert des paramètres, encodage/décodage, threading Simple à mettre en œuvre Relative interopérabilité avec CORBA (RMI-IIOP) RMI permet de manipuler un objet distant comme s il était local : objetdistant.unemethode() 3

Inconvénients de RMI RMI pose cependant quelques problèmes : Utilisation exclusive avec JAVA Pas d interopérabilité avec d autres langages de programmation Relative lenteur à l exécution Due aux coûts de la sérialisation des paramètres 4

RMI : RMI est une API de communication entre objets destinée au développement d applications distribuées en JAVA uniquement package java.rmi et sous packages Il permet notamment : de localiser un objet distant d invoquer des méthodes sur un objet distant de manipuler un objet distant de récupérer le résultat d une méthode distante sous forme d objet de gérer certains problèmes de sécurité 5

Fonctionnement : RMI se base sur l utilisation de sockets Java RMI permet de partager des objets issus de machines virtuelles différentes ou non ie : d une même machine ou de machines différentes RMI se trouve dans java.rmi 6

Définitions : (1) Objet distant : Objet situé sur une machine virtuelle java différente Invocation distante : Invocation d une méthode sur un objet distant Tout paramètre/résultat d une méthode doit être : Une valeur d un type de base (int, float ) Un objet distant Un objet sérialisable Sa classe implémente java.io.serializable 7

Architecture du système RMI : Objet Client Objet Serveur Stub Skeleton Remote Reference Layer Transport 8

Principe de fonctionnement : 4 Naming 5 Registre RMI 5 3 Naming 1 Client 6 3 Serveur 7 8 8 8 2 Stub Skeleton 9

Principe de fonctionnement : 1. Enregistrement de l objet serveur auprès du service de nom RMI de sa JVM 2. Création du skeleton : Création des ports de communication et maintien d une référence sur l objet serveur 3. Le service de nom enregistre l objet serveur et le port utilisé Le serveur est prêt! 10

Principe de fonctionnement : 4. Le client fait appel au service de nom pour localiser l objet serveur 5. Le service de nom récupère une référence vers l objet serveur 6. Création de l objet stub dans la JVM du client 7. Renvoi de la référence de l objet stub au client 8. Le client fait appel à une méthode de l objet serveur 11

Les amorces (stub/skeleton) Masquent la connexion réseau! 1 objet distribué = 1 couple stub/skeleton Crées à partir de la commande rmic (jdk < 1.5) Voir diapo «aspects pratiques» Stub : Amorce du client Représente l objet distant Transmet les invocations à l objet distant S occupe de l envoi/réception des paramètres ATTENTION : Serializable (voir aspects pratiques) Skeleton : Amorce du serveur Reçoit les invocations du stub Fait appel aux méthodes de l objet serveur Récupère les réponses de l objet serveur Renvoie les réponses au stub 12

La couche de référence à distance Gère les références sur les objets répartis Analogue à un annuaire pour les objets répartis Utilisation : Serveur : enregistre les objets répartis Client : fait appel pour localiser un objet réparti Lancement : En ligne de commande : rmiregistry <port_du_registre> Dans un terminal (Windows/Mac OS/Linux) Dans le code du serveur : java.rmi.registry.locateregistry.createregistry(port); ATTENTION aux éditeurs JAVA permettant l exécution de code : Ils ne le lancent pas forcément 13

Couche transport Etablit la connexion entre les amorces Gère les connexions de bout en bout Écoute/répond aux invocations Aiguille les demandes vers les amorces 14

La classe Naming Dans : java.rmi Propose les méthodes de manipulation de référence dans le service de nommage Toutes les méthodes sont des méthodes de classe Ne possède pas d attribut 15

La classe Naming méthodes (1) public static void bind (String nom, Remote obj) throws AlreadyBoundException, MalformedURLException, RemoteException, AccessException Enregistre («lie») un nom d objet distant et un objet distant dans le service de nommage Utilisé dans le serveur RMI Paramètres : String nom : adresse et nom de l objet distant Ce nom a le format suivant : rmi://host:port/nom_obj Où host est le nom de la machine où est lancé le service de nommage Port du service de nommage Nom_obj est le nom de l objet réparti Remote obj : objet distant Exceptions : AlreadyBoundException : Le nom est déjà présent MalformedURLException : l URL est mal formulée RemoteException : le service de nommage ne peut pas être contacté AccessException : Opération interdite 16

La classe Naming méthodes (2) public static void rebind (String nom, Remote obj) throws MalformedURLException, RemoteException, AccessException Idem bind mais remplace le couple nom-objet distant si le nom est déjà présent dans le service de nommage Utilisé dans le serveur RMI public static void unbind (String nom) throws NotBoundException, MalformedURLException, RemoteException, AccessException Détruit l association nom-objet distant du service de nommage Utilisé dans le serveur RMI Exceptions : NotBoundException : nom non présent dans le registre Voir page précédente pour les autres 17

La classe Naming méthodes (3) public static Remote lookup (String nom) throws NotBoundException, MalformedURLException, RemoteException Retourne le stub de l objet distant associé au nom passé en paramètre Utilisé dans un client RMI public static string[] list (String nom) throws MalformedURLException, RemoteException Retourne le tableau des noms d objets distants présents dans le registre Le nom est l URL du service de nommage. 18

Comment concevoir une application distribuée utilisant RMI : 1. Définition de l interface de l objet serveur 2. Écriture de la classe d implantation 3. Écriture du client 4. Écriture du serveur 5. Lancement : Compilation Génération des stubs et skeleton (jdk < 1.5) Lancement du serveur de noms Lancement du serveur Lancement du client 19

Interface de l objet serveur Sert à définir les méthodes DISTANTES de l objet réparti Toute méthode non définie dans l interface ne peut pas être appelée à distance! Hérite de java.rmi.remote Chaque méthode doit pouvoir lever des java.rmi.remoteexception ie : ajouter throws java.rmi.remoteexception dans la définition de la méthode Cette exception est levée : en cas de problème de connexion si le serveur ne peut pas être trouvé Exemple : package pecho; public interface Echo extends java.rmi.remote { String repete(string msg) throws java.rmi.remoteexception; } 20

La classe d implantation Hérite de java.rmi.unicastremoteobject Nommé <nom_service>impl en général Exemple : EchoImpl Implémente l interface définie Implante les méthodes de l objet réparti Rien ne change par rapport à un développement classique Le constructeur de la classe : Doit pouvoir lever une java.rmi.remoteexception doit faire appel au constructeur de la super classe super(); 21

Le serveur Principe de conception : Main : 1. Lancement du security manager Voir diapo «aspects sécurité» - Etape optionnelle : Lancement du registre 2. Création de l objet serveur 3. Enregistrement auprès du service de nommage 22

Le client Conception identique à une application classique Doit contacter le registre pour localiser l objet distant ObjetDistant obj = (ObjetDistant)Naming.lookup ("rmi://url_serveur:port_registre/nomobjet"); Utilisation ensuite des méthodes de l objet distant comme s il était local Attention à caster l objet distant vers le type voulu après le lookup 23

Exemple : ECHO Interface Interface de l objet réparti : RESPECTEZ les conventions de nommage package pecho; import java.rmi.remote; public interface Echo extends Remote { String repete(string msg) throws java.rmi.remoteexception; } 24

Exemple : objet Serveur (1) Classe d implémentation et serveur : RESPECTEZ les conventions de nommage package pecho; import java.rmi.remoteexception; import java.rmi.server.unicastremoteobject; public class EchoImpl extends UnicastRemoteObject implements Echo { public EchoImpl() throws RemoteException {super();} // IMPLANTATION des méthodes appelées à distance public String repete(string msg) throws RemoteException { System.out.println("Demande recue : "+msg); return "Je répète : " + msg; } // fin méthode repete... 25

Exemple : Serveur (2)... // MAIN : Lancement des services public static void main(string[] args) { // Étape 1 : installation du gestionnaire de sécurité System.setSecurityManager(new RMISecurityManager()); try { // Étape optionelle : Lancement du registre java.rmi.registry.locateregistry.createregistry(1099); // Étape 2 : instanciation de l objet réparti EchoImpl or = new EchoImpl(); // Étape 3 : enregistrement auprès du registre java.rmi.naming.rebind("rmi://localhost/echo", or); } // fin try catch (Exception e) {e.printstacktrace();} } // fin Main } // fin classe 26

Exemple : Client package pecho; public class ClientEcho { public static void main(string[] args) { try { // Récupération du stub Echo obj =(Echo)java.rmi.Naming.lookup ("rmi://serveur_registre/echo"); // Appel d une méthode sur l objet distant String msg=obj.repete("coucou"); System.out.println("Reponse du serveur : "+msg); } // fin try catch (Exception e) {e.printstacktrace();} } // fin Main } // fin Classe 27

Aspects pratiques : (1) Compilation classique : javac *.java Création des stubs et skeletons : rmic paquetage.fichierimpl Paquetage de votre choix (mot clé package dans les fichiers) fichierimpl = le nom du fichier d implantation de l interface 28

Aspects pratiques : (2) Lancement du registre RMI : Fonctionne habituellement sur le port 1099 MacOS et Unix : rmiregistry & ATTENTION dans les salles stations : Vous partagez la même plage de port!!! Donc 1 seul(e) d entre vous doit lancer le registre sur un même port Et vous partagez l espace de nommage! Windows : start rmiregistry Choix du port : Préciser le numéro de port dans la ligne de commande : Exemple : rmiregistry 2500 29

Aspects pratiques : (3) Sécurité : Tout code téléchargé est soumis à des règles de sécurité régies par le gestionnaire de sécurité : SecurityManager Il faut le lancer dès le début du code du serveur Exemple : System.setSecurityManager(new RMISecurityManager()); 30

Aspects pratiques : (4) Sécurité : Vous devez créer un fichier texte indiquant quels ports peuvent être utilisés pour les connexions RMI En général on appelle ce fichier java.policy Localisé dans le répertoire où se situent les classes Exemple de fichier java.policy : grant { permission java.net.socketpermission "localhost:1024-65535","connect,accept"; }; Lancement : Serveur : java Djava.security.policy=java.policy paquetage.fichierimpl Client : java Client 31

Aspects pratiques : (5) Sécurité : aspects particuliers Si le client est une applet qui souhaite récupérer le stub dynamiquement : java Djava.rmi.server.codebase=URL -Djava.security.policy=java.policy paquetage.fichierimpl Où URL est l adresse (http://...) du serveur web où télécharger les classes Le fichier java.policy est : Si les stubs sont sur un serveur web : grant { permission java.net.socketpermission "*:1024-65535","connect,accept"; permission java.net.socketpermission "*:80","connect"; }; Si les stubs peuvent être récupérés à partir du système de fichiers : grant { permission java.net.socketpermission "*:1024-65535","connect,accept"; permission java.io.filepermission "chemin vers les classes","read"; }; 32

Aspects pratiques : (6) Dans l API vous avez à disposition les paquetages : java.rmi : contient les classes RMI de base Naming java.rmi.activation : Activation d objets RMI java.rmi.dgc : Classes et interfaces pour le garbage-collect distribué par RMI. java.rmi.registry : Manipulation du registre RMI localisation du registre... java.rmi.server : Classes et interfaces pour le côté serveur de RMI Super classes pour les stubs et skeletons UnicastRemoteObject, RemoteObject 33

EXERCICE : (part. 1) But : Écrire une application répartie permettant de gérer des comptes bancaires. Le serveur gère les comptes bancaires et permet aux client d effectuer les opérations suivantes : Créer un compte en banque. Consulter la position d un compte Ajouter une somme sur un compte Retirer une somme d un compte Méthodes distantes : void creer_compte(string id, double somme_initiale); void ajouter(string id, double somme); void retirer(string id, double somme); Position position(string id); id est une chaîne permettant d identifier un compte et Position est la classe suivante : public class Position { public double solde; public Date derniereoperation; public Position(double solde) { this.solde = solde; this.derniereoperation = new Date(); } // fin constructeur } // fin classe Position 34

EXERCICE : (part. 2) Questions : 1. Ecrire une interface Banque dérivant de Remote qui déclare les méthodes distantes. 2. Ecrire la classe Compte qui permet de consulter la position d un compte, d ajouter et de retirer une somme à un compte. 3. Ecrire une classe BanqueImpl qui gère la partie serveur de notre application répartie. Les comptes seront stockés dans une Hashtable qui permettra de retrouver un compte à partir de son identification. 4. Ecrire une classe BanqueClient qui gère la partie client de notre application répartie. L application présentera un petit menu (sous forme textuelle) permettant d accéder aux diverses méthodes. 5. Lancer plusieurs clients et tester l application répartie. 35