42
CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 1 Réseaux et systèmes répartis C3 Distribué 4 : Java client/serveur avec RMI 12 mars 2005 Réseaux et systèmes répartis C3 2 Plan du jour Rappels Introduction RPC RMI : Remote Method invocation

Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

Embed Size (px)

Citation preview

Page 1: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 1

Réseaux et systèmes répartis C3

Distribué 4 : Java client/serveur avec RMI

12 mars 2005

Réseaux et systèmes répartis C3

2

Plan du jour

RappelsIntroduction RPCRMI : Remote Method invocation

Page 2: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 2

12 mars 2005

Réseaux et systèmes répartis C3

3

Rappels et introduction

Nous avons vu le principe de fonctionnement d’un serveur Web– Utilisation du protocole HTTP pour demander un

document– Récupération et analyse du document pour retrouver

de l’information complémentaireLa récupération d’un document (statique) peut être assimilée à un appel d’une fonction distante effectuant une lecture de fichier

12 mars 2005

Réseaux et systèmes répartis C3

4

Récupération d'un fichier statique sur un serveur web

DNS : Domain Name ServerFait le lien entre le nom du serveur

et son adresse IPserveur.net => 158.167.34.11

client.net serveur.netRecherche du documenthttp://serveur.net/repertoire/index.html

http://serveur.net/repertoire/index.html

Page 3: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 3

12 mars 2005

Réseaux et systèmes répartis C3

5

Récupération d'un fichier statique sur un serveur web (suite)

client.netserveur.net

http://serveur.net/repertoire/index.html

Et ensuite:

12 mars 2005

Réseaux et systèmes répartis C3

6

Récupération d'un fichier statique sur un serveur web (fin)

Le processus de récupération se traduit par deux appels distants– Appel au DNS pour récupérer l'adresse IP du serveur

