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

Documents pareils
Remote Method Invocation (RMI)

Calcul Parallèle. Cours 5 - JAVA RMI

RMI le langage Java XII-1 JMF

Intergiciel - concepts de base

Remote Method Invocation Les classes implémentant Serializable

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

Remote Method Invocation en Java (RMI)

Conception de serveurs d'applications ouverts

Java Naming and Directory Interface

Java - RMI Remote Method Invocation. Java - RMI

Projet gestion d'objets dupliqués

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

Programmation répartie RPC & RMI

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

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

Auto-évaluation Programmation en Java

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

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

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

Introduction à CORBA

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

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

2 Chapitre 1 Introduction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

TP1 : Initiation à Java et Eclipse

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

OS Réseaux et Programmation Système - C5

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

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

Corrigé des exercices sur les références

Développement Logiciel

Architecture applicative et Cartographie

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

Chapitre 2. Classes et objets

Utiliser Java sans BlueJ

Programmer en JAVA. par Tama

La base de données XML exist. A. Belaïd

Chapitre 10. Les interfaces Comparable et Comparator 1

Java DataBaseConnectivity

CORBA. (Common Request Broker Architecture)

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

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Premiers Pas en Programmation Objet : les Classes et les Objets

Software Engineering and Middleware A Roadmap

Synchro et Threads Java TM

Programmation par les Objets en Java

GEI 465 : Systèmes répartis

Cours 1: Java et les objets

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

Applications des patrons de conception

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

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

Présentation de Java. Olivier de Pertat IT GROUP

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

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

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

Traitement de données

Architecture Orientée Service, JSON et API REST

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

Java avancé Objectifs. version support 1.2

Java 1.5 : principales nouveautés

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Initiation à JAVA et à la programmation objet.

Un ordonnanceur stupide

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

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

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

Traduction des Langages : Le Compilateur Micro Java

.NET remoting. Plan. Principes de.net Remoting

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

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

TP1. Outils Java Eléments de correction

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

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

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

Création d une application JEE

INITIATION AU LANGAGE JAVA

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

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

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

Projet de programmation (IK3) : TP n 1 Correction

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

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

Corrigés des premiers exercices sur les classes

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

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

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

Java Licence professionnelle CISII,

Programmation Objet Java Correction

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)

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

PROGRAMMATION PAR OBJETS

Evaluation Idéopass Cahier d analyse technique

Une introduction à la technologie EJB (2/3)

1 Définition d une classe en Java

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Transcription:

RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples que leur implantation dans en local. RMI 1 Modèle RMI RMI 2 1 1

Modèle RMI La souche (Stub client): implante la même interface que l'objet distant. transforme l'appel de méthode en une suite d'octets à envoyer sur le réseau (Marshaling) et de reconstruire le résultat reçu sous le même format (Unmarshaling). Le squelette (Skeleton ou souche serveur): reconstruit les paramètres, trouver l'objet appelé et appelle la méthode. retourner le résultat. RMI 3 Le protocole RMI Client Hello Où est Hello? Registre Il est ici! Envoyez le stub! HelloImp_stub.class Stub Le voici! dishello() HelloImp_skel.class Client «Hello!» HelloImp.class Serveur RMI 4 2 2

Développement d'applications RMI Écrire l'interface de l'objet distant. Écrire l'implantation de cette interface. Générer les Stub/Skeleton correspondant. Exporter l'objet implémentant l'interface, l'objet distant attend alors les requête via le Skeleton. Appeler une méthode de l'objet via le Stub. RMI 5 Définition de l'interface Un objet distant est une instance d'une classe qui implémente l interface et sous classe l'interface java.rmi.remote et déclare un ensemble de méthodes distantes. Chaque méthode distante doit jeter java.rmi.remoteexception import java.rmi.remote; import java.rmi.remoteexception; public interface Hello extends Remote { String sayhello() throws RemoteException; RMI 6 3 3

Le client Le programme client obtient la souche du registre sur le serveur. Cherche le stub de l objet distant par son nom dans les registre et invoque la méthode de l objet distant Le client récupère une référence sur l'implémentation distante via le nom qui lui a été attribué précédemment, puis appelle sur cette référence la méthode distante, comme si elle était locale. RMI 7 Le client import java.rmi.registry.locateregistry; import java.rmi.registry.registry; public class Client { public static void main(string[] args) { String host = (args.length < 1)? null : args[0]; try { Registry registry = LocateRegistry.getRegistry(host); Hello stub = (Hello) registry.lookup("hello"); String response = stub.sayhello(); System.out.println("response: " + response); catch (Exception e) { System.err.println("Client exception: " + e.tostring()); e.printstacktrace(); RMI 8 4 4

