Programmation par RPC et Java-RMI :

Documents pareils
Remote Method Invocation (RMI)

RMI le langage Java XII-1 JMF

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

Remote Method Invocation en Java (RMI)

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation répartie RPC & RMI

Intergiciel - concepts de base

Conception de serveurs d'applications ouverts

Remote Method Invocation Les classes implémentant Serializable

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

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

OS Réseaux et Programmation Système - C5

Java - RMI Remote Method Invocation. Java - RMI

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

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

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

TP1 : Initiation à Java et Eclipse

Projet gestion d'objets dupliqués

Programmation Objet Java Correction

Auto-évaluation Programmation en Java

Programmer en JAVA. par Tama

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

Synchro et Threads Java TM

Initiation à JAVA et à la programmation objet.

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

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

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

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

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

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

Java DataBaseConnectivity

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

Java 1.5 : principales nouveautés

Corrigé des exercices sur les références

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

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

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

CORBA haute performance

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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 )

F. Barthélemy. 17 mai 2005

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Package Java.util Classe générique

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

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

2 Chapitre 1 Introduction

INITIATION AU LANGAGE JAVA

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

Java Licence Professionnelle CISII,

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

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

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

Chapitre VI- La validation de la composition.

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

Chapitre I Notions de base et outils de travail

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

TP1 : Initiation à Java et Eclipse

Création d une application JEE

Programmation client-serveur sockets - RPC

Java c est quoi? Java pourquoi?

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

GEI 465 : Systèmes répartis

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

Java Licence Professionnelle CISII,

Utiliser Java sans BlueJ

Une introduction à Java

Tp 1 correction. Structures de données (IF2)

ACTIVITÉ DE PROGRAMMATION

TP1. Outils Java Eléments de correction

Threads. Threads. USTL routier 1

Java Naming and Directory Interface

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

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

TD/TP PAC - Programmation n 3

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Introduction à CORBA

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

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

Cours 1: Java et les objets

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

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

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

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

TD/TP PAC - Programmation n 3

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

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

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

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

Programmation par les Objets en Java

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

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

as Architecture des Systèmes d Information

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

Langage Java. Classe de première SI

Développement Logiciel

Transcription:

2A-SI - Réseaux : Programmation par RPC et JavaRMI Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs 1

