1 Plan de lenseignement Cours Introduction au réseau via les objets distants (Application à RMI) Ce que cache RMI : programmation socket – mode connecté

Slides:



Advertisements
Présentations similaires
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
Advertisements

La programmation orientée objet avec Java L3-MIAGE Plan
Licence pro MPCQ : Cours
Distance inter-locuteur
Invocation de Méthode à des Objets distants RMI et Corba
Plan de l’enseignement
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Harmonisation AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Retour sur RMI.
Des sockets à RMI Programmation réseau versus programmation objet
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc
Des sockets à RMI. Pourquoi ? Maturation de la technologie orientée objet –ADA, Modula –Smalltalk, C++, Java Maturation des communications Client- Serveur.
Des sockets à RMI.
À travailler seuls Département SI AM Dery Concepts généraux
À travailler seuls Département SI AM Dery Concepts généraux
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Les numéros
Introduction aux applications réparties
Les identités remarquables
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Exposé de Système - Informatique et Réseau
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Programmation Objet en JAVA Cours 9 : Réseau R. M
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance

TP 3-4 BD21.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Common Gateway Interface
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Module 1 : Préparation de l'administration d'un serveur
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Serveurs Partagés Oracle
Java Remote Method Invocation (RMI)
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Le Concours de Conaissance Francais I novembre 2012.
Virtual Local Area Network
Titre : Implémentation des éléments finis sous Matlab
Configuration de Windows Server 2008 Active Directory
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
.Net Remoting.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
Gestion des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
Langage Oriente Objet Cours 2.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Programmation concurrente
Titre : Implémentation des éléments finis en Matlab
COURS DE PROGRAMMATION ORIENTEE OBJET :
Java et les appels de méthodes distantes
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
1 Architecture orientée service SOA Architecture orientée service SOA (Service Oriented Architecture)
11/04/ L'héritage Cours 7 Cours 7.
Systèmes distribués Plusieurs technologies existent : Les sockets
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Tutorat en bio-informatique
Les sockets.
Les RPC remote procedure call
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Architecture Client/Serveur
Java Remote Method Invocation
Transcription de la présentation:

1 Plan de lenseignement Cours Introduction au réseau via les objets distants (Application à RMI) Ce que cache RMI : programmation socket – mode connecté Mode déconnecté Communication multicast Retour sur RMi : module applications réparties Retour sur les sockets : module Internet et Réseaux Première expérimentation réseau : utilisation de RMI Socket Java TCP Socket Java UDP Socket Java Multicast Finaliser Sockets C

Invocation de Méthode à des Objets distants Exemple : Java Remote Method Invocation ESSI AM Dery Merci à Rémi Vankeisbelck, Michel Riveill etc À travailler pour les TPs Concepts généraux Mise en œuvre Java

3 Points forts de la programmation par Objets Application = collection d objets interagissant Séparation entre interface et implémentation Représentation et types de données Mécanismes dabstraction

4 Interface publique crediter debiter Compte AM montant Objet utilisé Compte AM crediter 1000 Utilisation de lobjet Interface = partie visible de lobjet Implémentation = partie privée inaccessible depuis dautres objets Modifier limplémentation des classes sans altérer lutilisation Interface = contrat entre lobjet et le monde extérieur

5 Classes et héritage Ajout de nouveaux types par création de classe Ajout et surcharge des méthodes

6 Maturation des communications Client Serveur Des programmes (fonctionnant sur des machines différentes) qui communiquent au travers du réseau. Un programme serveur offre des services (publie des fonctionnalités) Un programme Client utilise les fonctionnalités par envoi de requêtes à un programme serveur (qui prend en charge limplémentation des fonctionnalités)

7 Infrastructure Client Serveur CLIENT SERVEUR requêtes Ensemble des requêtes = protocole dapplication du service

8 Client Serveur

9 Appel de Procédure à Distance CLIENT SERVEUR F(1, x) marshalling unmarshalling … 10001… Implémentation de f(int,String) Marshalling : Préparer le format et le contenu de la trame réseau Unmarshalling : Reconstruire linformation échangée à partir de la trame réseau

