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