Principes des RPC RPC = «Remote Procedure Call» Objectif : appels locaux et distants avec la même syntaxe 1ère version : Birrel & Nelson en 1984 L utilisateur écrit toute l application : le client, le serveur et les mécanismes d envoi et de réception de messages!! Concepts simples, mais complexes à mettre en œuvre Peu utilisé SUN RPC en 1988 Plus simple, Utilise «rpcgen» : génère une partie des fichiers de RPC Utilise le DNS (localisation du serveur : adresse IP) + Portmap (localisation du service : # port) Principes des RPC Appel Service RPC (talon) Protocole de communication 1 Réseau Service RPC Protocole de (talon) communication 2 appel Appelé 3 5 retour 4 retour Client (appelant) Serveur (appelé) 2

Principes des RPC Talon client : stub C est la procédure d interface du site client qui reçoit l appel en mode local le transforme en appel distant en envoyant un message reçoit les résultats après l'exécution retourne les paramètres résultats comme dans un retour de procédure Talon serveur : skeleton C est la procédure sur le site serveur qui reçoit l appel sous forme de message fait réaliser l exécution sur le site serveur par la procédure serveur (choix de la procédure) retransmet les résultats par message Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs 3

Utilisation d un IDL Un langage pour la spécification des interfaces entre les clients et les serveurs : Spécification commune au client et au serveur Le «contrat» entre le client et le serveur Définition des types et natures des paramètres IN, OUT, IN-OUT, par valeur, par référence Définition indépendante de la plate-forme Indépendante du langage, de l OS et de la machine Utilisation de ces définitions pour générer automatiquement : Le talon client (ou proxy, ou stub) Le talon serveur (ou squelette, ou skeleton) «projection» dans un langage de programmation Utilisation d un IDL Interface écrite en «IDL» Client Compilateur IDL Serveur Talon coté client (Stub) Talon coté Serveur (Skeleton) Protocole de communication Réseau Protocole de communication 4

Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs Principes des Java-RMI Un RPC objet intégré à Java Interaction d'objets situés dans des espaces d'adressage différents sur des machines distinctes Simple à mettre en œuvre : un objet distribué se manipule comme tout autre objet Java Différences RPC/RMI : Il existe un module de localisation sur le host-serveur distant (la rmiregistry) : localisation de chaque objet-serveur. Les RMI sont plus vulnérables aux pannes: impossible de distinguer le cas de panne du serveur d un problème réseau (moins de détails dans les CR d erreurs). Les interfaces (contrats) sont des interfaces Java L IDL est Java lui-même 5

Principes des Java-RMI objet client objet serveur référence appel Talon client Talon serveur état méthode_1() méthode_n() Système de communication Référence d'objet + méthode + arguments Résultat ou exception désignation envoi de requêtes exécution de requête retour de résultat Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs 6

Mode opératoire des Java-RMI 0 - A la création de l objet-serveur, un stub et un skeleton (avec un port de communication) sont créés sur le host-serveur 1 - L'objet-serveur s'enregistre auprès du Naming de sa JVM (méthode rebind) 2 - Le Naming enregistre le stub de l objet (sérialisé) auprès du serveur de noms (rmiregistry) 3 - Le serveur de noms est prêt à fournir des références sur l objet-serveur Client Client rmiregistry rmiregistry stub stub Naming Naming stub stub Serveur Serveur JVM Client Skeleton Skeleton JVM Serveur Mode opératoire des Java-RMI 4 - L'objet client fait appel à son Naming pour localiser l'objet-serveur sur l host-serveur (méthode lookup) 5 - Le Naming récupère le stub vers l'objet-serveur auprès de la rmiregistry 6 Le naming installe l objet Stub sur le poste client et retourne sa référence au client 7 - Le client effectue l'appel à l objet serveur par appel à l objet local Stub Client Client Naming Naming rmiregistry rmiregistry stub stub Naming Naming Serveur Serveur Stub Stub Skeleton Skeleton JVM Client JVM Serveur 7

Mode opératoire des Java-RMI Etapes du développement et déploiement : 1. Codage description de l interface du service écriture du code du serveur qui implante l interface écriture du client qui appelle le serveur 2. Compilation génération des stub et skeleton (rmic) compilation des sources (javac) 3. Activation lancement du serveur de noms (rmiregistry) lancement du serveur lancement du client Mode opératoire des Java-RMI Etapes du développement et déploiement : 1 programmation: Interface java Server. java Client. java 2.1 - rmic Server Server_Stub.class Server_Skel.class (2.2 - javac Server.java) Server.class 2.3 - javac Client.java Client.class 3.1 rmiregistry 3.2 java Server 3.3 java Client 8

Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs Hiérarchie de classes Java RemoteObject RemoteServer RemoteStubs Activatable Classe : UnicastRemoteObject ActivationGroup_Stub Serveurs Stubs/Skeletons 9

Hiérarchie de classes Java RemoteObject RemoteServer RemoteStubs Activatable Classe : UnicastRemoteObject ActivationGroup_Stub Serveurs démarrés explicitement Objet/Service ayant la durée de vie du processus serveur Pour des comm. P2P entre processus actifs Utilise des comm. TCP Public class MyServerRmi extends UnicastRemoteObject Implements MyInterfaceRmi { Hiérarchie de classes Java RemoteObject RemoteServer RemoteStubs Activatable Classe : UnicastRemoteObject ActivationGroup_Stub Serveurs démarrables par le système Objet/Service persistant (non liés à la durée de vie d un processus) Les constructeurs proposent de définir un port sur lequel sera exporté le service. Sinon un port quelconque sera choisi. 10

Hiérarchie de classes Java RemoteObject RemoteServer RemoteStubs Activatable Classe : UnicastRemoteObject ActivationGroup_Stub Interfaces à destination des classes «stubs»et«skeletons» (les tallons client et serveur générés par rmic) Gérées par le mécanisme des Java-RMI Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs 11

Ex. client serveur en Java-RMI Règles d écriture des RMI : Les objets locaux passés en paramètres doivent être (juste) «serializable» Dans la majorité des cas il suffit d ajouter : «extends Serializable» dans l interface de leur classe «implements Serializable» dans la définition de leur classe Rien à faire pour les objets de base (int, double, ) Les objets difficiles à «serialiser» sont les threads éviter de passer des threads en paramètres d appel RMI! Ex. client serveur en Java-RMI Règles d écriture des RMI : Les objets distants ont plus de contraintes : L interface distante doit être publique L interface distante doit étendre l interface java.rmi.remote La classe distante hérite (généralement) de java.rmi.server.unicastremoteobject qui implémente java.rmi.remote (parfait!) Chaque méthode distante doit déclarer au moins l exception java.rmi.remoteexception Les objets distants doivent être déclarés par une référence sur leur interface (uniquement). 12

Ex. client serveur en Java-RMI Client Java rmiregistry Serveur Java «TheServer» Cas simple : Le client connaît le nom du serveur («TheServer») La rmiregistry est lancée sur le serveur Le client passe des arguments «de base» (int) // l'interface à exporter (deux services définis) public interface CalculRmi extends java.rmi.remote { public int plus(int un, int deux) throws java.rmi.remoteexception; public int mult(int un, int deux) throws java.rmi.remoteexception; Ex. client serveur en Java-RMI // Client utilisant des services d un objet-serveur distant import java.rmi.*; public class ClientRmi { static public void main(string arg[]) { int i1, i2, res; String NomHostServeur, NomObjServeur; CalculRmi ObjServeur; // Parse la ligne de commande NomHostServeur = arg[0]; NomObjServeur = arg[1]; i1 = Integer.parseInt(arg[2]); i2 = Integer.parseInt(arg[3]); try { // Recherche de l objet-serveur distant dans la rmiregistry ObjServeur = (CalculRmi) Naming.lookup( "rmi://" + NomHostServeur + "/" + NomObjServeur); // Usage du service distant trouvé res = ObjServeur.plus(i1, i2); catch (Exception e){ System.out.println("Erreur RMI " + e.getmessage()); System.exit(1); System.out.println("Résultat appel RMI: " + res); 13

Ex. client serveur en Java-RMI // Objet-Serveur RMI (debut) import java.util.*; import java.rmi.*; import java.rmi.server.*; public class ObjServeurRmi extends UnicastRemoteObject implements CalculRmi { private String nomobjserveur; public ObjServeurRmi(String s) throws RemoteException { super(); nomobjserveur = s; public String getnomobjserveur() { return nomobjserveur; Ex. client serveur en Java-RMI // Objet-Serveur RMI (fin) // Fonction main : pour le lancement du serveur static public void main(string arg[]) { System.setSecurityManager(new RMISecurityManager()); try { ServeurRmi srmi = new ObjServeurRmi("Calculateur"); Naming.rebind("//localhost/Calculateur", srmi); System.out.println("Enregistrement objet-serv OK"); catch (Exception e) { System.out.println("Pb enregistrement service: " + e.getmessage()); System.exit(1); 14

Programmation par RPC et Java-RMI : - Principes des RPC - Utilisation d un IDL - Principes des Java-RMI - Mode opératoire des Java-RMI - Hiérarchie de classes Java - Exemple de client-serveur en Java-RMI - RMI entre plusieurs serveurs Mode opératoire des Java-RMI Déploiement simple entre deux machines distantes : Client Stub Server ObjLoc Res = Server.service(ObjLoc) Objets locaux : - passés par valeurs - doivent être serializable Objets distants : - passés par «références» : stubs ObjLoc-copie par valeur Skeleton Server ObjServeur rmiregistry serveur 15

Mode opératoire des Java-RMI Déploiement complexe entre N machines : invocation dynamique de classe Client Stub ObjDist Stub Server ObjLoc Skeleton ObjDist ObjDist Res = Server.service(ObjLoc, «IdObjAndClassDistants») Invoc. Dyna Stub ObjDist Passage d objets locaux : - passés par valeurs ObjLoc-copie par valeur Skeleton Server ObjServeur - doivent être serializable Passage d objets distants : rmiregistry serveur - Nécessitent l invocation dynamique de classes Programmation par RPC et Java-RMI FIN 16