Systèmes distribués. Les Sockets



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

Remote Method Invocation (RMI)

RMI le langage Java XII-1 JMF

Remote Method Invocation en Java (RMI)

Conception de serveurs d'applications ouverts

Intergiciel - concepts de base

Java - RMI Remote Method Invocation. Java - RMI

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

Calcul Parallèle. Cours 5 - JAVA RMI

Remote Method Invocation Les classes implémentant Serializable

Programmation répartie RPC & RMI

TP1 : Initiation à Java et Eclipse

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

Projet de Veille Technologique

Projet gestion d'objets dupliqués

Chapitre 10. Les interfaces Comparable et Comparator 1

Initiation à JAVA et à la programmation objet.

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

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

Programmation Objet Java Correction

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

Chapitre 2. Classes et objets

Cours 1: Java et les objets

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

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

Auto-évaluation Programmation en Java

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

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

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

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

Java Naming and Directory Interface

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

Systeme d'exploitation

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Programmer en JAVA. par Tama

INITIATION AU LANGAGE JAVA

EXA1415 : Annotations

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

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

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

Programmation par les Objets en Java

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

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

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

Java DataBaseConnectivity

OS Réseaux et Programmation Système - C5

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

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

GEI 465 : Systèmes répartis

Langage Java. Classe de première SI

TP1. Outils Java Eléments de correction

ACTIVITÉ DE PROGRAMMATION

Programmation Par Objets

Création d un service web avec NetBeans 5.5 et SJAS 9

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

Chapitre VI- La validation de la composition.

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

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

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

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

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

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

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

Synchro et Threads Java TM

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

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

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

Programmation Orientée Objet

Premiers Pas en Programmation Objet : les Classes et les Objets

Bases Java - Eclipse / Netbeans

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

.NET remoting. Plan. Principes de.net Remoting

as Architecture des Systèmes d Information

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

JavaServer Pages (JSP)

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

Présentation de Java. Olivier de Pertat IT GROUP

Développement Logiciel

Corrigé des exercices sur les références

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Une introduction à Java

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

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

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Un ordonnanceur stupide

Sage CRM. 7.2 Guide de Portail Client

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Utiliser Java sans BlueJ

Java Licence Professionnelle CISII,

1. Installation d'un serveur d'application JBoss:

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

F. Barthélemy. 17 mai 2005

Java Licence Professionnelle CISII,

I. Introduction aux fonctions : les fonctions standards

Transcription:

Systèmes distribués Plusieurs technologies existent : Les sockets Les remote procedure call (RPC) Remote Method Invocation (RMI) Les Sockets L'utilisation des Sockets nécessite De gérer le codage et le décodage des messages De concevoir et de développer le protocole d'échange Le concepteur de l'application est conduit à gérer les détails de bas niveau de la communication inter-processus

Remote Procedure Call (RPC) Le programmeur a l'illusion d'appeler une procédure locale RPC s'occupe d'encoder les arguments, de les transmettre sur le réseau, de décoder le résultats de l'appel Il y a plusieurs technologies RPC Java RMI (Remote Method Invocation) Java RMI est la projection des RPC dans l'environnement Java. Java RMI a pour but de permettre aux développeurs d'écrire des applications distribuées de la même manière qu'ils écrivent des application non-distribuées.

Java RMI L'architecture RMI définit : Comment les objets se comportent; Quand et comment les exceptions peuvent survenir; Comment la mémoire est gérée; Comment les paramétres sont passés aux méthodes distantes; Comment les méthodes distantes retournent les résultats d'exécution. Java RMI Le code qui définit le service est séparé du code qui implémente le service. La définition du service distant est faite par une interface Java. L'implémentation du service distant est faite par une classe Java. Programme client Programme serveur Interface Implémentation RMI

Java RMI : Stub et Skeleton Le stub c'est le proxy en RMI. Il a pour fonctions: d'initier la communication avec la JVM distante De traduire les paramètres dans un format qui permette de les transmettre De transmettre les paramètres à la JVM distante D'attendre les résultats De lire les résultats ou les exceptions obtenus et de les transformer en objets java De retourner les résultats à l'appelant

Java RMI : stubs et skeleton Le skeleton réside sur la partie serveur : Il lit les paramètres de l'invocation appelle la méthode invoquée traduit le résultat dans un format qui permette de le transmettre transmet le résultat à la JVM distante