à partir de son nom (si le client ne la connaît pas déjà, i.e. il ne l'a pas stockée dans un cache)

– Appel au serveur web pour obtenir le contenu du document à partir de sa place dans le système de gestion de fichiers (généralement hiérarchique) du serveur web. Le serveur web exécute une fonction simple : une lecture de fichier à partir du nom (la place) de celui-ci

Page 4: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 4

12 mars 2005

Réseaux et systèmes répartis C3

7

Rappels et introduction (2)

Il est possible de demander des documents qui sont en fait produits dynamiquement par un serveur– Scripts et gateways– De véritables fonctions sont alors exécutées

Pages dynamiques avec Java– CGI et Java à la place de PERL (au début)– Servlets (même sur Microsoft IIS, Internet

Information Server)– JSP (Java Server Pages)

12 mars 2005

Réseaux et systèmes répartis C3

8

Rappels et introduction (3)

Le client et le serveur sont cependant spécifiques pour les documents hypertextes– La présentation graphique de certaines informations

n'est pas facileIl est possible d’envisager la possibilité où le client et le serveur seraient tous les deux aptes à comprendre Java pour effectuer des traitements– Java devient la "Lingua Franca" de l’échange

Page 5: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 5

12 mars 2005

Réseaux et systèmes répartis C3

9

Rappels et introduction (4)

Cette situation imposerait cependant que les deux parties comprennent Java mais également les objets et méthodes partagés par les deux parties– Dans le cas de le navigation Internet, le client et le

serveur comprennent HTML et HTTP– Pour Java, un même objet devrait avoir la même

définition et le même comportement aux deux extrémités

Il faudrait donc distribuer des objets Java– Et le plus simple est de créer des composants

12 mars 2005

Réseaux et systèmes répartis C3

10

Rappels et introduction (5)

Les premiers ordinateurs ("centraux", "host") donnaient à la fois accès aux données et aux traitementsLes postes client n'étaient que des terminaux avec écrans et claviers, sans puissance de calcul (pas de processeur)– Ces terminaux n'affichaient que des caractères

Le host devait être puissant, très puissant– Invention du moniteur transactionnel pour garantir la

continuité d'un certain niveau de service

Page 6: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 6

12 mars 2005

Réseaux et systèmes répartis C3

11

Rappels et introduction (6)

Informatique Mainframe

12 mars 2005

Réseaux et systèmes répartis C3

12

Rappels et introduction (7)

Avec l'arrivée de PC est apparu un poste client bon marché avec une puissance de calcul et des capacités graphiques (client lourd)Les logiciels ont été développés pour être distribués sur ces machines– Le même logiciel doit être partout pour respecter

uniformément les règles de gestion ou détenir la dernière version du schéma de la base de données : problème de distribution correcte du logiciel

Pour garantir la cohérence, les données continuent à être centralisées !

Page 7: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 7

12 mars 2005

Réseaux et systèmes répartis C3

13

Rappels et introduction (8)

InformatiqueClient/Serveur

12 mars 2005

Réseaux et systèmes répartis C3

14

Rappels et introduction (9)

Pour résoudre le problème de distribution du logiciel, on partitionne l'application du poste client en deux :– La partie graphique de l'application reste sur le client– La partie règles de gestion et accès aux données de

l'application est rapatriée sur le serveur– Il faut cependant que la partie graphique possède un

lien vers les règles de gestionRéduction du besoin de distribution des applications sur le poste client lourd

Page 8: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 8

12 mars 2005

Réseaux et systèmes répartis C3

15

Rappels et introduction (10)

InformatiqueDistribuée

12 mars 2005

Réseaux et systèmes répartis C3

16

Rappels et introduction (11)

Ce dernier type d'architecture correspond àl'architecture distribuée, faisant suite aux modèles "centralisé" et "client/serveur"

– Dans l'architecture distribuée, il est encore question de clients et de serveurs

Il faut définir une couche application (modèle ISO, couche 7) qui s'occupe de tous les aspects élémentaires de l'informatique distribuéeIl faut définir une couche présentation (modèle ISO, couche 6) qui garantit l'uniformité du codage entre les différentes plates-formes utilisées dans l'architecture

Page 9: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 9

12 mars 2005

Réseaux et systèmes répartis C3

17

Rappels et introduction (12)

Les sockets, c’est bien :– Efficace, bien compris – Indépendant de la plate-forme et du langage– Facile à modifier pour rajouter de la sécurité, de la

compression, etc.Mais...– Pas vraiment abstrait– Les "streams" n’ont rien d’orienté objet– Il faut définir et implémenter tout le protocole

applicatif qui permettra de réaliser les fonctions distribuées

12 mars 2005

Réseaux et systèmes répartis C3

18

Rappels et introduction (13)

Première grande utilisation des sockets pour standardiser la programmation distribuée : DCE, Distributed Computing Environment– Très difficile à mettre en œuvre car nécessite de tout

gérer « à la main »– Encore très utilisé aujourd’hui : couche de base de

Microsoft DCOM !

Début du RPC : Remote Procedure Call

Page 10: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 10

12 mars 2005

Réseaux et systèmes répartis C3

19

Rappels et introduction (14)

Comme dans le cas de HTML et de HTTP :– Le client doit retrouver le serveur par son adresse

binaire ou son adresse texte– Le serveur doit s'assurer de l'existence de la

ressource recherchée (chemin jusqu'à un fichier dans le système de gestion de fichiers)

– Le serveur doit s'assurer que le client a le droit d'accéder à la ressource

– Le serveur doit garantir la bonne prise en compte des paramètres passés (GET ou POST avec HTTP)

12 mars 2005

Réseaux et systèmes répartis C3

20

RMI :Remote Method Invocation

Page 11: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 11

12 mars 2005

Réseaux et systèmes répartis C3

21

L’idée de base

Si le code se trouvant sur le client et le serveur est en Java, les données envoyées sur le fil devraient également être en Java pour économiser du temps de filtrage (ISO couche 6)Il devient possible d’envoyer des messages (au sens orienté objet) à des objets Java quelque soit leur localisationAttention : plus le fil sera long (distance à parcourir avec de plus en plus de relais) et fin (bande passante) et plus cela prendra du temps, quoique l’on fasse (pour RMI comme pour les autres protocoles…)

12 mars 2005

Réseaux et systèmes répartis C3

22

RMI ?

Remote Method InvocationUne manière d’envoyer des messages à des objets Java sur le réseau– Utilise les sockets (...)– Facile à utiliser lorsque l’on connaît Java

RMI est un véritable framework pour construire des applications distribuéesInfrastructure bien faite– Sun avait déjà une bonne expérience avec DCE/RPC

Page 12: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 12

12 mars 2005

Réseaux et systèmes répartis C3

23

Place de RMI dans Java

java.net

RMI

Jini

JavaSpaces

Servlets

EJB JSP

12 mars 2005

Réseaux et systèmes répartis C3

24

L'apparence d'un appel distribué

traitementsdonnées

affichages*

* : Les affichages sont aussi des traitements.Mais il ne s’agit pas de règles de gestion

Page 13: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 13

12 mars 2005

Réseaux et systèmes répartis C3

25

La réalité d'un appel distribué

traitements données

affichages

distribution

12 mars 2005

Réseaux et systèmes répartis C3

26

Mise en place de la distribution

Entre les objets "graphiques", qui appellent un objet se trouvant à distance, et l’objet lui-même, il faut mettre en place une batterie de mécanismes qui vont établir le lienLes mécanismes inclus dans RMI sont très proches de ceux disponibles dans les versions Sun de C++ intégrant le RPC– Ne me dites pas que vous pensiez que l’on inventait

des choses en informatique !!!

Page 14: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 14

12 mars 2005

Réseaux et systèmes répartis C3

27

Vocabulaire...

Les stubs et les skeletons de RMI suivent la nomenclature définie pour CORBA (que nous verrons au prochain cours)Cette nomenclature diffère de celle de Microsoft

Bus applicatif

stubproxy

client

skeletonstub

serveur

MicrosoftAutres

12 mars 2005

Réseaux et systèmes répartis C3

28

Déroulement d’un appel

client stub du client skeleton du serveur serveur

fooforward de l’appel

foo

Le client croit parler directementà l’objet

Tous les arguments, ainsique le nom de la méthode,sont empaquetés et envoyés sur le réseau

Le skeleton dépaquette tout et appelle la méthode présente sur le serveur

Page 15: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 15

12 mars 2005

Réseaux et systèmes répartis C3

29

Avant l’appel...

Pour effectuer l’appel à distance présentéavant, il faut cependant disposer d’un mécanisme d’appel valable du côté du client– Il faut donc le mettre en place

En appelant un document avec HTTP, il faut disposer d’un chemin correct (un nom de fichier complet) vers un fichier sur le serveurAvec RMI, il faut disposer d’un nom d’objet correct sur le serveur...

12 mars 2005

Réseaux et systèmes répartis C3

30

Avant l’appel... (suite)

Le fichier que l’on cherche à obtenir avec HTTP possède un nom défini dans le système de gestion de fichiers du serveur– Le système de gestion de fichiers fait cette gestion

de noms, permettant le déplacement dans l’arborescence

Pour RMI, il faut également disposer d’un mécanisme de nommage pour les objets– Il faut donc disposer d’un serveur de nom spécialisé

Page 16: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 16

12 mars 2005

Réseaux et systèmes répartis C3

31

Généralité sur le nommage

Un objet c’est :– Un Identifiant +– Un état +– Un comportement

Pour les applications non réparties, le nommage est géré par le langage (référence) ou le système d’exploitation (adressage)Pour une application répartie, le nommage peut être explicite ou dynamiqueExemples de systèmes de nommage : URL, DNS, X500, LDAP ...

12 mars 2005

Réseaux et systèmes répartis C3

32

Séquence de développement

Définition des objets sérialisables– Ceux qui pourront être envoyés sur le fil

Définition des interfacesChoix de l’identité de l’objetImplémentation du serveurImplémentation du clientGénération des stubs et skeletonsTest et débogage...

Page 17: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 17

12 mars 2005

Réseaux et systèmes répartis C3

33

Séquence de développement : précision des classes Java

Déclarer les objets pouvant être appelés de manière distante : – Sous-classe de java.rmi.RemoteObject

Déclarer les méthodes pouvant être appelées de manière distante : – déclaration d’une interface pour les appels distant.

Toutes les méthodes distantes peuvent générer des exceptions– java.rmi.RemoteException

12 mars 2005

Réseaux et systèmes répartis C3

34

Une vue du Java en UML

Remote

RemoteObject

UnicastRemoteObject Dispatcher SrvObj

DispatcherImpl SrvObjImpl

Serializable

RemoteServer

Param2Param1 Param3

Page 18: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 18

12 mars 2005

Réseaux et systèmes répartis C3

35

Serializable, Primitive, Remote

Les seuls types de valeurs exploitables dans les interfaces sont :– Les objets Serializable (ils implémentent l’interface)– Les instances d’une classe qui implémente l’interface

Remote– Les valeurs de type primitif (byte, int, ...)

Il est toujours possible d’avoir des objets non serializable et non remote dans une application mais il ne sera pas possible de les utiliser dans les parties du code en relation avec RMI

12 mars 2005

Réseaux et systèmes répartis C3

36

Objets sérialisés

Ils sont utilisés comme paramètres lors des appels de méthodeIls sont envoyés par valeur (donc copie...)– Les mécanismes de RMI utilisent une sous-classe de

ObjectOutputStream pour sérialiser une instance et l’envoyer sur le fil

– La JVM qui réceptionne l’appel crée un objet dupliqué (un clone)

Une ObjectOutputStream est utilisée pour chaque appel de méthode

Page 19: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 19

12 mars 2005

Réseaux et systèmes répartis C3

37

Objets Remote

L’interface Remote est un marqueurLes objets qui implémentent Remote sont “passés par référence”Typiquement :– On l’étend avec une autre

interface déclarant lesméthodes disponibles surle serveur

– On l’implémente alors en créant une sous-classe de UnicastRemoteObject

Remote

RemoteMethodDeclarations

LocalImpl

UnicastRemoteObject

12 mars 2005

Réseaux et systèmes répartis C3

38

Passage par référence ?

Comment passer un pointeur vers un objet dans un autre espace d’exécution ?– Cela ne se fait pas... Les objets Remote ont des

stubs et des skeletonsRMI sérialise les objets Remote– RMI utilise une sous-classe de ObjectOutputStream

et surcharge la méthode replaceObject pour “sérialiser” le stub et l’envoyer (les valeurs de l’appel dans la signature du stub sont sérialisées...)

Page 20: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 20

12 mars 2005

Réseaux et systèmes répartis C3

39

Identité des objets

Que se passe-t-il dans l’objet serveur si plusieurs appels à une même méthode sont effectués en même temps ?

– Plusieurs instances des paramètres sont créésIls pourraient même contenir les mêmes valeurs

– Ce sont cependant des objets différentsIls doivent pouvoir être distingués

Une bonne manière de faire ceci est de surcharger les méthodes equals et hashcode dans les objets paramètres

– On donne la manière de créer une carte d’identité

12 mars 2005

Réseaux et systèmes répartis C3

40

Deux types de serveurs

Serveurs nommés, accessibles “universellement”– Implémentent Remote et étendent

UnicastRemoteObject– Définis dans un registre quelque part

La définition sera faite au démarrage de l’application, par exemple

Les serveurs qui doivent être signalés au client– Implémentent Remote et étendent

UnicastRemoteObject– Ne sont pas définis dans un registre

Page 21: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 21

12 mars 2005

Réseaux et systèmes répartis C3

41

Nommage

Interface simple vers un registre Implémenté au travers de cinq méthodes statiques :

public static String[] list( String name ) public static Remote lookup( String name ) public static void bind( String name, Remote obj ) public static void rebind( String name, Remote obj ) public static void unbind( String name )

12 mars 2005

Réseaux et systèmes répartis C3

42

Qu’est-ce qu’un nom ?

Tous les appels au service de nommage utilisent le même format : //host:port/name

– host par défaut : localhost– port par défaut : 1099– name doit normalement être humainement compréhensible

“Trouve un registre RMI au [port] de la machine [host]. Enregistre moi en tant que [name].”

– Un bind : une déclaration (définition) de référence d’objetOU “Trouve un registre RMI au [port] de la machine [host]. Trouve moi l’objet connu sous le nom [name].”

– Un lookup : la recherche d’une référence d’un objet d’un certain nom

Page 22: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 22

12 mars 2005

Réseaux et systèmes répartis C3

43

Enregistrement d’un objet

serveur SrvObj registry SrvObjImplNaming

lookup( SrvObj )

create

ajout d’une référence

12 mars 2005

Réseaux et systèmes répartis C3

44

Appel de méthode

client Naming SrvObj SrvObjImpl

lookup

appel

appel effectif

retour

Page 23: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 23

12 mars 2005

Réseaux et systèmes répartis C3

45

Génération des stubs et skeletons

RMIC : RMI Compiler– Génère automatiquement les stubs et les skeletons à

partir de fichiers .class des implémentations serveur

rmic -d répertoiredesortie chemin.complet.vers.classe

12 mars 2005

Réseaux et systèmes répartis C3

46

Exécution du programme

Démarrage du registre– rmiregistry

Démarrage du dispatcher– java -Djava.security.policy=java.policy Dispatcher

Démarrage du serveur– java -Djava.security.policy=java.policy

ProgrammeServeurExécution du client– java -Djava.security.policy=java.policy

ProgrammeClient

Page 24: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 24

12 mars 2005

Réseaux et systèmes répartis C3

47

Exemple : Copier un fichier

Copier un fichier d ’une machine à une autre– Lire un fichier sur la machine expéditrice et le mettre

dans un tampon en mémoire– Appeler une méthode d’un objet receveur distant en

passant le tampon en paramètre, – L’objet receveur écrit ce paramètre dans un fichier

sur son système de gestion de fichiers...Dans ce cas, c’est le client qui fournit le fichier– Equivalent d’un file upload HTTP

12 mars 2005

Réseaux et systèmes répartis C3

48

Diagramme de classes

RemoteReceiver

RemoteReceiver()setDirectory(directory : String) : voidreceiveFile(packet : FilePacket) : voidmain(args[] : String) : void

FilePacket

data[] : byte

FilePacket(name : String)getName() : StringreadIn() : voidwriteTo(out : OutputStream) : void

FileSender

FileSender(hostname : String)actionPerformed(event : ActionEvent) : voidmain(args[] : String) : void

FilePacket : une variable intermédiaireFileSender : l’émetteurRemoteReceiver : le receveur...

Page 25: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 25

12 mars 2005

Réseaux et systèmes répartis C3

49

Diagramme de séquence

1FileSender : FileSender

1File : FilePacket

1RemoteRec : RemoteReceiver

FilePacket(String)

readIn( )

receiveFile(FilePacket)

writeTo(OutputStream)

Sur le ClientSur le Serveur...

12 mars 2005

Réseaux et systèmes répartis C3

50

FilePacketdata[] : byte

FilePacket(name : String)getName() : StringreadIn() : voidwriteTo(out : OutputStream) : void

FileSender

FileSender(hostname : String)actionPerformed(event : ActionEvent) : voidmain(args[] : String) : void

FileReceiver

setDirectory(directory : String) : voidreceiveFile(packet : FilePacket) : void

<<Interface>>

RemoteReceiver

RemoteReceiver()setDirectory(directory : String) : voidreceiveFile(packet : FilePacket) : voidmain(args[] : String) : void

UnicastRemoteObject

UnicastRemoteObject()readObject(in : java.io.ObjectInputStream) : voidclone() : ObjectexportObject(obj : Remote) : RemoteStub

(from server)

RemoteServer

RemoteServer()RemoteServer(ref : RemoteRef)getClientHost() : StringsetLog(out : java.io.OutputStream) : voidgetLog() : java.io.PrintStream

(from server)

RemoteObject

RemoteObject()RemoteObject(newref : RemoteRef)hashCode() : intequals(obj : Object) : booleantoString() : StringwriteObject(out : java.io.ObjectOutputStream) : voidreadObject(in : java.io.ObjectInputStream) : void

(from server)

Diagramme de classes remis en contexte

Page 26: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 26

12 mars 2005

Réseaux et systèmes répartis C3

51

Problèmes...

1RR : RemoteReceiver

1FS : FileSender 1FP : FilePacket

FilePacket(String)

readIn( )

receiveFile(FilePacket)

writeTo(OutputStream)

Comment avoir une ref sur 1RR ?? Impossible de manière classique...

12 mars 2005

Réseaux et systèmes répartis C3

52

Accéder à un objet distant ...

Le créateur et détenteur de l’objet (serveur) doit d’abord externaliser (au moins) un objet en lui donnant un nom : – static void Naming.rebind( String, Remote )

L ’utilisateur (client) doit récupérer un référence en utilisant ce nom : – static Object Naming.lookup( String )

Page 27: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 27

12 mars 2005

Réseaux et systèmes répartis C3

53

Nommage...

Qu’est qu’un nom ? En RMI, une URL …– rmi://java.sun.com:1099/root/foo

RMI : le protocole de haut niveau– En dessous : JRMP, Java Remote Method Protocol

java.sun.com:1099 : le nom ou le remoteReceiver tourne…– 1099 : le port par défaut de la RMI registry

root/foo : une chaîne de caractères pour déterminer l ’objet...

12 mars 2005

Réseaux et systèmes répartis C3

54

: Naming 1FP : FilePacket : FileSender: srvr

1RR : RemoteReceiver

RemoteReceiver( )

rebind("rmi://localhost:1099/receiver", 1RR)

FilePacket("c:\fic.txt")

readIn( )

lookup("rmi://localhost:1099/receiver")

receiveFile(1FP)

JVM serveur RMI Registry JVM client

Action...

Page 28: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 28

12 mars 2005

Réseaux et systèmes répartis C3

55

Remarque

: Naming 1FP : FilePacket : FileSender: srvr

1RR : RemoteReceiver

RemoteReceiver( )

rebind("rmi://localhost:1099/receiver", 1RR)

FilePacket("c:\fic.txt")

readIn( )

lookup("rmi://localhost:1099/receiver")

receiveFile(1FP)

JVM serveur RMI Registry JVM client

ATTENTION ! Passage par copie !

12 mars 2005

Réseaux et systèmes répartis C3

56

Objet Remote et non Remote...

Paramètre et valeur de retour des méthodes :Sous-classe de RemoteObject -> passage par référenceAutrement -> passage par copie !

Page 29: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 29

12 mars 2005

Réseaux et systèmes répartis C3

57

1FP' : FilePacket 1FP : FilePacket : FileSender: srvr

1RR : RemoteReceiver

: Naming

RemoteReceiver( )

rebind("rmi://localhost:1099/receiver", 1RR)

FilePacket("c:\fic.txt")

readIn( )

lookup("rmi://localhost:1099/receiver")

receiveFile(1FP)

writeTo(OutputStream)

Objet crééimplicitement !

Si je change qq chose dans 1FP', pas de chagmenent sur1FP ! passage par copie !

12 mars 2005

Réseaux et systèmes répartis C3

58

Nommage : RMIRegistry…

Attention ! Un processus à part est chargé de maintenir la table gérant l’association entre un nom et une RemoteReference– Comme pour HTTP ou un client a besoin du DNS

(Domain Name Serveur) pour retrouver l’adresse binaire du serbeur dont il connaissait l’adresse texte

C ’est le RMIRegistry ! – 1: on lance le RMIRegistry– 2 : on lance le RemoteReceiver– 3 : on lance le FileSender

Page 30: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 30

12 mars 2005

Réseaux et systèmes répartis C3

59

Attention aux problèmes de typage

Attention : ici 1FP est d’une certaine manière présent sur deux JVM ! Il faut être sûr que les deux JVM ont bien le même FilePacket.class !Vérifié par Java à l ’exécution avec des VID (version ID)Problème de déploiement– Source d’erreur classique pour toutes les

applications distribuées

12 mars 2005

Réseaux et systèmes répartis C3

60

Class loader ...

Les fichier .class utilisés par le client peuvent être téléchargés à partir du serveur si elles n’existent pas localement sur le client par le RMIClassLoader…– Utilisé pour les paramètres et les valeurs de retour

de méthodes distantes.– Aucune raison pour que cela ne marche pas : tout

est en Java !Facilite le déploiement, mais crée des problèmes de sécurité...

Page 31: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 31

12 mars 2005

Réseaux et systèmes répartis C3

61

RMI et Security Manager

Si des classes doivent être téléchargées àtravers le réseau, elles doivent obéir aux politiques de sécurité– Par exemple : pas d’actions sensibles (accès

systèmes) ou de téléchargement à partir de sources de confiance

Une politique pré-définie existe en RMI : le RMISecurityManager...– Sécurité de base (pas très poussée)– Il est possible de faire le sien !

12 mars 2005

Réseaux et systèmes répartis C3

62

1FP : FilePacket : FileSender : System: System

: srvr

1RR : RemoteReceiver

: Naming

FilePacket("c:\fic.txt")

readIn( )

RemoteReceiver( )

receiveFile(1FP)

rebind("rmi://localhost:1099/receiver", 1RR)

lookup("rmi://localhost:1099/receiver")

CRSM : RMISecurityManager

RSM : RMISecurityManager

RMISecurityManager( )

setSecurityManager(RSM)

RMISecurityManager( )

setSecurityManager(CRSM)

RMI et Security Manager (suite)

Page 32: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 32

12 mars 2005

Réseaux et systèmes répartis C3

63

RMI et Security Manager (suite)

Si aucun Security Manager n ’est installé, tous les chargement de fichiers .class doivent se faire à partir du CLASSPATH local.– La seule source de confiance qui reste...

Mais il s’agit d’une mauvaise solution pour le déploiement d ’applications distribuées– problème fondamental…

12 mars 2005

Réseaux et systèmes répartis C3

64

Politique de sécurité : policies

Un fichier de policies doit être fourni :grant signedBy "signer_names", codeBase "URL" { permission permission_class_name "target_name",

"action", signedBy "signer_names"; .... permission permission_class_name "target_name",

"action", signedBy "signer_names"; }; UTILISATION : java -Djava.security.policy=policy …

Page 33: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 33

12 mars 2005

Réseaux et systèmes répartis C3

65

Policies…

grant signedBy "Duke" { permission java.io.FilePermission "/tmp/*", "read,write";

};

grant {

permission java.security.AllPermission;

};

grant signedBy "sysadmin", codeBase "file:/home/sysadmin/*" {

permission java.security.SecurityPermission "Security.insertProvider.*";

permission java.security.SecurityPermission "Security.removeProvider.*";

permission java.security.SecurityPermission "Security.setProperty.*"; };

12 mars 2005

Réseaux et systèmes répartis C3

66

Class Loader et Déploiement

java -Djava.rmi.server.codebase=http://host/rmiclasses/LoadClient

import java.rmi.RMISecurityManager;import java.rmi.server.RMIClassLoader;public class LoadClient {

public static void main() {System.setSecurityManager( new RMISecurityManager() );try {

Class cl = RMIClassLoader.loadClass( "myclient" );Runnable client = (Runnable) cl.newInstance();client.run();

} catch ( Exception e ) {System.out.println( "Exception: " + e.getMessage() );e.printStackTrace();

}}

}

Page 34: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 34

12 mars 2005

Réseaux et systèmes répartis C3

67

Stub et Skeleton

Comment ça marche en fait ?Pour chaque objet remote, il est nécessaire de disposer de deux objets : l ’objet stub et l ’objet skeleton.Le stub représente l ’objet remote sur le client, une sorte de fantôme de l ’objet remote.Le skeleton est là pour réceptionner les appels de méthodes distants du client et les propager àl ’implémentation de l ’objet remote sur le serveur.

12 mars 2005

Réseaux et systèmes répartis C3

68

Stub et Skeleton

Transport Layer

Remote Reference Layer

Stub Skeleton

Client Serveur

Lien vers lesystème denommage

Page 35: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 35

12 mars 2005

Réseaux et systèmes répartis C3

69

Stub et skeleton

Bonne nouvelle : ils sont générés automatiquementMauvaise nouvelle : il faut quand même appeler un compilateurAppel de rmic sur une classe sous-classes de remoteObject– RemoteReceiver dans notre cas

Génère RemoteReceiver_Skel.classRemoteReceiver_Stub.class

12 mars 2005

Réseaux et systèmes répartis C3

70

Le code du serveur

public class RemoteReceiver extends UnicastRemoteObject implements FileReceiver {

private String directory;public RemoteReceiver() throws RemoteException {

super();}public void receiveFile( FilePacket packet )

throws RemoteException {try{

packet.writeTo( new FileOutputStream( packet.getName() + ".snt" ) );

}catch( IOException e ){e.printStackTrace();

}}

...

Page 36: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 36

12 mars 2005

Réseaux et systèmes répartis C3

71

Le code du serveur (suite)

public static void main( String args[] ) {String usage =

"Usage: java rmi.RemoteReceiver <directory> <hostname>";try {

System.setSecurityManager( new RMISecurityManager() );RemoteReceiver remote = new RemoteReceiver();Naming.rebind( "//" + args[ 1 ] + "/receiver", remote );System.out.println( "Object is bound" );

} catch( Exception e ) {e.printStackTrace();System.out.println( usage );

}}

}

12 mars 2005

Réseaux et systèmes répartis C3

72

L’interface de définition du Remote...

public interface FileReceiverextends Remote

{public void receiveFile( FilePacket packet )

throws RemoteException;}

Page 37: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 37

12 mars 2005

Réseaux et systèmes répartis C3

73

Le code du client

public class FileSender implements ActionListener {private Frame frame;FileReceiver receiver;public FileSender( String hostname ) throws Exception {

receiver = (FileReceiver) Naming.lookup( "//" + hostname + "/receiver" );

frame = new Frame( "File Sender" );frame.setBounds( 100, 100, 80, 80 );Button b = new Button( "Send File" );b.addActionListener( this );frame.add( "Center", b );frame.setVisible( true );

}...

12 mars 2005

Réseaux et systèmes répartis C3

74

Le code du client (suite)

public void actionPerformed( ActionEvent event ){try{

FileDialog dialog = new FileDialog( frame, "Upload a file", FileDialog.LOAD );

dialog.setVisible( true );String filename = dialog.getDirectory() + dialog.getFile();FilePacket packet = new FilePacket( filename );packet.readIn();receiver.receiveFile( packet );

} catch( Exception e ) {e.printStackTrace();

}}...

Page 38: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 38

12 mars 2005

Réseaux et systèmes répartis C3

75

Le code du client (suite)

public static void main( String args[] )throws Exception

{String usage = "Usage: java rmi.FileSender <remotehost>";try{

System.setSecurityManager( new RMISecurityManager() );FileSender sender = new FileSender( args[ 0 ] );

} catch( Exception e ) {e.printStackTrace();System.out.println( usage );

}}

}

12 mars 2005

Réseaux et systèmes répartis C3

76

L’objet intermédiaire

public class FilePacket implements Serializable {private String name;private byte[] data;public FilePacket( String name ) {

this.name = name; }public String getName() {

return name; }public void readIn() {

try {File file = new File( name );data = new byte[ (int) (file.length()) ];(new FileInputStream( file )).read( data );

} catch( Exception e ) {e.printStackTrace();}

}

Page 39: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 39

12 mars 2005

Réseaux et systèmes répartis C3

77

L’objet intermédiaire (suite)

public void writeTo( OutputStream out ){

try{

out.write( data );}catch( Exception e ){

e.printStackTrace();}

}}

12 mars 2005

Réseaux et systèmes répartis C3

78

Déploiement de FileSender...

javac *.javarmic rmi.RemoteReceivercopier les fichiers .class vers le client (à moins de bootstrapper ou de faire une applet)démarrer rmiregistry sur le serveurdémarrer le serveur : java RemoteReceiverdémarrer le client (normalement sur une autre machine) java FileSender

Page 40: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 40

12 mars 2005

Réseaux et systèmes répartis C3

79

Distributed Garbage Collector

Comment libérer les objets référencés dans le serveur par des remote-références ?Problème : – Le client ne les utilise plus– Le client se crashe (pour une longue période)– Le client se crashe et réapparaît (arghhhh)

12 mars 2005

Réseaux et systèmes répartis C3

80

Distributed Garbage Collector

Le serveur maintient une liste de références remoteCette référence remote est prêtée par le serveur au client pour un temps prédéfini – 10 minutes par défaut

Le client peut renouveler sa période de prêt de référence en appelant la méthode dirty() sur le serveur

Page 41: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 41

12 mars 2005

Réseaux et systèmes répartis C3

81

RMI et appels concurrents...

Attention : a priori un objet remote peut-être accédé par plusieurs client en même temps !Dans ce cas, la JVM du serveur démarre un thread par client (distant)– Est-ce que cela vous rappelle quelque chose ?– Les servlets peut-être ?

Attention aux synchronized– Comme pour le Single Thread Model des servlets

12 mars 2005

Réseaux et systèmes répartis C3

82

Conclusion

RMI est une extension distribué du langage Java. Ça a l’avantage d’être simple et de préserver les qualités intrinsèques du langage (type safety, Garbage Collection, threads)Problèmes :– Ça marche de Java à Java (pas d ’interopérabilité

avec des applications dans d’autres langages)À moins de réécrire tout le code RMI en C++...

– C’est peu performant et cela supporte assez mal pas le passage à l’échelle (i.e. un grand nombre de clients)

Mais certains en ont fait de grandes choses avec J2EE

Page 42: Réseaux et systèmes répartis C3camos.buniet.free.fr/LB/Distribue4.pdf · CAMOS CNAM 12 mars 2005 Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis

CAMOS CNAM 12 mars 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 42

12 mars 2005

Réseaux et systèmes répartis C3

83

Questions / Remarques