Java Remote Method Invocation



Documents pareils
Remote Method Invocation (RMI)

Remote Method Invocation Les classes implémentant Serializable

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

Calcul Parallèle. Cours 5 - JAVA RMI

RMI le langage Java XII-1 JMF

Intergiciel - concepts de base

Remote Method Invocation en Java (RMI)

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

Conception de serveurs d'applications ouverts

Programmation répartie RPC & RMI

Java - RMI Remote Method Invocation. Java - RMI

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

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

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Généralités sur le Langage Java et éléments syntaxiques.

2 Chapitre 1 Introduction

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

Flux de données Lecture/Ecriture Fichiers

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

Synchro et Threads Java TM

TP1. Outils Java Eléments de correction

Développement Logiciel

Java Naming and Directory Interface

GEI 465 : Systèmes répartis

TP1 : Initiation à Java et Eclipse

Programmer en JAVA. par Tama

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

Projet gestion d'objets dupliqués

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

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

INITIATION AU LANGAGE JAVA

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

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

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

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

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

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

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)

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

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

Java DataBaseConnectivity

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

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

Chapitre VI- La validation de la composition.

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

Premiers Pas en Programmation Objet : les Classes et les Objets

PROGRAMMATION PAR OBJETS

Auto-évaluation Programmation en Java

Applications des patrons de conception

Programmation Objet Java Correction

Une introduction à Java

Traitement de données

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

Initiation à JAVA et à la programmation objet.

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Plan. Programmation par agents. Un agent mobile C est quoi?

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

Programmation répartie: Objet distribué. CORBA (Common Object Request Broker Architectur)

Patrons de Conception (Design Patterns)

Un ordonnanceur stupide

Programmation par les Objets en Java

Architecture Orientée Service, JSON et API REST

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

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

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

Cours 1: Java et les objets

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

Java c est quoi? Java pourquoi?

.NET remoting. Plan. Principes de.net Remoting

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Introduction à CORBA

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

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

Architecture applicative et Cartographie

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

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

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Composants logiciels Exemples : Java Beans, Enterprise Java Beans

NFP111 Systèmes et Applications Réparties

Projet de programmation (IK3) : TP n 1 Correction

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

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

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

Chapitre I Notions de base et outils de travail

Présentation de Java. Olivier de Pertat IT GROUP

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Java Licence Professionnelle CISII,

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

Objets et Programmation. origine des langages orientés-objet

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

La JVM. La machine virtuelle Java. La JVM. La JVM

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

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Transcription:

Java Remote Method Invocation Ce support est très largement inspiré du livre et du cours de S. Krakowiak S. Krakowiak Java Remote Method Invocation 1 / 25

Intérêt des objets pour la construction d applications réparties Encapsulation L interface (méthodes + attributs) est la seule voie d accès à l état interne, non directement accessible Classes et instances Mécanismes de génération d exemplaires conformes à un même modèle Héritage Mécanisme de spécialisation : facilite récupération et réutilisation de l existant Polymorphisme Mises en oeuvre diverses des fonctions d une interface Remplacement d un objet par un autre si interfaces compatibles Facilite l évolution et l adaptation des applications Java Remote Method Invocation 2 / 25

Extension du RPC aux objets Appel de procédure vs appel de méthode sur un objet Exemple : insérer une entrée dans un annuaire Java Remote Method Invocation 3 / 25

Extension du RPC aux objets Phase préalable : création d instances d une classe d objects Notion de fabrique (factory) Java Remote Method Invocation 4 / 25

Java RMI (Remote Method Invocation) Motivation : construction d applications réparties avec Java Principe Appel de méthode au lieu d appel de procédure Même schéma que RPC Le programmeur fournit Une (ou plusieurs) description(s) d interface Ici pas d IDL séparé : Java sert d IDL Le programme du serveur Objets réalisant les interfaces Serveur Le programme du client L environnement Java fournit Un générateur de talons (rmic) Un service de noms (Object Registry) Java Remote Method Invocation 5 / 25

Règles d usage Interface L interface d un objet distant (Remote) est celle d un objet Java, avec quelques règles d usage : L interface distante doit être publique L interface distante doit étendre l interface java.rmi.remote Chaque méthode doit déclarer au moins l exception java.rmi.remoteexception Passage d objets en paramètre Les objets locaux sont passés par valeur (copie) et doivent être sérialisables (étendent l interface java.io.serializable) Les objets distants sont passés par référence et sont désignés par leur interface Réalisation des classes distantes (Remote) Une classe distante doit implémenter une interface elle-même distante (Remote) Une classe distante doit étendre la classe java.rmi.server.unicastremoteobject (d autres possibilités existent) Une classe distante peut aussi avoir des méthodes appelables seulement localement (ne font pas partie de son interface Remote) Java Remote Method Invocation 6 / 25

