Programmation d'Applications Réparties avec RPC et Java RMI

IEEE
Page 1 sur 121Lecteur de document UniversityLib

Programmation d'Applications Réparties avec RPC et Java RMI

Programming, RPC, RMI, Networking · course

Browse all programmation documents

1 RPC/RMI

ENSI-II2-RSR/SLE

Programmation dApplications R parties avec

RPC et Java RMI

F. Najjar

RPC/RMI

Programmation r seau sous Unix

qLutilisateur ne peut acc der directement aux protocole situ s dans le noyau

dUnix

c Il peut utiliser les protocole TCP et UDP par le biais des sockets

c Les sockets peuvent tre vues comme des portes vers le r seau

c Les sockets offrent, pour la programmation, une interface similaire celle

du syst me de fichiers

qLe programmeur peut acc der directement aux points dentr es de la couche 4

que forment les sockets sans avoir traverser les couches 5 et 6

cCe qui est contraire aux r gles impos es par le mod le de r f rence OSI de

lISO

2

3 RPC/RMI

RPC?

RPC-- Remote procedure call?

c Appel de proc dures/fonctions distance

cAbstraction:

Vis- -vis du protocole de communication

Distribution masqu e (transparence)

4 RPC/RMI

Composants de RPC?

cIDL-- Interface Definition Language: langage de description des

donn es et des fonctions proche du C;

c une m thode de repr sentation portable des donn es;

c un protocole dappel :

transmission des param tres de lappel du client vers le serveur;

transmission du r sultat du serveur vers le client;

c un protocole de publication et de recherche dun service.

5 RPC/RMI

Types RPC

RPC par host-serveur: le client doit sp cifier le host-serveur.

c Deux grandes normes (traditionnelles):

SUN ONC/RPC --Open Network Computing/Remote Procedure Call

OSF DCE -- Open Software Foundation - Distributed Computing

Environnment.

Mais aussi RPC par objet-serveur : le client ne d signe pas le host-serveur

c OMG CORBA -- Object Management Group -Common Object Request Broker

Architecture

c SUN Java RMI -- Remote Method Invocation

c Microsoft DCOM -- Distributed Component Object Model

6 RPC/RMI

Types RPC (suite)

Et RPC int gr es dans les syst mes de composants:

c SUN J2EE EJB -- Java 2 (Platform) Enterprise Edition - Enterprise Java

c OMG CCM -- Object Management Group - Corba Component Model

c WS-SOAP -- Web Services - Simple Object Access Protocol

7 RPC/RMI

ONC RPC (SUN)

rfc 1831

Solution classique, disponible sur Unix (incluse dans le syst me en g n ral) et

sous windows;

Open source , comparable aux DCE RPC en gratuit

Il utilise le protocole XDR pour la description/ change de donn es (transport

des arguments et du r sultat) -- (rfc 1832) ;

Technologie utilis e par NFS--Network File System.

Outil de base rpcgen:

c g n re des convertisseurs ((un)marshalling);

c g n re les souches (serveurs et clients);

c propose des mod les pour le client et le serveur engendre un Makefile;

Utilise un lookup service pour la publication et la d couverte dun service (rfc

1833);

c Service lookup tourne sur chaque h te contenant des serveurs rpc.

Les RPC ONC peuvent tre implant es sur nimporte quelle couche transport (TCP/UDP)

8 RPC/RMI

Repr sentation de Donn es (en m moire)

Client et serveur sur machines diff rentes

c Il faut transmettre donn es et r sultats

Diff rences de repr sentations en m moire

c Codage Little-endian (x86, alpha) vs. Big-endian (ppc, sparc, reseau) :

(depend du processeur)

c Repr sentation des flottants (fixe par IEEE 754)

c Alignement des donn es dans structure (d pend du compilateur)

cTailles (32 ou 64 bits ; 4 ou 8 octets pour un registre)

9 RPC/RMI

XDR eXchange Data Representation

Repr sentation portable des donn es (r seau):

c codage big endian avec des mots de 4 octets (compl tion par des z ros)

c permet de d finir des types de donn es associ s une

repr sentation binaire standard

c Repr sentation commune sur le r seau (format pivot)

c orient C (syntaxe proche du C):

types fondamentaux classiques (int, double, etc.)

num ration

struct et union

tableaux

c rpcgen engendre des fonctions de traduction partir dun fichier XDR

