Systèmes et Applications Répartis

Programming, Java RMI, Distributed Systems · course

Browse all programmation documents

Syst mes et Applications R partis

Java RMI

ENSI 2012/2013

Contenu de la pr sentation

q Introduction (Client-Serveur)

c Int r t des objets pour la construction dapplications r parties

c client-serveur objet

q Architecture de Java RMI

c Sch ma global, r le des talons

c Architecture, r le des couches RRL et transport

q Mode op ratoire

c Exportation de lobjet

c Service de nommage

c Codage : interface, serveur, client

c Compilation et activation

q Passage des param tres

c objet local, objet distant

q Appel en retour

q Chargement dynamique

q Activation dobjets distants

q Garbage collector

q Conclusion

2

Int r t des objets pour la construction dapplications

r parties

q Encapsulation

c Linterface (m thodes + attributs) est la seule voie dacc s l tat

interne, non directement accessible

q Classes et instances

c M canismes de g n ration dexemplaires conformes un m me

mod le

q H ritage

c M canisme de sp cialisation : facilite r cup ration et r utilisation de

lexistant

q Polymorphisme

c Mises en Suvre diverses des fonctions dune interface

c Remplacement dun objet par un autre si interfaces compatibles

c Facilite l volution et ladaptation des applications

ENSI

Syst mes et applications r partis

3

Client-serveur objet

q objets "langage"

repr sentation propre au

langage : instance d'une classe

exemple : Java RMI

q objets "syst me"

repr sentation "arbitraire"

d finie par l'environnement

d'ex cution

exemple : CORBA

q Motivations

propri t s de lobjet (encapsulation,

modularit , r utilisation, polymorphisme,

composition)

objet : unit de d signation et de

distribution

q El ments d'une "invocation"

r f rence d'objet

identification d'une m thode

param tres d'appel et de retour (y

compris signal d'exception)

" passage par valeur : types l mentaires et

types construits

" passage par r f rence

4

Appel de m thode distance

Remote Method Invocation (RMI)

q Solution propos e par SUN pour adapter le principe des RPC la

programmation orient e objet.

q Technologie fond e sur le langage Java ( partir du JDK 1.1)

q Localisation d'objets distants

q Les changes respectent un protocole propri taire : Remote Method Protocol.

q Invocation de m thodes sur des objets distants

q Transfert d'objets en param tres ou en retour (serialization)

ENSI

Syst mes et applications r partis

5

RMI : architecture logique

ENSI

Syst mes et applications r partis

6

La couche des r f rences distantes

q Plusieurs protocoles dinvocation possibles :

c Invocation point point (Unicast)

c Invocation vers des groupes de r plication (Multicast)

q Strat gie de reconnexion (si un objet devient inaccessible)

q Deux composantes coop rantes :

c la composante c t client (client-side)

c la composante c t serveur (server-side)

q Transmission de donn es entre couches transport par une

connexion orient e flux

ENSI

Syst mes et applications r partis

7

La couche transport

q La couche transport de Java-RMI effectue :

c Mise en place, gestion, surveillance de la connexion

c Ecoute des appels arrivants

c Maintien dune table dobjets distants pour lespace dadressage

c Localisation du dispatcher pour la cible dun appel distant et transmission de la

connexion

q Elle r alise les connexions r seaux bas es sur les flux entre les JVM.

q Elle emploie un protocole de communication propri taire (JRMP : Java

Remote Method Protocol) bas sur TCP/IP.

ENSI

Syst mes et applications r partis

8

Personnaliser la couche Transport des RMI

q Par d faut, TCP est utilis par la couche de transport RMISocketFactory (classes java.net.Socket et

java.net.SocketServer)

q Motivation

c utiliser dautres classes (que Socket et SocketServer) bas es sur

TCP pour de la compression, du chiffrage, &

Remarque : RMI over SSL utilise cette technique

ou non (UDP)

q Etape 1

c crire 2 sous classes de

java.rmi.RMIClientSocketFactory,

java.rmi.RMICServerSocketFactory

c qui utilisent 2 autres classes de transport que

java.net.Socket

Java.net. ServerSocket

q Etape 2

c Sp cifier les factories dans le constructeur de lobjet distant qui h rite de la classe UnicastRemoteObject

protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMICServerSocketFactory ssf)

ENSI

Syst mes et applications r partis

9

Appel de m thode distance

Remote Method Invocation (RMI)

objet client

objet serveur

Talon

client

Talon

serveur

Syst me de communication

tat

Methode_1

.

.

Methode_n

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

r f rence

appel

10

Java RMI

Mode op ratoire c t serveur

rmiregistry

Naming

Serveur

Skeleton

JVM Client

JVM Serveur

Client

11

Java RMI

Mode op ratoire c t serveur

q 1 - L'objet serveur s'enregistre aupr s du Naming de sa JVM

(m thode rebind)

q 2 - L objet skeleton est cr , celui-ci cr e le port de

communication et maintient une r f rence vers l'objet

serveur

q 3 - Le Naming enregistre l'objet serveur, et le port de

communication utilis aupr s du serveur de noms

q L'objet serveur est pr t r pondre des requ tes

12

Java RMI

Mode op ratoire c t client

rmiregistry

Naming

Client

Stub

JVM Client

13

Naming

Serveur

Skeleton

JVM Serveur

Java RMI

Mode op ratoire c t client

q4 - L'objet client fait appel au Naming pour localiser

l'objet serveur (m thode lookup)

q5 - Le Naming r cup re les "r f rences" vers l'objet

serveur, ...

q6 - cr e lobjet Stub et ...

q7 - rend sa r f rence au client

q8 - Le client effectue l'appel au serveur par appel

lobjet Stub

Advertisement

14

q La souche client :

La souche client (stub)

cInitialise lappel vers un objet distant (via la couche des r f rences

distantes )

cS rialise les arguments sous forme dun unique flot de sortie

cInforme la couche des r f rences distantes que lappel peut tre

invoqu

cD s rialise le flot dentr e contenant la valeur de retour ou une

exception

cInforme la couche des r f rences distantes que lappel est achev

ENSI

Syst mes et applications r partis

15

La souche serveur (skeleton)

q La souche serveur :

cRe oit lappel par une m thode unique (aiguilleur)

cD s rialise le flot dentr e des arguments

cPr pare lappel vers limpl mentation r elle de lobjet distant

cDistribue lappel vers la bonne m thode cible

cS rialise les valeurs de retour ou les exceptions dans le flot de

sortie

ENSI

Syst mes et applications r partis

16

Exportation de l'objet

Pour exporter un objet :

q Utilisation de la classe UnicastRemoteObject

c L'objet reste alors actif et accessible en permanence

c Si la JVM dans laquelle il s'ex cute est arr t e, l'objet dispara t et sa r f rence

galement

q Variante possible : Activatable

c Permet de n'activer l'objet que quand il est sollicit

c Via un m canisme et une JVM particuliers

c Permet de limiter le nombre d'objets actifs en m me temps : gain de m moire

au besoin

c Plus complexe utiliser

ENSI

Syst mes et applications r partis

17

La classe UnicastRemoteObject

q Serveurs d marr s explicitement

q Utilise des comm TCP

q Pour des comm. P2P entre processus actifs

q Unicast : l'objet de la classe impl mentant l'interface n'existe quen

un seul exemplaire sur une seule machine

q L'objet meurt avec la fin de l'ex cution du serveur qui le lance

ENSI

Syst mes et applications r partis

18

La classe UnicastRemoteObject

q La classe abstraite RemoteObject red finit plusieurs m thodes de

Object et en ajoute pour les objets distants

c hashCode, equals, toString

c getRef, toStub, writeObject, readObject

q La classe abstraite RemoteServer d finit des m thodes

communes tous les serveurs

c unexportObject, getClientHost, &

q La classe UnicastRemoteObject impl mente les objets distants

non r pliqu s (mono-serveur)

c exportObject, &

ENSI

Syst mes et applications r partis

19

La classe UnicastRemoteObject

La principale fonction de cette classe se manifeste lors

de la cr ation dune instance de lobjet distant tendant

cette classe.

qLe constructeur cr e une instance de stub pour

lobjet et retourne ce stub comme r sultat de la

cr ation

qLe contenu dun stub

cUn stub contient essentiellement une variable ref de type