Règles d écriture du serveur Un serveur est une classe qui implémente l interface de l objet distant Spécifier les références distantes qui doivent être implémentées (objets passés en paramètres) Définir le constructeur de l objet distant Fournir la réalisation des méthodes appelables à distance Créer et installer le gestionnaire de sécurité Créer au moins une instance de la classe serveur Enregistrer au moins une instance dans le serveur de noms Java Remote Method Invocation 7 / 25

Exemple Hello world : interface et classe de l objet distant 1 // HelloInterface.java 2 // Définition d'interface 3 import java.rmi.remote; 4 import java.rmi.remoteexception; 5 6 public interface HelloInterface extends Remote { 7 /* methode qui imprime un message 8 predefini dans l'objet appele */ 9 public String sayhello () throws RemoteException; 10 } 1 // Hello.java 2 // Classe réalisant l'interface 3 import java.rmi.remoteexception; 4 import java.rmi.server.unicastremoteobject; 5 6 public class Hello extends UnicastRemoteObject implements HelloInterface { 7 private String message; 8 9 public Hello(String message) throws RemoteException { 10 this.message = message; 11 } 12 13 /* l'implementation de la methode */ 14 public String sayhello () throws RemoteException 15 { 16 System.out.println("On me demande de dire : " + message); 17 return message; 18 }; 19 20 } Java Remote Method Invocation 8 / 25

Exemple Hello world : client 1 // HelloClient.java 2 // Programme du client 3 import java.rmi.*; 4 5 public class HelloClient { 6 public static void main (String [ ] argv) { 7 /* lancer SecurityManager */ 8 System.setSecurityManager (new RMISecurityManager()) ; 9 try { 10 /* trouver une reference vers l'objet distant */ 11 HelloInterface hello = (HelloInterface) Naming.lookup("rmi://localhost/Hello1") ; 12 /* appel de methode a distance */ 13 System.out.println (hello.sayhello()) ; 14 15 } catch (Exception e) { 16 System.out.println ("Erreur client : " + e) ; 17 } 18 } 19 } Java Remote Method Invocation 9 / 25

Exemple Hello world : serveur 1 // HelloServer.java 2 // Programme du serveur 3 import java.rmi.rmisecuritymanager; 4 import java.rmi.naming; 5 6 public class HelloServer { 7 public static void main (String [ ] argv) { 8 /* lancer SecurityManager */ 9 System.setSecurityManager (new RMISecurityManager()) ; 10 try { 11 /* creer une instance de la classe Hello et l'enregistrer dans le serveur de noms */ 12 Naming.rebind("Hello1", new Hello("Hello")) ; 13 System.out.println ("Serveur pret.") ; 14 } catch (Exception e) { 15 System.out.println("Erreur serveur : " + e) ; 16 } 17 } 18 } Java Remote Method Invocation 10 / 25

Exemple Hello world : compilation Sur la machine serveur : compiler les interfaces et les programmes du serveur javac HelloInterface.java Hello.java HelloServer.java Sur la machine serveur : créer les talons client et serveur pour les objets appelés à distance (à partir de leurs interfaces) - ici une seule classe, Hello rmic -keep Hello N.B. cette commande construit et compile les talons. L option -keep permet de garder les sources de ces talons. Depuis Java Platform, Standard Edition 5.0, cette étape n est plus nécessaire. Sur la machine client : compiler les interfaces et le programme client javac HelloInterface.java HelloClient.java N.B. il est préférable de regrouper dans un fichier.jar les interfaces des objets appelés à distance, ce qui permet de les réutiliser pour le serveur et le client Java Remote Method Invocation 11 / 25