(et des biblioth ques de conversion de bas niveau) en XDR

10 RPC/RMI

XDR Types (1/2)

Type

Identificateur

taille

Entier relatif

int

4 octets (IEEE)

Entier positif

unsigned int

4 octets (IEEE)

Enum ration

enum {id =

constante, &}

4 octets (IEEE)

Bool en

Entier long

bool

hyper

Entier positif

unsigend hyper

Enum {False=0, True=1}

8 octets

8 octets

Type

Identificateur

taille

R els simples

Float

R els doubles

double

4 octets (IEEE)

4 octets (IEEE)

R els long

quadruple

4 octets (IEEE)

Rien

void

0 octet

11 RPC/RMI

XDR Types (2/2)

Donn es taille fixe ou variable :

c correspond une taille fixe gale n

c <> correspond une taille variable

c <m> correspond une taille variable inf rieure m

c exemple, int<15> : liste dentiers de longueur au plus 15.

Cas particuliers :

Identificateur

Contenu

opaque

string

Liste doctets

Cha ne de caract res

12 RPC/RMI

Principe de base de SUN RPC

Un service r seau est fourni par plusieurs programmes

Un programme fournis plusieurs fonctions (ou proc dures)

Un client appelle une proc dure dun programme

13 RPC/RMI

Le protocole RPC --Identification

Une proc dure est identifi e par trois entiers (positifs) :

j Hostname (IP Address)

k Le num ro de programme unique (32 bit integer)

Sun divise les IDs en :

0x00000000 - 0x1fffffff Serveurs officiels Sun

0x20000000 - 0x3fffffff Publique (Admin. syst me)

0x40000000 - 0x5fffffff Serveurs Transitoires

0x60000000 - 0xffffffff R serv e par Sun

c Le num ro de proc dure (32 bit integer)

Commence toujours partir de 1 et puis incr menter s quentiellement.

l Le num ro de version du programme (pour tests et migration)

Commence typiquement partir de 1 et puis incr menter

14 RPC/RMI

Le Langage de Description RPCL (1/2)

IDL de RPC

Les fichiers sp cification dextension .x ont la structure suivante:

program NOM_PROGRAMME {

} = numero_version]

} = numero_programme;

15 RPC/RMI

Le Langage de Description RPCL (2/2)

Les constantes :

const identificateur = valeur;

Les structures :

struct nom_du_type {

type attribut ;

}

Nouveau type:

typedef type nom_du_type ;

c Cas particulier des tableaux et cha nes de caract res :

typedef int vecteur <1000>

typedef string chaine <255>

Liste des services RPC enregistr s sur une machine

16

RPC/RMI

qListe des services enregistr s:

crpcinfo p

qAppel de la proc dure 0 dun programme en utilisant le protocole udp

crpcinfo -u machine num_prg

crpcinfo -t machine num_prg

qExemple: rpcinfo -p

portmapper

portmapper

program no_version

100000 2

Advertisement

protocole

tcp

no_ port

111

100000 2

udp

111

100021 1 udp

100021 3 udp

100021 1 tcp

100007 2 udp

100007 1 udp

32768 nlockmgr

32768 nlockmgr

32768 nlockmgr

705 ypbind

705 ypbind

100007 2 tcp

708 ypbind

100007 1 tcp

100003 2 udp

708 ypbind

2049 nfs

17 RPC/RMI

RPCGEN

18 RPC/RMI

Exemple: Helloworld.x

Le fichier de description helloworld.x

typedef string chaine<255>;

program HELLO_WORLD_PROG {

version HELLO_WORLD_VERSION_1 {

void hello_world_null(void)=0; / tester le r seau et le serveur; sorte de ping/

chaine hello_world(chaine)=1;

}=1;

} = 0x22222220;

rpcgen helloworld.x

rpcgen -a helloworld.x

c helloworld.h (fichier ent te)

c Makefile

c helloworld_xdr.c (filtre xdr)

c helloworld_server.c //prog. Squelette

c helloworld_svc.c (souche serveur)

c hello_client.c //prog squelette

c helloworld_clnt.c (souche client)

19 RPC/RMI

helloworld_server.c

/* This is sample code generated by rpcgen . These are only templates and you can use

them as a guideline for developing your own functions.*/

#include "helloworld.h"