RemoteRef qui contient la localisation de lobjet (adresse

IP, port)

cUn appel de m thode se fait par appel de ref.invoke(&) qui

utilise les sockets pour la communication

ENSI

Syst mes et applications r partis

20

Le service de nommage: Enregistrement d'un

service

ENSI

Syst mes et applications r partis

21

Le service de nommage: Acc s une r f rence

distante

ENSI

Syst mes et applications r partis

22

Le service de nommage

q Une URL est form e pour l'enregistrement puis l'acc s sous la forme :

c rmi://<host_name>[:port]/

q Le port de liaison par d faut est le port TCP 1099

q La classe Naming encaspule le dialogue avec plusieurs objets serveurs

de liaison

c Peut utiliser un ou plusieurs registry par application distribu e

c On doit enregistrer un objet sur un registry local

c 5 op rations statiques pour enregistrer des objets et r cup rer leurs r f rences

ENSI

Syst mes et applications r partis

23

Le service de nommage

q L objet serveur de liaison

c r alise la correspondance nom avec stub

c Interface dun objet serveur de liaison

c Impl mentation par d faut de lobjet serveur de liaison

q La classe LocateRegistry

c localise ou active un objet serveur de liaison

c En g n ral invisible au client (appel en interne par Naming)

c M thodes Statiques

Registry createRegistry(int port)

cr e un objet serveur de liaison sur le port sp cifi

Registry getRegistry(int port)

r cup re lobjet serveur de liaison qui a t cr e

Registry getRegistry(server name, port number)

essaie de trouver un d mon rmiregistry sur la machine server name et sur le port port

ENSI

number

Syst mes et applications r partis

24

Le service de nommage

ENSI

Syst mes et applications r partis

25

La notion dinterface

q Linterface constitue le contrat - abstrait liant objets serveurs et

objets clients

cElle est destin e tre impl ment e par lOD et constitue la base

dappel pour les objets clients

Elle d finie les signatures (noms, types de retour, param tres) dun

ensemble de m thodes et seules ces m thodes seront accessibles par un

objet client

q Pour RMI, cest une interface Java traditionnelle & mais d rivant de la

classe java.rmi.Remote

ENSI

Syst mes et applications r partis

26

Java RMI

Manuel d'utilisation

q Codage

c Description de linterface du service

Ici pas dIDL s par : Java sert dIDL

c Ecriture du code du serveur qui implante linterface

c Ecriture du client qui appelle le serveur

q Compilation

c Compilation des sources (javac)

c Cr ation des Stub et Skel par rmic (faite automatiquement partir de JDK 5.0)

q Activation

c Lancement du serveur de noms (rmiregistry)

L'acc s une r f rence distante chez le client (par java.rmi.registry.Registry)

c Lancement du serveur

c Lancement du client

27

Java RMI

Manuel d'utilisation

q D finition de l'interface de l'objet r parti

c interface : "extends java.rmi.Remote"

c methodes : "throws java.rmi.RemoteException "

c param tres s rialisables : "implements Serializable "

q Ecrire une impl mentation de l'objet serveur

c classe : tend une des sous-classes de java.rmi.server.RemoteServer comme

java.rmi.server.UnicastRemoteObject

c Pas de sp cialisation et le constructeur doit ex cuter l'instruction suivante :

UnicastRemoteObject.exportObject(this);

q 5 Packages

c java.rmi : pour acc der des objets distants

c java.rmi.server : pour cr er des objets distants

c java.rmi.registry : li la localisation et au nommage dobjets distants

c java.rmi.dgc : ramasse-miettes pour les objets distants

c java.rmi.activation support pour l activation d objets distants.

28

Java RMI : criture de linterface

q M mes principes de base que pour linterface dun objet local

q Principales diff rences

c Linterface distante doit tre publique

c Linterface distante doit tendre linterface java.rmi.Remote

c Chaque m thode doit d clarer au moins lexception java.rmi.RemoteException

c Tout objet distant pass en param tre doit tre d clar comme une interface

(passage de la r f rence de lobjet)

c Tout objet local pass en param tre doit tre s rialisable

29

Java RMI

Exemple : Interface

fichier Hello.java

public interface Hello extends java.rmi.Remote

