ENVIRONNEMENT CLIENT/SERVEUR

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

RMI le langage Java XII-1 JMF

Remote Method Invocation (RMI)

Intergiciel - concepts de base

Remote Method Invocation en Java (RMI)

Remote Method Invocation Les classes implémentant Serializable

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation répartie RPC & RMI

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Auto-évaluation Programmation en Java

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

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

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

Conception de serveurs d'applications ouverts

Synchro et Threads Java TM

Chapitre 10. Les interfaces Comparable et Comparator 1

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

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

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

Un ordonnanceur stupide

Java Licence Professionnelle CISII,

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

Programmer en JAVA. par Tama

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

OS Réseaux et Programmation Système - C5

Projet gestion d'objets dupliqués

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

Threads. Threads. USTL routier 1

INITIATION AU LANGAGE JAVA

Corrigé des exercices sur les références

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 )

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Java DataBaseConnectivity

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

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

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

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

Package Java.util Classe générique

Une introduction à Java

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

Développement Logiciel

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

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

Exercices INF5171 : série #3 (Automne 2012)

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

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

Initiation à JAVA et à la programmation objet.

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

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

Architecture Orientée Service, JSON et API REST

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

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

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

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

Java - RMI Remote Method Invocation. Java - RMI

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

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

LOG4430 : Architecture logicielle et conception avancée

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

Architecture applicative et Cartographie

La carte à puce. Jean-Philippe Babau

F. Barthélemy. 17 mai 2005

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Programmation par les Objets en Java

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

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

Java 1.5 : principales nouveautés

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

Applet pour visualiser les variables «automate» notifiées

Environnements de développement (intégrés)

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Derrière toi Une machine virtuelle!

Application web de gestion de comptes en banques

TD3: tableaux avancées, première classe et chaînes

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

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

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

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

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

Chapitre VI- La validation de la composition.

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Notion de thread (1/2)

Chapitre 2. Classes et objets

TP, première séquence d exercices.

2 Chapitre 1 Introduction

ACTIVITÉ DE PROGRAMMATION

JOnAS Day 5.1. Clustering

GEI 465 : Systèmes répartis

Exercices sur les interfaces

Transcription:

ENVIRONNEMENT CLIENT/SERVEUR Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn

Plan 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée 2 Réseaux généralités, IP, UDP 3 Multi thread en Java, TCP 4 Broadcast UDP et étude de cas 5 Rappels Java/Java 8/Sérialisation 6 Rappels Java (suite)/appel de méthode à distance 6.1 Rappels Java (suite) 6.2 RMI/RPC 2/20

static Que signifie le mot clé static sur? une méthode : la méthode n'est pas appliquée à un objet : Elle n'a pas accès aux attributs non statiques de l'objet un attribut : L'attribut est une propriété de la classe et non pas d'un objet particulier. Il ne peut être initialisé que : au moment de sa déclaration dans un bloc statique class A { static HashMap<Integer, String> map; static { map = new HashMap<>(); map.put(new Integer(1), "A"); map.put(new Integer(2), "B"); } } 3/20