void hello_world_null_1_svc(void argp, struct svc_req *rqstp) {

static char * result;

printf ("Ping\n");fflush (stdout);

return (void *) &result;

}

chaine hello_world_1_svc(chaine argp, struct svc_req *rqstp) {

static chaine result;

static char tab[255];

/ insert server code here /

result=tab;

strcpy (result, "Hello ");

strcat (result, *argp);

printf ("Result: %s\n", *argp);

printf ("Result: %s\n", result);

return &result;

}

20 RPC/RMI

helloworld_client.c

#include "helloworld.h

void hello_world_prog_1(char *host) {

CLIENT *clnt;

void *result_1;

char hello_world_null_1_arg; chaine result_2; chaine hello_world_1_arg;

/ On tablit la connexion en sp cifiant le host, le #prog, le #version et le transport utilis /

clnt = clnt_create (host, HELLO_WORLD_PROG, HELLO_WORLD_VERSION_1, "udp");

if (clnt == NULL) { clnt_pcreateerror (host);

result_1 = hello_world_null_1((void*)&hello_world_null_1_arg, clnt);

if (result_1 == (void *) NULL) {

exit (1); }

clnt_perror (clnt, "call failed"); }

result_2 = hello_world_1(&host, clnt);

if (result_2 == (chaine *) NULL) clnt_perror (clnt, "call failed");

printf ("%s\n",*result_2);

clnt_destroy (clnt); / on coupe la connexion/

int main (int argc, char *argv[]) {

if (argc < 2) {

printf ("usage: %s server_host\n", argv[0]);

exit (1); }

hello_workd_prog_1(argv[1]);}

21 RPC/RMI

Cr ation du serveur & client

rpcgen helloworld.x

gcc o server helloworld_server.c helloworld_xdr.c helloworld_svc.c lrpcsvc -lnsl

./serveur &

rpcinfo p

rpcinfo u num HELLO_WORLD_PROG 1

gcc o client helloworld_client.c helloworld_xdr.c helloworld_clnt.c lnsl

./client

22 RPC/RMI

Publication et R solution

Un probl me standard des syst mes distribu s :

c pour le serveur, se faire conna tre (publication)

c pour le client, trouver le serveur (d couverte et r solution)

Plusieurs niveaux :

1.partie facile : nom de la machine du serveur + DNS connexion possible

(TCP/UDP)

2.quelle couche transport ?

3.pour TCP/UDP, quel num ro de port ?

Solution propos e par les RPC ONC, un programme de binding (RFC 1823) :

c le portmapper (version 2) : sp cifique TCP/UDP

le portmapper est lui-m me un serveur rpc.

c rpcbind (versions 3 et 4) : ind pendant du transport

23 RPC/RMI

Binding RPC

Principes communs aux diff rentes versions:

c le binder est un programme RPC de num ro 100000

c il coute toujours sur les ports 111 UDP et TCP

c Le portmapper offre diff rentes fonctions :

c publication dun programme (d crit par son #programme et son #version)

c suppression dun programme

c d couverte (r solution) dun programme, cest- -dire obtention du port associ un

programme

c obtention de la liste des programmes enregistr s

c Appel direct dune fonction distante

Le portmapper est limit TCP et UDP.

24 RPC/RMI

RPCbind

Remplace le portmapper.

Principaux avantages :

c ind pendant du transport

c permet un enregistrement et une r solution incluant les informations de

transport:

c offre quelques nouvelles fonctions :

horloge

statistiques dutilisation

un programme peut enregistrer plusieurs instances correspondant

diff rents transport (avec le portmapper, le transport est automatique

celui utilis pour contacter le portmapper lui-m me)

25

RPC/RMI

Conclusion --Bilan des RPC

XDR?? CDR dans CORBA

26 RPC/RMI

Java RMI

Programmation R partie en Java

27 RPC/RMI

Programmation orient e objet --Rappel

q Penser orient objet (OO)?

c Objet: collection de donn es et op rations

c Classe: description dun ensemble dobjets

similaires, ayant des

propri t s communes.

c Sous-classe: sous-ensemble dune classe + propri t s compl mentaires.

c Instance: terme technique dun objet dune classe

c M thode: corps dune proc dure

c Message: appel de proc dure; demande dune m thode

28 RPC/RMI

Int r ts des objets dans la programmation

r partie

c Encapsulation: Interface bien d finie ; Etat interne masqu .

c Classes et instances: G n ration d'exemplaires selon un mod le.

c H ritage: Sp cialisation r cup ration et r utilisation de code.

c Polymorphisme: Objets d'interface compatible interchangeables

Facilite l volution et l'adaptation des applications

29 RPC/RMI

Client/serveur orient objet

q But: coupler la notion d'objet avec les concepts client/serveur

q Objectifs:

q meilleure modularit des applications;

q entit s logiciels plus r utilisables;

q applications mieux packag es, portables et maintenables plus

facilement

q R sultats:

q unit de distribution (et de d signation) = objet

q objet = un ensemble de traitement fournis par ses m thodes

q interaction client/serveur = invocation de m thode

q Nombreux aspects techniques int grer pour y arriver

30 RPC/RMI

Client/serveur orient objet --Challenges

1)Nommage identification unique dans un environnement r parti

c on parle de r f rence, qui sert retrouver lobjet pour pouvoir

invoquer ses m thodes.

2) S curit dacc s gestion du partage dans un env. r parti