{

String sayHello() throws

java.rmi.RemoteException;

}

Description

de

l interface

30

Java RMI : criture du serveur

q Serveur = la classe qui impl mente linterface

cSp cifier les interfaces distantes qui doivent tre impl ment es

objets locaux pass s par copie (il doivent impl menter linterface

java.io.serializable)

objets distants pass s par r f rence (actuellement r f rence un stub)

cCest un objet java standard

d finir le constructeur de lobjet

fournir la mise en Suvre des m thodes pouvant tre appel es distance

ainsi que celle des m thodes napparaissant dans aucune interface

impl ment e

cCr er au moins une instance du serveur

cEnregistrer au moins une instance dans le serveur de nom (rmiregistry)

31

Java RMI : criture du serveur

q Lobjet distant servant peut tre dune sous classe de la classe

impl mentant linterface

Advertisement

q Le serveur peut cr er et enregistrer plusieurs objets appartenant

une ou plusieurs classes

q Lenregistrement peut se faire aupr s de plusieurs rmiregistry

q Il faut pr voir une proc dure darr t (shutdown) du serveur

c Arr t des objets UnicastRemoteObject

public static void Naming.unbind(Stringname)

public static boolean UnicastRemoteObject.unexportObject(Remote,

boolean force)

ENSI

Syst mes et applications r partis

32

Java RMI

Exemple : Impl mentation de lobjet distant

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

fichier HelloObj.java

public class HelloObj extends UnicastRemoteObject implements Hello {

private String msg;

// Constructeur

public HelloObj(String msg) throws RemoteException {

this.msg = msg;

}

// Impl mentation de la m thode distante.

public String sayHello() throws RemoteException {

return "Hello world: " + msg;

R alisation

Du serveur

}

}

33

Java RMI

Exemple : Impl mentation de lobjet distant

fichier HelloObj.java

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class HelloObj implements Hello {

private String msg;

// Constructeur

public HelloObj(String msg) throws RemoteException {

this.msg = msg;

UnicastRemoteObject.exportObject(this);

}

// Impl mentation de la m thode distante.

public String sayHello() throws RemoteException {

return "Hello world: " + msg;

}

}

34

R alisation

Du serveur

(autre approche)

Java RMI

Exemple : Serveur

fichier HelloServeur.java

import java.rmi.*;

public class HelloServeur {

public static void main(String args[]) {

try {

// Cr e une instance de l objet serveur.

HelloObj obj = new HelloObj("HelloServeur");

// Enregistre l'objet cr er aupr s du serveur de noms.

Naming.rebind(Hello.class.getName(), obj);

System.out.println("HelloServer" + " bound in registry");

R alisation

du

Serveur dobjets

} catch (Exception exc) {& }

}

}

ATTENTION : dans cet exemple le serveur de nom

doit tre activ avant la cr ation du serveur

35

Java RMI

Activation du serveur de nom par le serveur

fichier HelloServeur.java

public static void main(String args[]) {

int port; String URL;

try { // transformation d une cha ne de caract res en entier

Integer I = new Integer(args[0]); port = I.intValue();

} catch (Exception ex) {

System.out.println(" Please enter: Server <port>"); return;

}

try {

// Cr ation du serveur de nom - rmiregistry

Registry registry = LocateRegistry.createRegistry(port);

R alisation du

serveur

(autre approche)

// Cr ation d une instance de l objet serveur

HelloObj obj = new HelloObj("Coucou, je suis le serveur de port : "+port);

// Calcul de l URL du serveur

URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+

Hello.class.getName();

registry.rebind(URL, obj);

} catch (Exception exc) { ...}}

36

Java RMI

Exemple : Client

import java.rmi.Naming;

fichier HelloClient.java

public class HelloClient {

public static void main(String args[]) {

try {

// R cup ration d'un stub sur l'objet serveur.

Hello obj = (Hello) Naming.lookup("//suldrun/"+

Hello.class.getName());

// Appel d'une m thode sur l'objet distant.

String msg = obj.sayHello();

// Impression du message.

System.out.println(msg);

} catch (Exception exc) { & }

}}

R alisation

du

client

q On r cup re en fait une r f rence sur une instance de HelloObj_Stub