Passage de paramètres Quand un type primitif (int, float, double,...) est passé à un objet distant, RMI passe le paramètre par valeur. Quand un résultat de type primitif est retourné, il est passé par valeur. Quand un objet est passé à un objet distant, il est passé par valeur : c'est une copie de l'objet qui est passée. Quand l'objet contient d'autres objets, c'est le graphe complet qui est passé par valeur. Quand c'est un objet qui est retourné, il est passé par valeur. Sérialisation - Désérialisation La sérialisation c'est l'action de transformer un objet en un format qui permette de le transférer sur le réseau. RMI utilise la sérialisation pour le faire passer sur le réseau La désérialisation c'est l'action de recréer un objet à partir du flux capté sur le réseau. RMI utilise la désérialisation pour retrouver un objet à partir d'un flux. Une méthode distante peut renvoyer des objets remote, des types primitifs ou des objets Java. Dans ce dernier cas, ils doivent implémenter l'interface java.io.serializable. L'interface java.io.serializable impose d'implémenter les méthodes suivantes : private void writeobject(java.io.objectoutputstream out) throws IOException private void readobject(java.io.objectinputstream in) throws IOException, ClassNotFoundException;

Garbage collector distribué RMI utilise un garbage collector distribué RMI maintient pour chaque client un compteur de référence : le nombre d'objets client qui ont demandé une référence sur cet objet. Quand ce compteur passe à 0, l'objet peut être nettoyé RMI détruit les objets auxquels on n'a pas accédé depuis un intervalle de temps configurable et fixé par défaut à 10 minutes. Il est possible de définir des comportements qui permettent de réagir au nettoyage de l'objet. Remote Référence Layer RMI contient un service de nommage: le service de registry rmiregistry. C'est le RMI registry qui permet d'obtenir une référence sur chaque service hébergé par le serveur. Côté client, le registry RMI est accédé à travers la classe static Naming. Cette classe fournit la méthode lookup() que le client utilise pour interroger le registry. Lookup prend en paramètre une url qui identifie le serveur et le nom du sevice désiré. Lookup renvoie une référence distante sur l'objet qui va permettre d'accéder au service. L'URL est de la forme: rmi://<host_name>[:<name_service_port>]/<service_name>

Lancer la registry public static Registry createregistry(int port) throws RemoteException ==> permet de lancer la registry public static void rebind(string name, Remote obj) throws RemoteException, MalformedURLException ==> Permet d'associer une url à un objet serveur. Il faudra écrire un programme qui va appeler ces deux méthodes en préalable au traitement. Obtenir une référence sur un objet distant public static void main(string[] args) { try { Remote r = Naming.lookup("rmi://vaio/127.0.0.1/TestRMI"); MonObjectRemote monobjetremote = (MonObjetRemote) r ; String s = monobjetremote.getdata(); System.out.println("chaine renvoyée = " + s); catch (Exception e) {

Registry RMI Le registry RMI tourne sur chaque machine qui héberge des services RMI Sur la machine hôte, le programme serveur crée un service RMI de la façon suivante: Il crée un objet qui implémente le service sur la machine serveur Il exporte l'objet vers RMI RMI crée un service qui va écouter les demandes des clients qui vont demander une connection au service Le serveur enregistre l'objet dans la registry RMI sous un nom public. Invocation d'une méthode sur un objet distant client serveur Lorsqu'un client désire invoquer une méthode d'un objet distant, il effectue les opérations suivantes : Il localise l'objet distant grâce à un service d annuaire (Registry) 1- Il obtient dynamiquement une image virtuelle de l'objet distant (stub). 2- Le stub possède exactement la même interface que l'objet distant. 3- Le stub sérialise les appels de la méthode distante, puis les transmet au serveur sous forme de flux de données. 4- Le Skeleton"désérialise" les données envoyées par le stub, puis appelle la méthode en local. 5- Le Skeleton récupère les résultats puis les séralize. 6- Le stub démarshalise les données provenant du Skeleton et les transmet au client