3) Dur e de vie (temporaire dur e de vie du cr ateur, persistante dur e de

vie du syst me)

4) Objets concurrents 2 types dobjets concurrents:

cPassif: Lactivit est manipul e de fa on explicite,

orthogonal lobjet,

et se plaque sur les m thodes. Exp. Les threads Java

cActif: une (+ieurs) activit (s) d di e (s)

lobjet ex cutent les m thodes

31 RPC/RMI

Client/serveur orient objet Challenges (suite)

1)Synchronisation concurrence dex cution des m thodes

3 types de synchronisations

c pour 1 m thode d'un objet (s maphores, moniteurs, &)

synchronisation intra-objet ( tat dex cution de lobjet)

synchronisation comportementale ( tat des donn es de lobjet)

c pour plusieurs m thodes situ es sur des objets diff rents

synchronisation inter-objets

2) Migration d placement dobjets (dun site un autre, &)

Pb. Impact de la migration sur la r f rence?

Advertisement

3) R plication

4) Ramasse-miettes --D truire les objets qui ne sont r f renc s par aucun

autre

2 techniques: compactage de r f rences et tra age

32 RPC/RMI

Des RPCs aux RMIs

q RMI Remote method invocation (Invocations de m thodes distance)

c RPC orient s objet ;

c Interaction d'objets situ s dans des espaces d'adressage diff rents sur

des machines distinctes.

q Simple mettre en Suvre:

c un objet distribu se manipule comme tout autre objet Java

33 RPC/RMI

Des RPCs aux RMIs --Diff rences

q Interface Java: lIDL est java lui-m me

q Passage darguments:

c RPC: par valeur (copie)

c RMI: par r f rence dobjet

elle contient tout ce qui est n cessaire pour atteindre

lobjet distant;

Localisation, protocole dacc s.

q Localisation du serveur de noms (rmiregistry):

c Localisation de chaque objet-serveur sur le host-serveur.

34 RPC/RMI

R f rences dobjet

q Notion cl pour les objets r partis

c R f rence = moyen dacc s un objet distant

c Pointeur universel

c En g n ral une r f rence est opaque (son contenu ne peut pas tre

directement exploit ) ; elle nest utilisable que via un m canisme dappel

distance

q Contenu dune r f rence

cToutes les informations n cessaires pour atteindre physiquement lobjet

c Site de r sidence

c Num ro de port sur le site

c Localisation interne au serveur

c &

qExemples (cf d tails plus loin)

c En Java RMI : la r f rence est simplement le talon client (stub)

c En CORBA : format de r f rence sp cifi (IOR : Interoperable Object

Reference)

c En DCOM : format propri taire

35 RPC/RMI

Des RPCs aux RMIsDiff rences (suite)

q Autres caract ristiques des RMIs

c ramasse-miette r parti (Distributed Garbage Collector)

c int gration des exceptions

c chargement dynamique de byte code (codebase)

c aspect s curit , applets, persistance, proxy, serveur http

36 RPC/RMI

Java RMI mode de communication

q Appel synchrone de la m thode distante

c client bloqu tout le temps de l'appel distant

c 1 thread par client c t serveur

qAppel asynchrone

c utilisation explicite d'un thread c t client !

q Appels concurrents c t serveur

c exclusion mutuelle avec le mot clef synchronized

37 RPC/RMI

Java RMI --Principe