10 Et pour les objets distants crediter debiter Compte AM montant Objet utilisée sur un serveur Compte AM crediter 1000 Objet utilisateur Sur le client crediter et débiter services proposés par le serveur Un serveur peut abriter plusieurs objets distants et plusieurs types dobjets distant

11 OD et héritage Spécialisation dun serveur : changement de versions

12 Infrastructure Objets Distribués Objet Client Objet Client Serveur Objet Serveur Objet1 Objet2Objet3

13 Invocation de méthodes à distance Mécanisme qui permet à des objets localisés sur des machines distantes de séchanger des messages (invoquer des méthodes)

14 Invocation de méthodes distantes Semble simple en théorie un peu plus complexe en réalité !!!

15 RMI Heureusement, on utilise Java ;-) –Java Remote Method Invocation est la solution à notre problème –RMI permet à des objets Java d invoquer des méthodes sur des objets localisés dans des JVM différentes, et même distantes sur le réseau, et ceci de façon quasi transparente !!!

16 Invocation de méthodes distantes

17 Stubs et encodage des paramètres le code dun objet client invoque une méthode sur un objet distant –Utilisation dun objet substitut dans la JVM du client : le stub (souche) de l objet serveur

18 Stubs et encodage des paramètres

19 Echange Client Serveur Le client appelle une méthode sur un OD Il appelle une méthode du stub Le stub construit un bloc de données avec –un identificateur de lobjet distant à utilise –une description de la méthode à appeler –les paramètres encodés qui doivent être passés Le stub envoie ce bloc de données au serveur... Lorsque un objet de réception reçoit les données Le Squeleton effectue les actions suivantes : –décode les paramètres encodés –situe l objet à appeler –invoque la méthode spécifiée –capture et encode la valeur de retour ou l exception renvoyée par l appel –Puis le retourne au client –………

20 Encodage des paramètres –Encodage dans un bloc d octets afin d avoir une représentation indépendante de la machine –Types primitifs et «basiques» (int/Integer...) Encodés en respectant des règles établies Big Endian pour les entiers... –Objets...

21 Générateur de stubs Les stubs gèrent la communication ainsi que l'encodage des paramètres Processus complexe... Entièrement automatique –Un outil permet de générer les stubs pour les OD

22 Stubs et rmic La commande rmic du jdk rend transparent la gestion du réseau pour le programmeur –une référence sur un ODréférence son stub local syntaxe = un appel local –objetDistant.methode()

23 outil livré avec le JDK permet de générer les stubs > rmic -v1.2 HelloWorldImpl génère un fichier HelloWorldImpl_stub.class rmic doit être passé pour toutes les classes d'implémentation des OD afin d'en générer les stubs L outil RMIC

24 Un exemple : le sempiternel « Hello World » !!!

25 Interfaces et classes prédéfinies

26 L interface HelloWorld import java.rmi.*; interface HelloWorld extends Remote { public String sayHello() throws RemoteException; } Interface = protocole d application

27 Rôle de l interface HelloWorld

28 L exception RemoteException doit être déclarée par toutes les méthodes distantes –Appels de méthodes distants moins fiables que les appels locaux Serveur ou connexion peut être indisponible Panne de réseau... Les exceptions

29 Implémentation de la classe qui gère les méthodes de l interface HelloWorld // Classe d'implémentation du Serveur public class HelloWorldImpl extends UnicastRemoteObject implements HelloWorld { public String sayHello() throws RemoteException { String result = « hello world !!! »; System.out.println(« Méthode sayHello invoquée... » + result); return result; } Du côté Serveur

30 doit implanter l interface HelloWorld doit étendre la classe RemoteServer du paquetage java.rmi RemoteServer est une classe abstraite UnicastRemoteObject est une classe concrète qui gére la communication et les stubs Classe d implémentation

31 Classe d implémentation HelloWorld HelloWorldImpl

32 HelloWorld hello =...; // Nous verrons par la suite comment obtenir // une première référence sur un stub String result = hello.sayHello(); System.out.println(result); Du côté client

33 On sait implanter un serveur d un côté, et appeler ses méthodes de l autre MAIS Comment obtient-on une référence vers un stub dun objet serveur ??? Référence sur un objet