L appel de la part du client Le client appelle la méthode sayhello sur la souche de l'objet distant, ce qui provoque les actions suivantes: Le client ouvre une connexion sur le serveur en utilisant le host et le port à partir de la souche de l'objet distant et sérialise les données de l'appel. Le serveur accepte l'appel entrant, effectue l'appel à l'objet distant et sérialise le résultat (ici «Hello, world!») au client Le client reçoit, désérialise et retourne le résultat à l'appelant. RMI 9 Le serveur La classe qui possède une méthode main() qui crée une instance de l'implémentation de l'objet distant, exporte l'objet distant et lie cette instance à un nom dans un registre. Le serveur : Crée et exporte l objet distant Enregistre l'objet distant auprès d un registre RMI RMI 10 5 5

Le serveur import java.rmi.registry.registry; import java.rmi.registry.locateregistry; import java.rmi.remoteexception; import java.rmi.server.unicastremoteobject; public class Server implements Hello { public String sayhello() { return "Hello, world!"; public static void main(string args[]) { try { Server obj = new Server(); Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); Registry registry = LocateRegistry.getRegistry(); registry.bind("hello", stub); System.err.println("Server ready"); catch (Exception e) { System.err.println("Server exception: " + e.tostring()); e.printstacktrace(); RMI 11 Le serveur Pour le serveur, on doit instancier la classe: java.rmi.server.unicastremoteserver. Sous classe de java.rmi.server.remoteobject. RemoteServer possède des méthodes telles que getclienthost() qui permet de connaître l'identité du client pendant un appel de méthode. RMI 12 6 6

Exporter un objet Pour être exporté, un objet doit implémenter la classe Remote. Lorsqu'un objet est exporté, un ensemble de threads est créé pour attendre les appels des méthodes. L'objet distant doit être exportée afin qu'il puisse recevoir des appels entrants: Server obj = new Server(); Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); RMI 13 Le service de nommage Pour enregistrer les objets il faut lancer le registre (service de nommage) : rmiregistry port & On enregistrer un objet au moyen de: bind(string name, Remote obj) rebind(string name,remote obj) RMI 14 7 7

Le service de nommage Le service de nommage permet de récupérer le Stub d'un objet distant à partir d'un nom. La classe Naming permet d'accéder au service de nommage d'une machine en utilisant un URL: rmi://machine:port/objet On récupère le Stub d'un objet distant à partir de son URL au moyen lookup(string name). Autres méthodes : unbind(string name) pour désenregistrer l'objet, list(string name) pour lister les objets enregistrés. RMI 15 Le service de registre Pour invoquer une méthode distante, l'appelant doit d'abord obtenir un stub pour l'objet distant. Java RMI fournit une API (de registre)pour que l'application lie un nom au stub d'un objet distant et pour les clients de trouver des objets distants par leur noms pour obtenir leurs stubs. Une fois un objet distant est enregistré sur le serveur, les appelants peuvent le rechercher par son nom, obtenir une référence d'objet distant, puis appeler des méthodes à distance sur l'objet. Registry registry = LocateRegistry.getRegistry(); registry.bind("hello", stub); RMI 16 8 8

Passage de paramètres et retours Les variables de type primitif sont passées par valeur. Les objets qui n'implémentent pas l'interface Remote sont passés par copie à condition qu'ils implémentent l'interface Serializable ou Externalizable. Les objets qui implémentent l'interface Remote sont remplacés par l'objet Stub correspondant lors du passage de paramètres. Le retour de valeur a la même sémantique. RMI 17 Sérialisation Java permet l'accès aux données externes via des streams: pour le stockage externe de données: streams de caractères streams d'octets pour permettre aux données de faire partie de l'objet stream d'objets Pour sauvegarder un objet (et ses données) sur un support externe (ex. disque) ou le transmettre (ex. par Intenet) on doit le sérialiser. RMI 18 9 9

Compilation et exécution du code Compiler les programmes: l interface en premier, le serveur puis le client: javac Hello.java, javac Server.java, javac Client.java Générer les fichiers stub et squelette pour le serveur: rmic HelloImpl Génére: Server.class, Server_Skel.class, Server_Stub.class Lancer le registre : rmiregistry 8888 & Lancer le serveur: java Server & Exécuter le client: java Client javac HelloImpl.java javac HelloServer.java javac HelloClient.java rmic HelloImpl RMI 19 10 10