M me sch ma que RPC

Le programmeur fournit:

c Description(s) d'interface (en Java)

c Les objets r alisant les interfaces

c Le programme du serveur, instanciant ces objets

c Le programme du client, invoquant ces objets

c L'environnement Java fournit

Un g n rateur de talons nomm rmic (dans 1.4, inutile dans 1.5)

Un service de noms (rmiregistry)

Un middleware pour l'invocation distance (ens. de classes).

c La facult dex cuter du code g n r ailleurs

38 RPC/RMI

Java RMI Architecture logique

Client

Serveur

Invocation

de la

m thode

distante

Talon

client

Naming

TCP/IP

Objet

distant

Talon

serveur

Naming

TCP/IP

39

ENSI

Syst mes et applications r partis

La couche des r f rences distantes --Naming

qRemote reference Layer

c Permet dobtenir une r f rence dobjet distribu partir de

la r f rence locale au stub.

qPlusieurs protocoles dinvocation possibles :

cInvocation point point (Unicast)

cInvocation vers des groupes de r plication (Multicast)

qStrat gie de reconnexion (si un objet devient

inaccessible)

qDeux composantes coop rantes :

cla composante c t client (client-side)

cla composante c t serveur (server-side)

qTransmission de donn es entre couches transport par

une connexion orient e flot

40

ENSI

Syst mes et applications r partis

Les amorces (stub/skeleton)

qElles assurent le r le dadaptateurs pour le transport des appels

distants.

qElles r alisent les appels sur la couche r seau.

qElles r alisent lassemblage et le d sassemblage des param tres

(marshalling, unmarshalling).

qUne r f rence dobjets distribu s correspond une r f rence

damorce.

41

ENSI

Syst mes et applications r partis

La souche serveur (skeleton)

qLa souche serveur :

cRe oit lappel par une m thode unique (aiguilleur)

cD sassemble 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

cAssemble les valeurs de retour ou les exceptions dans le flot de

sortie

42

ENSI

Syst mes et applications r partis

La souche client (stub)

qLa souche client repr sentant local de lobjet distribu

cInitie 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

43

ENSI

Syst mes et applications r partis

La couche transport

qElle r alise les connexions r seaux bas es sur les flots entre les JVMs.

qLa couche transport de Java-RMI effectue :

cMise en place, gestion, surveillance de la connexion

cEcoute des appels arrivants

cMaintien dune table dobjets distants pour lespace dadressage

cLocalisation du dispatcher pour la cible dun appel distant et transmission

de la connexion

qElle emploie un protocole de communication propri taire (JRMP : Java Remote

Method Protocol) bas sur TCP/IP.

Principe sch matique des RMIs

objet client

objet serveur

Talon

client

Talon

serveur

Syst me de communication

tat

Methode_1

.

.

Methode_n

r f rence

appel

44

Java RMI

Mode op ratoire c t serveur

rmiregistry

Naming

Stub

Serveur

Skeleton

JVM Client

JVM Serveur

Client

45

Java RMI

Mode op ratoire c t serveur

q0- Cr ation de lobjet-serveur.

q1 - L'objet serveur s'enregistre aupr s du Naming de sa

JVM (m thode rebind)

q2 - Lobjet skeleton est cr , celui-ci cr e le port de

communication et maintient une r f rence vers l'objet

serveur.

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

communication utilis aupr s du serveur de noms

(rmiregistry).

qLe serveur de noms est pr t fournir des r f rences

sur lobjet-serveur

46

Advertisement

Java RMI --Mode op ratoire c t client

rmiregistry

Naming

Naming

Client

Stub

Skeleton

JVM Client

47

Serveur

JVM Serveur

Java RMI --Mode op ratoire c t client

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

serveur sur le host-serveur (m thode lookup)

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

aupr s de la rmiregistry

q6 Le naming installe lobjet Stub sur le poste client et

q7 - retourne sa r f rence au client.

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

Stub

48

Java RMI -- Manuel d'utilisation (1/3)

1)Codage

cdescription de linterface du service

Ici pas dIDL s par : Java sert dIDL

c criture du code du serveur qui implante linterface

c criture du client qui appelle le serveur

2)Compilation

ccompilation des sources serveur (javac)

ccr ation des Stub et Skeleton par le g n rateur rmic (automatique

partir de JDK 5.0)

3)Activation