34 –On pourrait appeler une méthode sur un autre objet serveur qui renvoie une référence sur le stub... –Mais comment localiser le premier objet ? un Service de Nommage Localisation des objets du serveur

35 Obtention d'une première référence sur un objet distant : « bootstrap » à laide dun Service de Nommage ou Annuaire Enregistrement des références d'objets dans l'annuaire afin que des programmes distants puissent les récupérer Les Services de Nommage

36 Implémentation d'un service de nommage Fourni en standard avec RMI Permet d'enregistrer des références sur des objets de serveur afin que des clients les récupèrent On associe la référence de l'objet à une clé unique (chaîne de caractères) Le client effectue une recherche par la clé, et le service de nommage lui renvoie la référence distante (le stub) de l'objet enregistré pour cette clé Exemple : Le RMIRegistry

37 –Programme exécutable fourni pour toutes les plates formes –S'exécute sur un port (1099 par défaut) sur la machine serveur –Pour des raisons de sûreté, seuls les objets résidant sur la même machine sont autorisés à lier/délier des références –Un service de nommage est lui-même localisé à l'aide d'une URL Le RMIRegistry

38 du package java.rmi –permet de manipuler le RMIRegistry –supporte des méthodes statiques permettant de Lier des références d'objets serveur –Naming.bind(...) et Naming.rebind(...) Délier des références d'objets serveur –Naming.unbind(...) Lister le contenu du Naming –Naming.list(...) Obtenir une référence vers un objet distant –Naming.lookup(...) La classe Naming

39 L objet serveur HelloWorld (coté serveur bien entendu…) –On a créé l'objet serveur et on a une variable qui le référence HelloWorld hello = new HelloWorldImpl(); –On va enregistrer l'objet dans le RMIRegistry Naming.rebind("HelloWorld",hello); –L'objet est désormais accessible par les clients Enregistrement d une référence

40 sur l'objet serveur HelloWorld –On déclare une variable de type HelloWorld et on effectue une recherche dans l'annuaire HelloWorld hello = (HelloWorld)Naming.lookup("HelloWorld"); –On indique quelle est l'adresse de la machine sur laquelle s'exécute le RMIRegistry ainsi que la clé –La valeur retournée doit être transtypée (castée) vers son type réel Obtention d'une référence coté client

41 –Le Service de Nommage n'a pas pour fonction le référencement de tous les objets de serveur Il devient vite complexe de gérer l'unicité des clés –La règle de bonne utilisation du Naming est de lier des objets qui font office de point d'entrée, et qui permettent de manipuler les autres objets serveurs Remarques

42 Rappel –On veut invoquer la méthode sayHello() d'un objet de serveur distant de type HelloWorld depuis un programme Java client Nous allons devoir coder –L'objet distant –Le serveur –Un client –Et définir la liaison client serveur (les permissions de sécurité et autres emplacements de classes...) Conception, implémentation et exécution de l'exemple

43 1) Définir le protocole dapplication - définir une interface Java pour un OD 2) Implémenter le service - créer et compiler une classe implémentant cette interface 3) Offrir le service - créer et compiler une application serveur RMI 4) Gérer la communication - créer les classes Stub ( rmic ) 5) Lancer le serveur de nommage - démarrer rmiregistry et lancer lapplication serveur RMI 6) Définir un client qui appelle les services offerts par le serveur en se basant sur le protocole dapplication créer, compiler et lancer le code accédant à des OD du serveur Processus de développement

44 –Une interface et une classe d'implémentation –stubs générés automatiquement par rmic –toutes les classes nécessaires à l objet de client doivent être déployées sur la machine cliente et accessibles au chargeur de classes (dans le CLASSPATH) –L'interface HelloWorld (HelloWorld.class) –Le stub HelloWorldImpl_stub généré par rmic pour cet objet Hello World : L'objet distant

45 –instancie un objet de type HelloWorld et attache au service de nommage –puis objet mis en attente des invocations jusqu'à ce que le serveur soit arrêté import java.rmi.*; import java.rmi.server.*; public class HelloWorldServer { public static void main(String[] args) { try { System.out.println("Création de l'objet serveur..."); HelloWorld hello = new HelloWorldImpl(); System.out.println("Référencement dans le RMIRegistry..."); Naming.rebind("rmi://server/HelloWorld",hello); System.out.println("Attente d'invocations - CTRL-C pour stopper"); } catch(Exception e) { e.printStackTrace(); } Hello World : Le serveur