Exemple Hello world : exécution Lancer le serveur de noms (sur la machine serveur) rmiregistry N.B. Par défaut, le registry écoute sur le port 1099. Si on veut le placer sur un autre port, il suffit de l indiquer, mais il faut aussi modifier les URL en conséquence : rmi ://<serveur> :<port>/<répertoire> Lancer le serveur java -Djava.rmi.server.codebase=file :///mnt/disk/res-rmi/ -Djava.security.policy=Hello.policy HelloServer java -Djava.rmi.server.codebase=file :Q :\res-rmi -Djava.security.policy=Hello.policy HelloServer N.B. Signification des propriétés (option -D) : Le contenu du fichier Hello.policy spécifie la politique de sécurité, cf plus loin. L URL donnée par codebase sert au chargement de classes par le client Lancer le client java -Djava.security.policy=Hello.policy HelloClient N.B. Le talon client sera chargé par le client depuis le site du serveur, spécifié dans l option codebase lors du lancement du serveur Java Remote Method Invocation 12 / 25

Exemple Hello world : sécurité Motivations La sécurité est importante lorsqu il y a téléchargement de code (il peut être dangereux d exécuter le code chargé depuis un site distant) Mise en oeuvre La politique de sécurité spécifie les actions autorisées, en particulier, sur les sockets Exemples de contenu du fichier Hello.policy 1 grant { 2 permission java.net.socketpermission "*:1024-65535", "connect,accept"; 3 }; 1 grant { 2 permission java.net.socketpermission "*:1024-65535", 3 "connect,accept"; 4 permission java.net.socketpermission "*:80", "connect"; 5 }; Permet d utiliser les sockets comme indiqué. Toute autre utilisation est interdite Java Remote Method Invocation 13 / 25

Fonctionnement d ensemble de Java RMI Java Remote Method Invocation 14 / 25

Fabrique d objets (Factory) Motivation Permettre au client de construire des instances multiples d une classe C sur le site serveur Le new n est pas utilisable tel quel (car il ne gère que la mémoire locale, celle du client) Solution : appel d un objet FabriqueC, qui crée localement (sur le serveur) les instances de C (en utilisant new C) Java Remote Method Invocation 15 / 25

Exemple Hello world Factory 1 // HelloFactoryInterface.java 2 import java.rmi.remote; 3 import java.rmi.remoteexception; 4 5 public interface HelloFactoryInterface extends Remote { 6 /* methode qui cree un objet Hello */ 7 public HelloInterface createhello(string message) throws RemoteException; 8 } 1 // HelloFactory.java 2 import java.rmi.remoteexception; 3 import java.rmi.server.unicastremoteobject; 4 5 public class HelloFactory extends UnicastRemoteObject implements HelloFactoryInterface { 6 public HelloFactory() throws RemoteException { 7 } 8 9 /* l'implementation de la methode */ 10 public HelloInterface createhello(string message) throws RemoteException { 11 return new Hello(message); 12 }; 13 14 } Java Remote Method Invocation 16 / 25

Exemple Hello world Factory 1 // HelloFactoryClient.java 2 import java.rmi.*; 3 4 public class HelloFactoryClient { 5 public static void main (String [ ] argv) { 6 /* lancer SecurityManager */ 7 System.setSecurityManager (new RMISecurityManager()) ; 8 try { 9 /* trouver une reference vers l'objet distant */ 10 // HelloInterface hello = (HelloInterface) Naming.lookup("rmi://localhost/Hello1") ; 11 /* appel de methode a distance */ 12 // System.out.println (hello.sayhello()) ; 13 HelloFactoryInterface hellofactory = (HelloFactoryInterface) Naming.lookup("rmi://localhost /Factory") ; 14 HelloInterface hello = hellofactory.createhello("bonjour "); 15 System.out.println (hello.sayhello()); 16 17 } catch (Exception e) { 18 System.out.println ("Erreur client : " + e) ; 19 } 20 } 21 } Java Remote Method Invocation 17 / 25

Exemple Hello world Factory 1 // HelloFactoryServer.java 2 import java.rmi.rmisecuritymanager; 3 import java.rmi.naming; 4 5 public class HelloFactoryServer { 6 public static void main (String [ ] argv) { 7 /* lancer SecurityManager */ 8 System.setSecurityManager (new RMISecurityManager()) ; 9 try { 10 /* creer une instance de la classe Hello et l'enregistrer dans le serveur de noms */ 11 // Naming.rebind("Hello1", new Hello("Hello")) ; 12 Naming.rebind("Factory", new HelloFactory()) ; 13 System.out.println ("Serveur pret.") ; 14 } catch (Exception e) { 15 System.out.println("Erreur serveur : " + e) ; 16 } 17 } 18 } Java Remote Method Invocation 18 / 25