clancement du serveur de noms (rmiregistry)

une

r f rence distante

L'acc s

java.rmi.registry.Registry)

chez

le

client

(par

clancement du serveur

clancement du client

49

Java RMI -- Manuel d'utilisation (2/3)

50

Java RMI --Manuel d'utilisation (3/3)

qD finition de l'interface de l'objet r parti

cLinterface de lobjet distant doit : "extends java.rmi.Remote"

cLes m thodes (+ exceptions): "throws java.rmi.RemoteException"

cParam tres s rialisables : "implements Serializable "

qEcrire une impl mentation de l'objet serveur

cclasse : tend une des sous-classes de java.rmi.server.RemoteServer

comme java.rmi.server.UnicastRemoteObject

cPas de sp cialisation et le constructeur doit ex cuter l'instruction suivante

: UnicastRemoteObject.exportObject(this);

q5 Packages

cjava.rmi : pour acc der des objets distants

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

cjava.rmi.registry: li la localisation et au nommage d objets distants

cjava.rmi.dgc: ramasse-miettes pour les objets distants

cjava.rmi.activation support pour lactivation dobjets distants.

51

Java RMI Les exceptions

qToutes

les m thodes de

linterface, consid r e, peuvent

d clencher une exception du type RemoteException.

qCette exception est lev e :

c si connexion refus e lh te distant, ou bien

c si lobjet nexiste plus, ou encore

c sil y a un probl me lors de lassemblage ou le D sassemblage.

52

Hi rarchie de classes Java

53

54

ENSI

Syst mes et applications r partis

Exportation de l'objet

Pour exporter un objet :

qUtilisation de la classe UnicastRemoteObject

cL'objet reste alors actif et accessible en permanence

cSi la JVM dans laquelle il s'ex cute est arr t e, l'objet dispara t et sa

r f rence galement.

qVariante possible : Activatable

cServeurs d marrables par le syst me (que quand il est sollicit )

cObjet/Service persistant (non li s la dur e de vie dun processus)

c Les constructeurs proposent de d finir un port sur lequel sera

export le service. Sinon un port quelconque sera choisi.

cPlus complexe utiliser

55

ENSI

Syst mes et applications r partis

La classe UnicastRemoteObject (1/3)

qServeurs d marr s explicitement

qUtilise des communications TCP

qPour des comm. P2P entre processus actifs

qUnicast : l'objet de la classe impl mentant l'interface n'existe qu'un en

seul exemplaire sur une seule machine

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

56

ENSI

Syst mes et applications r partis

La classe UnicastRemoteObject (2/3)

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

57

ENSI

Syst mes et applications r partis

La classe UnicastRemoteObject (3/3)

qLa classe abstraite RemoteObject red finit plusieurs m thodes de

Object et en ajoute pour les objets distants

c hashCode, equals, toString

cgetRef, toStub, writeObject, readObject

qLa classe abstraite RemoteServer d finit des m thodes communes

tous les serveurs

c unexportObject, getClientHost, &

qLa classe UnicastRemoteObject impl mente les objets distants non

r pliqu s (mono-serveur)

cexportObject, &

58

ENSI

Syst mes et applications r partis

La classe Activatable

qJDK1.2 introduit

cun nouveau package java.rmi.activation

un objet activable doit d river de la classe Activatable

cun d mon RMI rmid

qui active les objets la demande ou au reboot de la machine

qInfo : jdk1.2.2\docs\guide\rmi\activation.html

qLa classe doit tendre Java.rmi.activation.Activatable et impl menter

linterface distante

qLa classe doit d clarer un constructeur avec 2 arguments

java.rmi.activation.ActivationID, java.rmi.MarshalledObject

59

ENSI

Syst mes et applications r partis

Le service de nommage

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

crmi://<host_name>[:port]/

cLe host_name est, par d faut, le localhost

cLe port de liaison est optionnel (par d faut, le port TCP 1099)

d fini (ou d finir) dans /etc/services : rmi 1099/tcp

qLa classe Naming encaspule le dialogue avec plusieurs objets serveur de liaison

cPeut utiliser un ou plusieurs registry par application distribu e

cOn doit enregistrer un objet sur un registry local

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

60

ENSI

Syst mes et applications r partis

Le service de nommage

qLes objets serveur de liaison r alise la correspondance nom avec stub:

cInterface dun objet serveur de liaison

cImpl mentation par d faut de lobjet serveur de liaison

qLa classe LocateRegistry

clocalise ou active un objet serveur de liaison

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

cM 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 number

61

ENSI

Syst mes et applications r partis

Le service de nommage

62

ENSI

Syst mes et applications r partis

La notion dinterface

qLinterface constitue le contrat (abstrait) liant objets serveurs et objets

clients Elle est partag e par le client et le serveur.

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

dappel pour les objets clients

celle 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.

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

classe java.rmi.Remote

Java RMI : criture de linterface

Advertisement

qM mes principes de base que pour linterface dun objet local

qPrincipales diff rences

clinterface distante doit tre publique

clinterface distante doit tendre linterface java.rmi.Remote

cchaque m thode doit d clarer au moins lexception

java.rmi.RemoteException

ctout objet distant pass en param tre doit tre d clar comme une

interface (passage de la r f rence de lobjet)

ctout objet local pass en param tre doit tre s rialisable

63

Exemple de client/serveur en Java RMI

Cas simple :

q Le client conna t le nom du serveur

q La rmiregistry est lanc e sur le serveur

q Le client passe des arguments de base

64

Java RMI

Exemple : Interface Hello.java

// Hello.java

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Hello extends Remote {

String sayHello() throws RemoteException;

Description

de linterface

}

65

Java RMI : criture du serveur

qServeur = la classe qui impl mente linterface

csp cifier les interfaces distantes qui doivent tre impl ment es

locaux pass s par copie (ils doivent

objets

linterface java.io.serialisable)

objets distants pass s par r f rence (actuellement r f rence

un stub)

impl menter

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)