46 –Apres avoir compilé le tout... –Pour démarrer le serveur, il faut tout d'abord lancer le RMIRegistry Attention : La base de registres RMI doit connaître les interfaces et les stubs des objets qu'elle enregistre (CLASSPATH) !!! > rmiregistry & –et ensuite on lance le serveur > java HelloWorldServer Création de l'objet serveur... Référencement dans le RMIRegistry... Attente d'invocations - CTRL-C pour stopper Serveur (suite)

47 obtenir une référence sur l'objet de serveur HelloWorld, invoquer la méthode sayHello(), puis afficher le résultat de l'invocation sur la sortie standard import java.rmi.*; public class HelloWorldClient { public static void main(String[] args) { try { System.out.println("Recherche de l'objet serveur..."); HelloWorld hello = (HelloWorld)Naming.lookup("rmi://server/HelloWorld"); System.out.println("Invocation de la méthode sayHello..."); String result = hello.sayHello(); System.out.println("Affichage du résultat :"); System.out.println(result); System.exit(0); } catch(Exception e) { e.printStackTrace(); } Hello World : client

48 –Il suffit ensuite de lancer le programme > java HelloWorldClient Recherche de l'objet serveur... Invocation de la méthode sayHello... Affichage du résultat : hello world !!! –Au niveau du serveur, le message... Méthode sayHello invoquée... hello world !!! –...s'affichera dans la console Le client (suite)

49 Passage de paramètres On sera souvent amenés à passer des paramètres aux méthodes distantes... Les méthodes distantes peuvent retourner une valeur ou lever une exception... On a deux types de paramètres –Les objets locaux au client –Les objets distants au client

50 Passage de paramètres: ATTENTION –Certains objets sont copiés (les objets locaux), d'autres non (les objets distants) –Les objets distants, non copiés, résident sur le serveur –Les objets locaux passés en paramètre doivent être sérialisables afin d'être copiés, et ils doivent être indépendants de la plate-forme –Les objets qui ne sont pas sérialisables lèveront des exceptions –Attention aux objets sérialisables qui utilisent des ressources locales !!!

51 Que doit connaître le client ? Lorsquun objet serveur est passé à un programme, soit comme paramètre soit comme valeur de retour, ce programme doit être capable de travailler avec le stub associé Le programme client doit connaître la classe du stub

52 Que doit connaître le client ? les classes des paramètres, des valeurs de retour et des exceptions doivent aussi être connues... –Une méthode distante est déclarée avec un type de valeur de retour... –...mais il se peut que l objet réellement renvoyé soit une sous-classe du type déclaré

53 Que doit connaître le client ? Le client doit disposer des classes de stub, classes des objets retournés… copier les classes sur le système de fichiers local du client (CLASSPATH)......cependant, si le serveur est mis à jour et que de nouvelles classes apparaissent, il devient vite pénible de mettre à jour le client C est pourquoi les clients RMI peuvent charger automatiquement des classes de stub depuis un autre emplacement –Il s agit du même type de mécanisme pour les applets qui fonctionnent dans un navigateur

54 Séparation des classes –Serveur (fichiers nécessaires a l'exécution du serveur) HelloWorldServer.class HelloWorldImpl.class HelloWorld.class HelloWorldImpl_Stub.class –Download (fichiers de classes à charger dans le programme client) HelloWorldImpl_Stub.class –Client (fichiers nécessaires au démarrage du client) HelloWorld.class HelloWorldClient.class Hello World : chargement dynamique

55 Les points à approfondir Le fonctionnement des applications réparties –Chargement dynamique : mise en œuvre –Passage de paramètres –Notion dannuaire –Autres types de communications … Comment cela fonctionne au niveau du réseau.

56 Comment cela fonctionne au niveau du réseau Rôle du stub –Identification de la machine qui abrite le serveur par le client –Identification du serveur sur la machine –Canal de communication entre le serveur et le client –Construction de la trame réseau –Echange du protocole dapplication