Passage d objets en paramètre Deux cas possibles Passage en paramètre d un objet local (sur la JVM de l objet appelant) Passage par valeur : on transmet une copie de l objet (plus précisément : une copie de l ensemble de ses variables d état). Pour cela l objet doit être sérialisable (i.e. implémenter l interface java.io.serializable) Passage en paramètre d un objet non-local (hors de la JVM de l objet appelant, par ex. sur un site distant) Passage par référence : on transmet une référence sur l objet (plus précisément : un stub de l objet). Le destinataire utilisera ce stub pour appeler les méthodes de l objet. Java Remote Method Invocation 19 / 25

Passage d objets en paramètre Notions sur les objets sérialisables Un objet sérialisable (transmissible par valeur hors de sa JVM) doit implémenter l interface java.io.serializable. Celle-ci est réduite à un marqueur (pas de variables ni d interface) Les objets référencés dans un objet sérialisable doivent aussi être sérialisables Comment rendre effectivement un objet sérialisable? Pour les variables de types primitifs (int, boolean,...), rien à faire Pour les objets dont les champs sont constitués de telles variables : rien à faire On peut éliminer une variable de la représentation sérialisée en la déclarant transient Pour un champ non immédiatement sérialisable (ex. : Array),il faut fournir des méthodes readobject() et writeobject() Exemples de sérialisation : passage en paramètres, écriture sur un fichier. Le support de sérialisation est un stream (flot) : classes java.io.objectoutputstream et java.io.objectinputstream. Pour des détails techniques : voir javadoc de l interface Serializable et des classes ObjectOutputStream et ObjectInputStream Java Remote Method Invocation 20 / 25

Notions sur le fonctionnement interne de Java RMI La classe UnicastRemoteObject Rappel de la règle d usage : une classe d objets accessibles à distance étend la classe java.rmi.unicastremoteobject. Le principale fonction de cette classe se manifeste lors de la création d une instance de l objet. 1 public class AnnuaireImpl extends UnicastRemoteObject {...} 2 AnnuaireImpl (...) { // le constructeur de C appelle automatiquement 3 // le constructeur de la superclasse UnicastRemoteObject 4... 5 monannuaire = new AnnuaireImpl (...) ; 6 } Le constructeur crée une instance de stub pour l objet (en utilisant la classe Annuaire Stub engendrée par rmic, et retourne ce stub comme résultat de la création Le contenu d un stub Un stub contient essentiellement une variable ref de type RemoteRef qui contient la localisation de l objet (adresse IP, port) Un appel de méthode se fait par appel de ref.invoke(...) qui utilise les sockets pour la communication Java Remote Method Invocation 21 / 25

Notions sur le fonctionnement interne de Java RMI Le serveur de noms (registry) Classes utiles (fournies par java.rmi) Naming : sert de représentant local du serveur de noms. Permet d utiliser les méthodes bind(), rebind(), lookup(), unbind(), list() LocateRegistry : permet de localiser un serveur de noms (rmiregistry) et éventuellement d en créer un. En général invisible au client (appelé en interne par Naming) Java Remote Method Invocation 22 / 25

Conclusion sur Java RMI Extension du RPC aux objets Permet l accès à des objets distants Permet d étendre l environnement local par chargement dynamique de code Pas de langage séparé de description d interfaces (IDL fourni par Java) Limitations Environnement restreint à un langage unique (Java) Mais passerelles possibles, en particulier RMI/IIOP Services réduits au minimum Service élémentaire de noms (sans attributs) Pas de services additionnels : Duplication d objets, Transactions,... Java Remote Method Invocation 23 / 25

Compléments Tout n a pas été traité ici. Il reste des points complémentaires, dont Parallélisme sur le serveur Un serveur RMI peut servir plusieurs clients. Dans ce cas, un thread séparé est créé pour chaque client sur le serveur. C est au développeur du programme serveur d assurer leur bonne synchronisation (exemple : méthodes synchronized) pour garantir la cohérence des données) Activation automatique de serveurs Un veilleur (demon) spécialisé, rmid, peut assurer le lancement de plusieurs classes serveur sur un site distant (cette opération est invisible au client) Téléchargement de code Un chargeur spécial (ClassLoader) peut être développé pour assurer le téléchargement des classes nécessaires Java Remote Method Invocation 24 / 25

References Cours de S. Krakowiak http ://docs.oracle.com/javase/tutorial/rmi/ Distributed Systems : Principles and Paradigms, A. S. Tanenbaum Distributed Systems, P. Krzyzanowski Java Remote Method Invocation 25 / 25