c Le talon local c t client qui sert de proxy pour l'acc s l'instance de HelloObj c t serveur

37

Java RMI

Exemple : Client (Recherche du rmiregistry)

fichier HelloClient.java

import java.rmi.Naming;

public class HelloClient {

public static void main(String args[]) {

try {

// R cup ration d'un stub sur l'objet serveur.

if (args.length > 0) obj = (Hello) LocateRegistry

.getRegistry(args[0]).lookup(Hello.class.getName());

else obj = (Hello)LocateRegistry.getRegistry()

.lookup(Hello.class.getName());

// Appel d'une m thode sur l'objet distant.

String msg = obj.sayHello();

// Impression du message.

System.out.println(msg);

} catch (Exception exc) { & }

}

}

38

R alisation

du

client

Java RMI

Compilation

qCompilation de linterface, du serveur et du client

cjavac Hello.java HelloObj.java HelloServeur.java

HelloClient.java

qG n ration des talons

cG n r s automatiquement partir du JDK 5.0

crmic HelloObj (JDK 1.4 ou ant rieur)

skeleton dans HelloObj_Skel.class

stub dans HelloObj_Stub.class.

Les fichiers .java g n r s sont effac s sauf si l'option -

keepgenerated est sp cifi e.

39

Java RMI

D ploiement

q 1) Activation du serveur de nom

c start rmiregistry (Windows) ou rmiregistry & (Unix)

q 2) Activation du serveur

c java HelloServeur

c L'ex cution d'un serveur RMI n cessite de fixer quelques propri t s:

L'h te et le chemin d'acc s des classes (de l'interface, ventuellement des impl mentations) du

serveur

-Djava.rmi.server.codebase=<repertoire>

Exemple :

java -Djava.rmi.server.codebase=http://hostname/& HelloServeur

-Djava.rmi.server.codebase=file://dev/hello/myclasses/

-Djava.rmi.server.codebase=file:/c:\dev\hello\myclasses/

path indiquant quel endroit la machine virtuelle cliente va pouvoir chercher le code du stub

Unix

Win32

-Djava.rmi.server.hostname=<hote>

N cessaire si le client et le serveur ne sont pas sur la m me station

Le fichier d finissant la politique de s curit

-Djava.security.policy=<fichier_policy>

q 3) Activation du client

c java HelloClient

40

Passage d'arguments

q Il y a 3 possibilit s de passage d'arguments lors de l'invocation d'une m thode

distante

c Le param tre est d'un type primitif : passage par valeur

c Le param tre est un objet

Il est s rialis et envoy au serveur

il doit donc impl menter java.io.Serializable ou java.io.Externalizable

Une r f rence distante est envoy e :cest lobjet Stub qui est s rialis et envoy

lobjet distant : quand lobjet distant invoque un m thode sur le param tre,

linvocation est distante.

Pour cela 3 conditions doivent tre respect es :

L'objet en question h rite de la classe UnicastRemoteObject;

Il impl mente une interface partag e avec l'autre partie (client ou serveur);

Sa r f rence distante (Stub) est accessible par l'autre partie.

q Idem pour la valeur de retour d'une m thode distante

ENSI

Syst mes et applications r partis

41

S rialisation d'objets