Utilité Partager un même objet (par exemple un compteur) entre tous les objets d'une même classe Similaire à une variable globale (si l'attribut est public static) Similaire à une constante globale (si l'attribut est public static final Attention les champs statiques sont initialisés au chargement de la classe par la JVM, donc bien avant que le moindre code utilisateur ait été exécuté. 4/20

Quizz sur les Interfaces Soit une interface : interface I extends J { } public R 1 meth(t 1 t 1,, T n t n ) throws E 1,, E k on considère une classe C qui implémente I C doit implémenter meth? oui C doit implémenter toutes les méthodes de J? oui C peut changer la visibilité de meth (public en private)? non C peut définir meth avec des types (arguments ou retour) différents? non (i.e. il doit au moins définir meth avec le même prototype. Elle peut par contre la surcharger avec d'autres versions) C peut définir meth avec plus d'exceptions? non C peut définir meth avec moins d'exceptions? oui C peut définir meth avec l'attribut synchronized? oui I peut déclarer meth avec l'attribut synchronized? non 5/20

Plan 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée 2 Réseaux généralités, IP, UDP 3 Multi thread en Java, TCP 4 Broadcast UDP et étude de cas 5 Rappels Java/Java 8/Sérialisation 6 Rappels Java (suite)/appel de méthode à distance 6.1 Rappels Java (suite) 6.2 RMI/RPC 6/20

RPC? RPC (Remote Procedure Call) : système permettant à un programme d'appeler une procédure où une fonction se trouvant dans un espace d'adressage séparé. Typiquement, la procédure appelée se trouve dans un autre processus qui peut lui même se trouver sur une autre machine. Le système se charge de prendre en charge les aspects bas niveau (communication par des fichiers partagés ou le réseau, (dé) sérialisation des données, ). Du point de vue du programmeur, c'est un simple appel de fonction. Dans les langages objets on parle de RMI (Remote Method Invocation). 7/20

Intérêt Technique permettant d'implémenter facilement des applications client/serveur en les imaginant comme des applications multi composant/multi modules. Le système se charge en suite de fournir des opérations pour démarrer les composants dans différents processus et les faire communiquer. 8/20

Inconvénients Certains aspects bas niveau viennent quand même polluer le code (fait qu'une méthode peut être interrompue par une erreur réseau par exemple) Les systèmes étant génériques (marchent pour tous les domaines d'application) ils génèrent souvent du code peu efficace (protocole lourd, sérialisation coûteuse en temps/espace/bande passante, insertion de multiples verrous, ) Pleins de standard différents, tous incompatibles entre eux : D Bus (linux) CORBA (multi systèmes, mais très lent et complexe) COM (Windows uniquement) XML RPC (arguments sérialisés en XML, utilise le protocole HTTP, très utilisé pour les services Web) Java RMI Donc tous les composants de l'application doivent être écrit avec le même framework, souvent dans le même langage. 9/20

Principe du RMI en Java Une application RMI en Java utilisera trois composants : 1. Une (ou plusieurs) classe serveur, qui doivent implémenter l'interface java.rmi.remote 2. Une (ou plusieurs) classe client qui appellent des méthodes de la classe serveur. Les arguments et types de retours doivent implémenter l'interface java.io.serializable 3. Un programme spécial rmiregistry fourni avec l'environnement Java qui s'occupe de gérer les connexions et auprès duquel : Le serveur peut enregistrer des objets appelables depuis le réseau Le client peut récupérer des objets dont le code se trouve de l'autre côté du réseau, sur le serveur 10/20

Définitions Proxy : Objet P possédant les même méthodes qu'un Objet O et pour lesquelles chaque appel à une méthode de P fait appel à la méthode correspondante sur O. Dans le cadre de Java RMI : Stub : Objet proxy crée côté client, ayant la même interface que l'objet Serveur distant et qui transmet les appels de méthodes sur le réseau Skeleton (squelette) : Objet crée côté serveur qui reçoit les données du réseau et appel les méthodes de l'objet Serveur avec les paramètres dé sérialisées 11/20

Étapes de la mise en place d'un système RMI 1. Démarrage de la rmiregistry. 2. Démarrage du code serveur. Ce dernier instancie l'objet Serveur et l'enregistre auprès de la rmiregistry. Un squelette est crée et placé en attente de connexions. 3. Démarrage du code client. Ce dernier contacte la rmiregistry pour demander une implémentation de l'objet Serveur 4. La rmiregistry renvoie un stub de l'objet Serveur 5. Le client appelle une méthode du stub. Le stub sérialise les arguments et les envoie par le réseau au squelette. Le squelette dé sérialise les arguments et appelle la méthode de l'objet Serveur avec. 6. S'il y a un résultat, il suit le chemin inverse (Objet Serveur Squelette Stub Code client). Si le code Serveur lève une exception elle est sérialisée et renvoyée comme un résultat, puis relancée par le stub. 12/20

Récapitulatif Machine Client Machine Serveur Interface Objet Serveur Objet Client Stub (proxy) Objet Serveur (4) Communication par appel de méthodes Interface Objet Serveur Squelette Objet Serveur Objet Serveur (1) Enregistre l'objet Serveur (3) Renvoie un Stub pour l'objet Serveur Machine RMI Registry (souvent identique à Machine Serveur) (2) Recherche l'objet Serveur rmiregistry 13/20

RMI en Java (interface) On prend l'exemple d'un Objet serveur permettant de faire + 42 sur un entier donné en argument. Il faut d'abord spécifier le code du serveur dans une interface, qui doit être connue du client et du serveur : import java.rmi.remote; import java.rmi.remoteexception; interface IAdd42 extends Remote { } public Integer add42(integer i) throws RemoteException; 14/20

RMI en Java (code serveur) L'objet serveur doit implémenter l'interface ainsi que du code permettant de s'enregistrer auprès de la rmiregistry import public class Add42 implements IAdd42 { public Integer add42(integer i) { return i + 42; } public static void main(string[] args) { if (System.getSecurityManager() == null) System.setSecurityManager(new SecurityManager()); try { String name = "MonObjetPlus42"; IAdd42 adder = new Add42(); IAdd42 stub = (IAdd42) UnicastRemoteObject.exportObject(adder, 0); Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub); System.out.println("Ok"); } catch (Exception e) { }; 15/20

RMI en Java (code serveur) L'objet doit implémenter l'interface définie import public class Add42 implements IAdd42 { Il faut qu'un SecurityManager soit installé (il n'y en a pas par défaut). Sans cela, les objets ne peuvent pas faire d'appels réseau if (System.getSecurityManager() == null) System.setSecurityManager(new SecurityManager()); On crée un nom ainsi qu'un instance de l'objet réel String name = "MonObjetPlus42"; //Création d'un nom IAdd42 adder = new Add42(); //Création de l'objet réel On crée l'objet stub qui sera envoyé au client, on récupère une référence vers la rmiregistry et on y enregistre le stub : IAdd42 stub = (IAdd42) UnicastRemoteObject.exportObject(adder, 0); Registry registry = LocateRegistry.getRegistry(); 16/20

RMI en Java (code client) Le client récupère (auprès de la rmiregistry) le stub de l'objet serveur dont il connaît l'interface : import public class Client { public static void main(string [] args) { if (System.getSecurityManager() == null) System.setSecurityManager(new SecurityManager()); try { Registry registry = LocateRegistry.getRegistry("machine.foo.com"); String name = "MonObjetPlus42"; IAdd42 addstub = (IAdd42) registry.lookup(name); } } System.out.println( "Un et quarante deux font : "); System.out.println(addstub.add42(new Integer(1))); } catch (Exception e) { }; 17/20

RMI en Java (code client) Le client doit aussi mettre en place un security manager : if (System.getSecurityManager() == null) System.setSecurityManager(new SecurityManager()); Le client récupère une référence vers la rmiregistry se trouvant sur une machine distante : Registry registry = LocateRegistry.getRegistry("machine.foo.com"); Le client utilise le nom pour récupérer le stub de l'objet serveur String name = "MonObjetPlus42"; IAdd42 addstub = (IAdd42) registry.lookup(name); Le client peut ensuite utiliser le stub comme si c'était l'objet réel System.out.println(addstub.add42(new Integer(1))); 18/20

Lancement des applications Le programme rmiregistry doit avoir accès au code de l'objet serveur ainsi qu'à l'interface. $ rmiregistry -J-Djava.rmi.server.codebase=file:/chemin/vers/les/classes On peut spécifier un numéro de port particulier pour les communications (par défaut 1099) ainsi qu'un autre protocole pour les classes (http par exemple). Attention, le programme rmiregistry ne rend pas la main et doit être lancé avant le démarrage du serveur. Les codes client et le serveur doivent être exécuté avec une certaine politique de sécurité : java -Djava.security.policy=file.policy Add42 java -Djava.security.policy=file.policy Client Dans notre cas, le fichier file.policy contiendra : grant { permission java.security.allpermission; }; 19/20

Politique de sécurité Java implémente un mécanisme complexe de politique de sécurité. Par défaut, une application «normale» lancée par un utilisateur a tous les droits. Certaines classes d'application n'ont cependant aucune permissions par défaut (impossibilité d'accéder au réseau, aux périphériques, aux fichiers, ). C'est le cas des applets Java (même si de moins en moins utilisés) Des applications, client et serveur, utilisant les RMI. Le serveur reçoit des objets du clients (donc potentiellement dangereux). Le client reçoit un stub du serveur (potentiellement dangereux aussi). 20/20