Obtenir une référence sur un objet distant public static void main(string[] args) { try { Remote r = Naming.lookup("rmi://vaio/127.0.0.1/TestRMI"); MonObjectRemote monobjetremote = (MonObjetRemote) r ; String s = monobjetremote.getdata(); System.out.println("chaine renvoyée = " + s); catch (Exception e) { Définir l'interface d'un objet distant L'interface doit être publique L'interface doit étendre directement ou indirectement java.rmi.remote Chaque méthode doit inclure une exception java.rmi.remoteexception ou une de ses super- classes java.io.ioexception or java.lang.exception dans sa clause throws en plus des exceptions dépendantes de l'application. Elle peut étendre une interface qui n'étend pas java.rmi.remote à condition que chaque méthode satisfait à la règle précédente.

Définir une Interface distante (1) public interface BankAccount extends java.rmi.remote { public void deposit(float amount) throws java.rmi.remoteexception; public void withdraw(float amount) throws OverdrawnException, java.rmi.remoteexception; public float getbalance() throws java.rmi.remoteexception; Les clauses throws des méthodes de l'objet distant utilisent java.rmi.remoteexception L'interface hérite de java.rmi.remote Définir une interface distante (2) public interface Alpha { public final String okay = "constants are okay too"; public Object foo(object obj ) throws java.rmi.remoteexception; public void bar() throws java.io.ioexception; public int baz() throws java.lang.exception; public interface Beta extends Alpha, java.rmi.remote { public void ping() throws java.rmi.remoteexception; Beta respecte aussi la règle des clauses throws Beta étend Alpha mais aussi java.rmi.remote Alpha respecte la régle des clause throws La définition est correcte

Classe RemoteException La classe java.rmi.remoteexception est la super-classe de toutes les exceptions suceptible d'être lancée par le runtime RMI pendantl'invocation de méthode. Une RemoteException est lancée lorsque une invocation de méthode distante échoue pour une raison quelconque. Entre autres: Échec de la communication ; Échec de la sérialisation ou de la désérialisation ; Erreur de protocole. java.rmi.remoteexception est une exception vérifiée («checked»). Cela signifie qu'elle doit être gérée par l'appelant et que cela est vérifiée par le compilateur Java. Les classes Serveur Les fonctions de serveur RMI sont fournies par la classe java.rmi.server.remoteobject et ses sous-classes java.rmi.server.remoteserver et java.rmi.server.unicastremoteobject et java.rmi.activation.activatable. La classe java.rmi.server.remoteobject fournit des implémentations des méthodes de java.lang.object hashcode, equals, and tostring qui sont utilisées pour la gestion des objets distants. Les classes nécessaires à la création d'objets distants et à les rendre disponibles pour les clients sont fournies par les classes UnicastRemoteObject et Activatable. Ces sous-classes introduisent des différences dans le cycle de vie de l'objet distant: Utilisée en règle générale La classe java.rmi.server.unicastremoteobject définit l'objet distant comme un singleton (c'est à dire une classe qui n'a qu'une seule instance) dont les références ne sont valides que tant que le process serveur est en vie. La classe java.rmi.activation.activatable définit l'objet distant qui ne devient actif lorsque une de ses méthodes est invoquée et peut se désactiver si nécessaire.

Les classes Serveur Les règles pour implémenter une interface distante sont les suivantes: Elle implémente java.rmi.server.unicastremoteobject ou java.rmi.server.unicastremoteobject la plupart du temps ou héritant des comportements définis par les classes java.rmi.server.remoteobject et java.rmi.server.remoteserver. La classe implémente un nombre quelconque d'interface distantes; La classe peut étendre une autre classe d'implémentation La classe peut définir des méthodes qui n'apparaissent pas dans l'interface distante mais ces méthodes ne peuvent être utilisées que localement et ne sont pas disponibles pour les clients distants. Exemple d'implémentation package mypackage; import java.rmi.remoteexception; import java.rmi.server.unicastremoteobject; public class BankAccountImpl extends UnicastRemoteObject implements BankAccount { private float balance = 0.0; public BankAccountImpl(float initialbalance) throws RemoteException { balance = initialbalance; public void deposit(float amount) throws RemoteException {... public void withdraw(float amount) throws OverdrawnException, RemoteException {... public float getbalance() throws RemoteException {...

La marche à suivre 0. Mettre toutes les classes dans le même répertoire 1. Compiler le projet avec le compilateur java Utiliser netbeans 2. Générer le stub et le skeleton avec l'outil rmic avec en paramètre le fichier interface %JAVA_HOME%/bin/rmic -classpath. Bonjour 3. Démarrer le service de registry RMI. Deux solutions: Exécuter le programme rmiregistry livré avec le jdk en se plaçant dans le répertoire où trouver les fichiers.class Exécuter une classe qui effectue le chargement 4. Lancer l'application pour la tester Exercices Que font les classes du répertoire Bonjour RMI? Tenter de compiler et d'éxécuter... Que font les classes du répertoire Banque RMI? Compiler et exécuter le pojet BanqueRMI Faire en sorte d'accèder à un serveur BankSystemServeur sur une machine distante.

Exercice : Chat On vous demande d'écrire un programme de chat. On lance le client en précisant à la ligne de commande son nom d'utilisateur Le client affiche la liste des utilisateurs connectés Le client attend ensuite une commande : Nom utilisateur > xxxxxxxxxx Quand l'utilisateur tape entrée, le client envoie le message et le destinataire au serveur. Le serveur renvoie alors la liste des messages qui lui ont été envoyés. Le client affiche alors: De Nom utilisateur : xxxxxxxxxx Définissez les interfaces et proposez une implémentation pour le client et le serveur.