q La s rialisation est une op ration (on parle aussi de marshalling et

d'unmarshalling) qui consiste transformer un objet dans un format

transf rable par un flux de donn es (cf. les classes ObjectInputStream et

ObjectOutputStream du package java.io). On s'en sert principalement

dans 2 cas :

c Sauvegarder un objet dans un fichier

c D placer un objet d'une machine virtuelle vers une autre

q C'est donc une copie de l'objet qui est envoy e au serveur (ou au client

dans le cas d'une valeur de retour).

q Pour tre s rialisable, un objet doit impl menter l'interface

java.io.Serializable;

q Tous les objets contenus dans l'objet seront aussi s rialis s (ils doivent

donc tre aussi s rialisables);

q La s rialisation est effectu e automatiquement.

Advertisement

ENSI

Syst mes et applications r partis

42

Java RMI

Passage en param tre dun objet local

Java VM

Java VM

O2

Objet objet1

m ( O2 )

clone_O2

Skeleton

R_objet1

Client

R_objet1.m ( O2 )

Stub

R_objet1

43

Java RMI

Passage en param tre dun objet local dont la classe est inconnue

du serveur

ENSI

Syst mes et applications r partis

44

Java RMI

Passage en param tre dun objet local dont la classe est inconnue

du serveur

ENSI

Syst mes et applications r partis

45

Java RMI

Passage en param tre dun objet local : exemple

ENSI

Syst mes et applications r partis

46

Java RMI

Passage en param tre dun objet distant

Objet O2

Java VM

Java VM

Client

R_objet1.m ( R O2 )

Stub

R_O2

Objet objet1

m ( R_objet )

Stub

R_objet1

47

Skeleton

R_objet1

Java RMI

Passage en param tre dun objet distant

Objet O2

Java VM

Java VM

Client

R_objet1.m ( R O2 )

Stub

R_O2

Objet objet1

m ( R objet )

Stub

R_O2

Stub

R_objet1

Skeleton

R_objet1

48

Java RMI

Passage en param tre dun objet distant

qSi jamais le type nest pas disponible

localement, il est charg dynamiquement

(RMIClassLoader)

qPour les param tres qui seraient d j des r f rences dOD,

lobjet amorce (Stub) est pass :

cimpossible de passer en param tre un objet

uniquement visible par les classes serveurs

ENSI

Syst mes et applications r partis

49

Java RMI

Passage en param tre dun objet distant

q M thode 1

c Le Stub est celui dun objet distant d j servi

q M thode 2 : Objet Distant Temporaire

cBut:

Lobjet distant est local au client et nest

utilis que pour la dur e dune ou

plusieurs invocations distantes depuis

le client

cSolution

Exporter lobjet avec la m thode

UnicastRemoteObject.exportObject()

Lobjet doit impl menter linterface Unreferenced

pour tre ramass par

le GC

ENSI

Syst mes et applications r partis

50

Objet Distant Temporaire : Le client

ENSI

Syst mes et applications r partis

51

Objet Distant Temporaire

Le serveur temporaire

ENSI

Syst mes et applications r partis

52

Objet Distant Temporaire

Lobjet distant et son serveur

ENSI

Syst mes et applications r partis

53

Objet Distant Temporaire

D roulement de lex cution

ENSI

Syst mes et applications r partis

54

Appels en retour

q La partie serveur peut avoir besoin d'appeler

une m thode sur la partie client

c Callback : appel en retour

q Deux moyens pour le serveur de conna tre le

client

c Rechercher sa r f rence via son nom dans

le registre

c R cup rer sa r f rence via l'appel de la

m thode

q Exemple : impl mentation du patron Observer

c Un l ment (l'observ ) g re une donn e/un

tat susceptible de changer

c D'autres l ments (les observateurs)

informent l'observ qu'ils veulent tre tenus

au courant des changements de valeur de la

donn e

ENSI

Syst mes et applications r partis

55

Appels en retour : Exemple

qInterface d'op rations, c t observateur

cUne op ration qui sera appel e par l'observ

quand la donn e observ e (un entier ici) changera

de valeur

ENSI

Syst mes et applications r partis

56

Appels en retour : Exemple

q Interface d'op rations c t observ

q Une m thode pour s'enregistrer comme observateur de la valeur et une

pour se d senregistrer

q Le param tre est de type IChangeValue

cC'est- -dire un objet impl mentant l'interface permettant de

signaler un changement de valeur

ENSI

Syst mes et applications r partis

57

Appels en retour : Exemple

q Impl mentation de l'observateur

ENSI

Syst mes et applications r partis

58

Appels en retour : Exemple

qImpl mentation de l'observ

ENSI

Syst mes et applications r partis

59

Appels en retour : Exemple

qImpl mentation de l'observ (suite)

ENSI

Syst mes et applications r partis

60

Appels en retour : Exemple

qLancement de l'observ

qLancement d'un observateur

ENSI

Syst mes et applications r partis

61

Appels en retour

q Note 1

c Quand un observateur appelle subscribe sur l'observ distant, il passe sa

r f rence distante car il impl mente une interface Remote

c L'appel de newValue se fait donc bien sur l'observateur distant (distant du

point de vue de l'observ qui appelle newValue)

q Note 2

c On peut noter que les observateurs ne se sont pas enregistr s via le registry

c On peut en effet communiquer avec un objet distant partir du moment o

il s'est export

c L'enregistrement via le registry n'est utile que pour r cup rer sa r f rence

partir de son nom associ

c Inutile ici car les observateurs passent eux-m mes leurs r f rences

l'observ

ENSI

Syst mes et applications r partis

62

Appels concurrents d'op rations

q Les m thodes de l'observ sont marqu es avec synchronized

cPour viter des incoh rences en cas d'appels concurrents

q C t servant

cEn interne de RMI, une op ration invoqu e dynamiquement ou par le

skeleton l'est dans un thread cr cet usage

cAcc s concurrent possible si plusieurs clients distants demandent en

m me temps ex cuter une op ration

cToujours avoir cela en t te quand on impl mente un servant m me si on

ne voit pas explicitement l'aspect concurrent

ENSI

Syst mes et applications r partis

63

Chargement dynamique des stubs

q Rappel : un objet client ne peut utiliser un objet distant quau

travers des stubs

Advertisement

q RMI permet lutilisation des OD dont les stubs ne sont pas

disponibles au moment de la compilation

q A lex cution, RMI r clamera au serveur le stub client manquant et

le t l chargera dynamiquement (byte code)

cLe serveur est lanc en pr cisant un codebase

cLe client est lanc sans codebase et retrouvera les classes via les

informations envoy es par le registry

ENSI

Syst mes et applications r partis

64

Chargement dynamique des classes

q Plus g n ralement, le syst me RMI permet le chargement

dynamique de classes comme les stubs, les interfaces distantes

et les classes des arguments et valeurs de retour des appels

distants

q Cest un chargeur de classes sp cial RMI qui sen charge :

java.rmi.server.RMIClassLoader

ENSI

Syst mes et applications r partis

65

Charger des classes de mani re dynamique

q Les d finitions de classe sont h berg es sur un serveur Web.

q Les param tres, les stubs sont envoy s au client via une connexion

au serveur Web.

q Pour fonctionner, une application doit t l charger les fichiers de

classe.

Chargement dynamique

q Cela vite de disposer localement de toutes les d finitions de

classe.

q Les m mes fichiers de classe (m me version) sont partag s par tous

les clients.

q On ne charge que les classes dont on a besoin.

ENSI

Syst mes et applications r partis

66

Fichiers n cessaires si pas de chargement dynamique

qC t Client

qC t Serveur

linterface : Hello

le stub : HelloObj_Stub

le client : HelloClient

linterface : Hello

lobjet : HelloObj

le serveur dobjets :

HelloServeur

Le skeleton :

HelloObj_Skel

ENSI

Syst mes et applications r partis

67

Fichiers n cessaires si chargement dynamique

qC t client

qC t serveur

Le client : HelloClient

Le serveur HelloServeur

R cup rer les fichiers de classe partir du serveur web

Serveur Web : Interface : Hello

Stub : HelloObj_stub

Objet : HelloObj

ENSI

Syst mes et applications r partis

68

Le client peut tre lui m me dynamique

C t Client

q Le client : DynamicClient

q Chargement dynamique du client et

C t Serveur

q Le serveur dobjets :

HelloServeur

de linterface partir dun

r pertoire local. Si non disponibles

localement, ils sont recherch s sur

le serveur Web sp cifi .

q Lex cution de HelloClient permet

dobtenir la r f rence de lobjet

HelloObj et lappel distant de sa

m thode

q Chargement dynamique de

lobjet HelloObj partir du

serveur Web

q Enregistrement de lobjet dans

RMIregistry (bind)

q Attente de requ tes des clients

Serveur Web : Interface : Hello

Stub : HelloObj_stub

Objet : HelloObj

Client : HelloClient

ENSI

Syst mes et applications r partis

69

Principe du chargement dynamique

q A lenregistrement (dans rmiregistry) de l objet distant, le codebase est

sp cifi par java.rmi.server.codebase.

c URL est de type file , ftp ou http

c Exemples

$ java -Djava.rmi.server.codebase=file:///home/TPRMI/test-rmi/ Serveur

$ java -Djava.rmi.server.codebase=http://www.SAR.ensi.rnu.tn/TPRMI/test-rmi/ Serveur

q A lappel de bind(), le registre utilise ce codebase pour trouver les fichiers

de classe associ s lobjet.

q Le client recherche la d finition de classe du stub dans son classpath. Sil ne

la trouve pas, il essayera de la r cup rer partir du codebase.

c La m thode LoadClass de RMIClassLoader charge la classe partir du codebase

sp cifi .

q Une fois que toutes les d finitions de classe sont disponibles, la m thode

proxy du stub appelle les objets sur le serveur.

ENSI

Syst mes et applications r partis

70

Principe du chargement dynamique

ENSI

Syst mes et applications r partis

71

Principe du chargement dynamique :

L enregistrement de l objet

ENSI

Syst mes et applications r partis

72

Principe du chargement dynamique :

La r cup ration du Stub

ENSI

Syst mes et applications r partis

73

Principe du chargement dynamique :

Invocation d une m thode

ENSI

Syst mes et applications r partis

74

Les diff rentes tapes dun chargement dynamique

q crire les classes correspondant respectivement linterface et lobjet.

q Les compiler.

q G n rer le Stub correspondant lobjet.

q Installer tous les fichiers de classe sur un serveur Web.

q crire le serveur dynamique.

q Installer rmiregistry au niveau de la machine du serveur.

q Lancer le serveur en lui pr cisant lURL des fichiers de classe afin quil puisse

charger dynamiquement le fichier de classe correspondant lobjet, linstancier

(le cr er) et lenregistrer aupr s de rmiregistry.

q Sur la machine du client, crire le code du client.

q Compiler le client statique et linstaller ventuellement sur le site Web.

q Compiler le client dynamique et le lancer en pr cisant lURL des fichiers de classe.

ENSI

Syst mes et applications r partis

75

Chargement dynamique et s curit

q Si le code du stub nest pas pr sent sur le site local, le protocole RMI

pr voit le chargement dynamique du stub en utilisant un serveur

web et le protocole HTTP

c java -Djava.rmi.server.codebase=http://<hostname>/& HelloServeur

q Si chargement dynamique&

c le chargeur dynamique utilis par RMI (RMIClassLoader) regarde si la classe

demand e correspond au niveau de s curit requis

utilisation dun SecurityManager

Cest la classe java.rmi.RMISecurityManager

c cr er et installer le gestionnaire de s curit (dans le client)

System.setSecurityManager(new RMISecurityManager());

76

S curit et RMI

q L'ensemble des permissions accord es par ce SecurityManager sont d finies soit :

c en surchargeant certaines m thodes de l'instance (cf. la classe

java.lang.SecurityManager)

c en crivant un fichier externe indiqu dans l'option d'ex cution

-Djava.security.policy=<fichier_policy>

Example :

java -Djava.security.policy=client.policy HelloClient

q Syntaxe simplifi e d'un fichier policy :

grant {

permission <permission_class_name> [,action]

permission <permission_class_name> [,action]

...

};

ENSI

Syst mes et applications r partis

77

Exemples de fichiers policy

grant {

permission java.security.AllPermission;

};

grant {

permission java.io.FilePermission "/tmp/*",

"read,write";

permission java.util.PropertyPermission

"user.country", "read";

permission java.net.SocketPermission

"localhost:1099", "connect,accept,resolve";

};

ENSI

Syst mes et applications r partis

78

Exemple : serveur dynamique

fichier DynamicServer.java

import java.rmi.Naming;

import java.rmi.Remote;

import java.rmi.RMISecurityManager;

import java.rmi.server.RMIClassLoader;

import java.util.Properties;

import java.lang.reflect.Constructor;

public class DynamicServer {

public static void main(String[] args)

{

System.setSecurityManager(new RMISecurityManager());

try {

Properties p= System.getProperties();

String url=p.getProperty("java.rmi.server.codebase");

Class ClasseServeur = RMIClassLoader.loadClass(url, "HelloObj");

Constructor[] C = ClasseServeur.getConstructors();

Naming.rebind("rmi://sinus.rnu.ensi.tn:1099/MyHello",

(Remote)C[0].newInstance(new Object[]{args} ));

System.out.println("Objet Hel...