66

67

ENSI

Syst mes et applications r partis

Java RMI : criture du serveur

qLobjet distant servi peut tre dune sous classe de la classe

impl mentant linterface

qLe serveur peut cr er et enregistrer plusieurs objets appartenant

une ou plusieurs classes

qLenregistrement de lobjet distant se fait dans rmiregistry (un ou

+ieurs).

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

cArr t des objets UnicastRemoteObject

public static void Naming.unbind(Stringname)

public

static

UnicastRemoteObject.unexportObject(Remote, boolean force)

boolean

Java RMI

Exemple : Impl mentation de lobjet distant

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class HelloObj extends UnicastRemoteObject implements Hello {

fichier HelloObj.java

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

}

}

68

Java RMI

Exemple : Impl mentation de lobjet distant

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class HelloObj implements Hello {

private String msg;

fichier HelloObj.java

R alisation

du serveur

(autre approche)

// 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;

}

}

69

Java RMI

Exemple : Serveur

import java.rmi.*;

public class HelloServeur {

fichier HelloServeur.java

R alisation du

Serveur dobjets

public static void main(String args[]) {

try {

// Cr e une instance de lobjet serveur d marrage du serveur

HelloObj obj = new HelloObj("HelloServeur");

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

Naming.rebind("rmi://localhost:1099/HelloServeur", obj);

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

} catch (Exception exc) {& }

}

}

ATTENTION: dans cet exemple le serveur de nom doit tre activ avant la

cr ation du serveur.

70

71

Java RMI

Activation du serveur de nom par le serveur

HelloServeur.java

public static void main(String args[]) {

int port; String URL;

fichier

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;

}

R alisation du

serveur

(autre approche)

try {

// Cr ation du serveur de nom - rmiregistry

Registry registry = LocateRegistry.createRegistry(port);

// Cr ation dune instance de lobjet serveur

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

// Calcul de lURL du serveur

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

Hello.class.getName();

registry.rebind(URL, obj);

} catch (Exception exc) { ...

72

Java RMI

Exemple : Client

import java.rmi.Naming;

public class HelloClient {

public static void main(String args[]) {

try {

fichier HelloClient.java

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

Hello obj = (Hello) Naming.lookup("rmi://LocalHost/HelloServeur");

// 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

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

cLe talon local c t client qui sert de proxy pour l'acc s l'instance de

HelloObj c t serveur

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("rmi://LocalHost/HelloServeur");

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 e) {System.out.println("HelloClient err: " + e.getMessage());

R alisation

du

client

e.printStackTrace(); }

}}

73

Java RMI

Compilation

qCompilation de linterface, du serveur et du client

cjavac Hello.java HelloObj.java HelloServeur.java HelloClient.java

qG n ration des talo...