Vous êtes sur la page 1sur 81

Introduction aux

systmes et applications rpartis

Sacha Krakowiak
Universit Joseph Fourier
Projet Sardes (INRIA et IMAG-LSR)
http://sardes.inrialpes.fr/~krakowia
Voir aussi Bureau Virtuel et placard

Pourquoi des applications rparties ?


La rpartition est un tat de fait pour un nombre important dapplications

Besoins propres des applications


Intgration dapplications existantes initialement spares
Intgration massive de ressources

Grilles de calcul, gestion de donnes


Pntration de linformatique dans des domaines nouveaux
dapplication
Intgration dobjets du monde rel (informatique omniprsente
(ubiquitous computing))
Surveillance et commande dinstallations

Possibilits techniques
Cot et performances des machines et des communications
Interconnexion gnralise
Exemple 1 : interpntration informatique-tlcom-tlvision
Exemple 2 : Rseaux de capteurs
2005-2006, S. Krakowiak

Caractristiques des systmes rpartis (1)

Dfinition dun systme rparti


Ensemble compos dlments relis par un systme de
communication ; les lments ont des fonctions de traitement
(processeurs), de stockage (mmoire), de relation avec le monde
extrieur (capteurs, actionneurs)
Les diffrents lments du systme ne fonctionnent pas
indpendament mais collaborent une ou plusieurs tches
communes. Consquence : une partie au moins de ltat global du
systme est partage entre plusieurs lments (sinon, on aurait un
fonctionnement indpendant)
De manire plus prcise : toute expression de la spcification du systme
fait intervenir plusieurs lments (exemple : prserver un invariant global,
mettre des interfaces en correspondance, etc.)

2005-2006, S. Krakowiak

Caractristiques des systmes rpartis (2)

Proprits souhaites
Le systme doit pouvoir fonctionner (au moins de faon dgrade)
mme en cas de dfaillance de certains de ses lments
Le systme doit pouvoir rsister des perturbations du systme de
communication (perte de messages, dconnexion temporaire,
performances dgrades)
Le systme doit pouvoir rsister des attaques contre sa scurit
(violation de la confidentialit, de lintgrit, usage indu de
ressources, dni de service)

Consquences
Des dcisions doivent pouvoir tre prises localement, et dans une
situation dincertitude, ( sans connaissance dun tat global,
dailleurs difficile dfinir)

2005-2006, S. Krakowiak

Caractristiques des systmes rpartis (3)


Difficults
Proprit dasynchronisme du systme de communication (pas de
borne suprieure stricte pour le temps de transmission dun
message
Consquence : difficult pour dtecter les dfaillances
Dynamisme (la composition du systme change en permanence)
Consquences : difficult pour dfinir un tat global
Difficult pour administrer le systme
Grande taille (nombre de composants, dutilisateurs, dispersion
gographique)
Consquence : la capacit de croissance (scalability) est une
proprit importante, mais difficile raliser
Malgr ces difficults, des grands systmes rpartis existent et sont
largement utiliss
le DNS (Domain Name System)
le World Wide Web
2005-2006, S. Krakowiak

Systmes et applications rpartis


Distinction entre systme et application
Systme : gestion des ressources communes et de linfrastructure,
li de manire troite au matriel sous-jacent
Systme dexploitation : gestion de chaque lment
Systme de communication : change dinformation entre les
lments
Caractristiques communes : cachent la complexit du
matriel et des communications, fournissent des services
communs de plus haut niveau dabstraction
Application : rponse un problme spcifique, fourniture de
services ses utilisateurs (qui peuvent tre dautres applications).
Utilise les services gnraux fournis par le systme
La distinction nest pas toujours vidente, car certaines
applications peuvent directement travailler bas niveau (au contact
du matriel). Exemple : systmes embarqus, rseaux de capteurs
2005-2006, S. Krakowiak

Services et interfaces

Dfinition
Un systme est un ensemble de composants (au sens non technique du
terme) qui interagissent
Un service est un comportement dfini par contrat, qui peut tre
implment et fourni par un composant pour tre utilis par un autre
composant, sur la base exclusive du contrat (*)

Mise en uvre
Un service est accessible via une ou plusieurs interfaces
Une interface dcrit linteraction entre client et fournisseur du service
Point de vue oprationnel : dfinition des oprations et structures de
donnes qui concourent la ralisation du service
Point de vue contractuel : dfinition du contrat entre client et
fournisseur
(*) Bieber and Carpenter, Introduction to Service-Oriented Programming, http://www.openwings.org

2005-2006, S. Krakowiak

Dfinitions dinterfaces (1)

contrat

client

conformit

fournisseur

int. requise

int. fournie

La fourniture dun service met en jeu deux interfaces


Interface requise (ct client)
Interface fournie (ct fournisseur )
Le contrat spcifie la compatibilit (conformit) entre ces interfaces
Au del de linterface, chaque partie est une bote noire pour
lautre (principe dencapsulation)
Consquence : client ou fournisseur peuvent tre remplacs du
moment que le composant remplaant respecte le contrat (est
conforme)
2005-2006, S. Krakowiak

Dfinitions dinterfaces (2)

Partie oprationnelle
Interface Definition Language (IDL)
Pas de standard, mais sappuie sur un langage existant
IDL CORBA sur C++
Java et C# dfinissent leur propre IDL

Partie contractuelle
Plusieurs niveaux de contrats
Sur la forme : spcification de types -> conformit syntaxique
Sur le comportement (1 mthode) : assertions -> conformit
smantique
Sur les interactions entre mthodes : synchronisation
Sur les aspects non fonctionnels (performances, etc.) : contrats de
QoS

2005-2006, S. Krakowiak

Quelques classes dapplications rparties

Coordination dactivits
Systmes flots de donnes
(workflow)

Systmes agents

Avionique, etc.

Communication et partage
dinformation
Bibliothques virtuelles
Collecticiels
dition cooprative

Applications temps rel


Contrle et surveillance de
procds
et dinstallations
Localisation de mobiles
Rseaux de capteurs

Nouveaux services grand public


Presse lectronique

Tlconfrence

Tlvision interactive

Ingnierie concourante

Commerce lectronique

2005-2006, S. Krakowiak

10

Organisation des applications rparties

Client-serveur
Excution synchrone requte-rponse ; base : RPC
Extensions : serveurs cooprants ; service discontinu ;

Objets partags

(organisations diverses)

Flots de communication
Discrets (messages) ou continus (multimdia)

Code mobile
Machine virtuelle (masque lhtrognit)
Problmes de scurit

Agents
Programme agissant pour le compte dune entit cliente
Agents fixes ou mobiles, statiques ou adaptatifs
Coopration entre agents

2005-2006, S. Krakowiak

11

Organisation des applications rparties


Un schma commun : le middleware (intergiciel)

Middleware : couche de logiciel (rparti) destine


masquer lhtrognit des machines et systmes
masquer la rpartition des traitements et donnes
fournir une interface commode aux applications (modle de
programmation + API)

Applications
Interface
Middleware
Systme de
communication
Site 1

2005-2006, S. Krakowiak

Site 2

12

Organisation des applications rparties


Importance de la normalisation

Le dveloppement du middleware impose une

normalisation des interfaces


Logiciel de base
Domaines spcifiques dapplications

Nombreux consortiums et standards


Open Group (ex-OSF) : systmes, outils de base
Web Consortium (W3C) : Web et outils associs
OMG : objets rpartis (CORBA, IIOP, etc.)
ODMG : bases de donnes objets
ODP : organisation ouverte des applications
Workflow Management Coalition : applications flots de donnes
...

2005-2006, S. Krakowiak

13

Construction dapplications rparties


Un outil de structuration : le mandataire (proxy)

Initialement : ralisation de lappel de procdure distance

client

serveur
talon client

talon serveur

Fonction : ralisation de la communication


synchronisation
adaptation de protocole
conversion de donnes
volution ultrieure
fonctions propres lapplication
gestion dobjets
scurit
adaptation des conditions variables de fonctionnement

2005-2006, S. Krakowiak

14

Utilisation de proxy pour ladaptation :


applications pour clients lgers mobiles

Objectif : porter une application rpartie complexe sur des clients lgers (PDAs)
Mthode : reporter les fonctions coteuses dans un ensemble de proxies

Internet

serveurs

proxies
Fonctions des proxies :
filtrage et compression (avec perte) des images
filtrage de texte (HTML)
agrgation de rponses aux requtes
gestion de caches
Programmation indpendante du serveur, adapte aux caractristiques des clients
2005-2006, S. Krakowiak

15

Une autre construction de base : lintercepteur


Fonction
Interposition dun traitement entre client et serveur
Proprit : doit tre transparent (ne pas modifier linterface)

Avant

client

serveur
interface I

Aprs

intercepteur

client
interface I

serveur

interface I

Effets possibles : modifier requte, modifier rponse, ajouter traitement,


rediriger requte, prlever mesures, etc.
2005-2006, S. Krakowiak

16

Plan du cours
Premire partie : Outils de construction dapplications rparties

Rappels (client-serveur, objets rpartis, RMI)

CORBA, principes, utilisation, fonctionnement, services

Programmation par vnements, bus logiciels, MOM


Composants : J2EE, EJB, composants CORBA,

Coordination de services : Web services

Deuxime partie : Services systme

Tolrance aux fautes : client-serveur fiable, techniques de groupe

Scurit : confidentialit, authentification, pare-feux, code mobile

Gestion rpartie de donnes : principes, exemples (SGF rpartis, P2P)

Pratique :
TD (4 sances)
Exprimentation avec CORBA (2 sances)
Projet ECOM (projet dintgration)
2005-2006, S. Krakowiak

17

Travaux Dirigs et Travaux Pratiques


C1-C2

C3-C4

C5-TD1

C6-C7 C8-TD2

C9-C10

TP1

C11-TD3

C12-TD4

TP2

TD-1 : Communication asynchrone, messages


Applications : messagerie, intgration dapplications

TD-2 : Tolrance aux fautes


Applications : estimations de disponibilit, protocoles de groupe et
duplication

TD-3 : Scurit
Application : vote sur lInternet (spcifications, mise en uvre)

TD-4 : Donnes rparties


Applications : systmes P2P, recherche de services

TP 1 et 2
Dveloppement dune application en CORBA

2005-2006, S. Krakowiak

18

Sur le choix des outils


1990

1995

2000

2005
intgration dapplications

objets rpartis

composants rpartis
Java
EJB
J2EE JMS
...

Corba
DCOM COM+

2005-2006, S. Krakowiak

.NET
C#

OSGi
Web Services
Appli.mobiles

19

Rappels sur le modle Client-Serveur

Le client demande lexcution dun service


Le serveur ralise le service
Client et serveur sont (en gnral, pas ncessairement)

localiss sur deux machines distinctes


Indpendance interface-ralisation

Interface (spcification du service)


requte
Client

2005-2006, S. Krakowiak

rponse

Serveur

20

Modle Client-Serveur : fonctionnement

Communication par messages (plutt que par partage


de donnes, mmoire ou fichiers)
Requte : paramtres dappel, spcification du service requis
Rponse : rsultats, indicateur ventuel dexcution ou
derreur
Communication synchrone (dans le modle de base) : le
client est bloqu en attente de la rponse

requte
excution
service
Client

2005-2006, S. Krakowiak

rponse

Serveur

21

Modle Client-Serveur : Intrt

Structuration
fonctions bien identifies
sparation interface du service - ralisation
client et serveur peuvent tre modifis (remplacs)
indpendamment

Protection
client et serveur sexcutent dans des domaines de
protection diffrents

Gestion des ressources


le serveur peut tre partag entre de nombreux clients
En contrepartie, il doit assurer la gestion des ressources
partages
ces considrations sont indpendantes de la rpartition
2005-2006, S. Krakowiak

22

Modle Client-Serveur
Exemples

Serveur de fichiers (AFS, NFS)


Serveur dimpression (lpd)
Serveur de calcul
Serveur dapplication (spcifique lapplication)
Serveur de bases de donnes
Serveur de temps
Serveur de noms (annuaire des services)

2005-2006, S. Krakowiak

23

Accs un service

Annuaire des services

<description, rfrence>

3. recherche

2. enregistrement

description

1. cration

5. accs
rfrence
point daccs
local

Demandeur de service

2005-2006, S. Krakowiak

4. liaison

Reprsentation
concrte du service

Fournisseur de service

24

Mise en uvre du schma client-serveur

Par des oprations de bas niveau


Utilisation de primitives du systme de communication
Exemple : sockets
Mode non connect (UDP)
Mode connect (TCP)

Par des oprations de haut niveau


Utilisation dun middleware spcialis
Contexte : langage de programmation
Appel de procdure distance
Contexte : objets rpartis
Appel de mthodes, cration dobjets distance

2005-2006, S. Krakowiak

25

Gnralisations du schma client-serveur (1)

Les notions de client et de serveur sont relatives


Un serveur peut faire appel dautres serveurs dont il est client
Exemple usuel : traitement utilisant une base de donnes
Serveur
Fonction : application + fonctions de service

(ex : transactions, scurit)

Client (utilisateur humain)


Fonction : prsentation
(interface graphique)

Base de donnes
Fonction :
accs aux donnes

Ce cas sera trait en dtail plus tard


Architecture 3 niveaux (3-tier architecture)
2005-2006, S. Krakowiak

26

Gnralisation du schma client-serveur (2)

Clients et serveurs jouent un rle symtrique


Tout site joue le rle de serveur pour les autres
Certaines fonctions (service de noms) peuvent ventuellement tre
centralises

Systmes pair pair (Peer to Peer, P2P)


Utilistion : partage de donnes grande chelle
Initialement : partage (illgal) de fichiers (Napster, etc.)

Ce cas sera trait en dtail plus tard


2005-2006, S. Krakowiak

27

Construction dapplications rparties base


dobjets

S. Krakowiak
Universit Joseph Fourier
Projet Sardes (INRIA et IMAG-LSR)
http://sardes.inrialpes.fr/people/krakowia

Plan

Introduction aux objets rpartis


Rappel rapide sur Java RMI

Prsentation gnrale de CORBA


Motivations et historique
Architecture gnrale de CORBA
Composants de larchitecture
Dsignation des objets et mcanismes dappel
Langage de description dinterfaces

Exemple dtaill de construction dune application avec CORBA

Aspects techniques
Appel dynamique et rfrentiel des interfaces
Rfrences dobjets
Adaptateur dobjets et rfrentiel des implmentations

Services

2005-2006, S. Krakowiak

29

Rappel des conclusions sur lappel de procdure distance


Avantages
Abstraction (les dtails de la communication sont cachs)
Intgration dans un langage : facilite portabilit, mise au point
Outils de gnration, facilitent la mise en uvre

Limitations
La structure de lapplication est statique : pas de cration dynamique
de serveur, pas de possibilit de redploiement entre sites
Pas de passage des paramtres par rfrence
La communication est rduite un schma synchrone
La persistance des donnes nest pas assure (il faut la raliser
explicitement par sauvegarde des donnes dans des fichiers)
Des mcanismes plus volus visent remdier ces limitations
Objets rpartis (ex : Java RMI, CORBA) pour les 2 premires
Bus messages (Message Oriented Middleware)
Composants rpartis (ex : EJB, Corba CCM, .Net)
2005-2006, S. Krakowiak

30

Intrt des objets pour la construction dapplications rparties

Encapsulation
Linterface (mthodes + attributs) est la seule voie daccs ltat
interne, non directement accessible

Classes et instances
Mcanismes de gnration dexemplaires conformes un mme
modle

Hritage
Mcanisme de spcialisation : facilite rcupration et rutilisation de
lexistant

Polymorphisme
Mises en uvre diverses des fonctions dune interface
Remplacement dun objet par un autre si interfaces compatibles
Facilite lvolution et ladaptation des applications

2005-2006, S. Krakowiak

31

Extension du RPC aux objets (1)

Appel de procdure vs appel de mthode sur un objet

Exemple : insrer une entre dans un annuaire

Appel de procdure
inserer (nom, numero)

excuter
insrer

client

inserer (nom, numero)


dans annuaire_1
[]
inserer (nom, numero)
dans annuaire_2
client
2005-2006, S. Krakowiak

serveur
Appel dobjet

exec.
insrer

annuaire_1 annuaire_2
exec.
insrer

Appel dobjet

serveur
32

Extension du RPC aux objets (2)

Phase pralable : cration dinstances dune classe dobjects


Notion de fabrique (factory)

crer (annuaire_1, params)


crer (annuaire_2, params)

exec.
crer

ref. sur annuaire_1


ref. sur annuaire_2

client

fabrique
dannuaires

new

new
annuaire_1

annuaire_2

Notion de rfrence dobjet


Contient tout ce qui est ncessaire
pour atteindre lobjet distant
Localisation, protocole daccs
serveur

2005-2006, S. Krakowiak

33

Rfrences dobjet

Notion cl pour les objets rpartis


Rfrence = moyen daccs un objet distant
En gnral une rfrence est opaque (son contenu ne peut pas tre directement
exploit) ; elle nest utilisable que via un mcanisme dappel distance

Contenu dune rfrence


Toutes les informations ncessaires pour atteindre physiquement lobjet
Site de rsidence
Numro de porte sur le site
Localisation interne au serveur

Exemples (cf dtails plus loin)


En Java RMI : la rfrence est simplement le talon client (stub)
En CORBA : format de rfrence spcifi (IOR : Interoperable Object Reference)
En DCOM : format propritaire

2005-2006, S. Krakowiak

34

Java RMI (Remote Method Invocation)


Motivation : construction dapplications rparties avec Java
Appel de mthode au lieu dappel de procdure

Principe : mme schma que RPC


Le programmeur fournit
Une (ou plusieurs) description(s) dinterface
Ici pas dIDL spar : Java sert dIDL
Le programme du serveur
Objets ralisant les interfaces
Serveur
Le programme du client
Lenvironnement Java fournit
Un gnrateur de talons (rmic)
Un service de noms (Object Registry)

voir http://java.sun.com/docs/books/tutorial/rmi/

2005-2006, S. Krakowiak

35

Java RMI : rgles dusage (1/2)


Interface
Linterface dun objet distant (Remote) est celle dun objet Java, avec
quelques rgles dusage :
Linterface distante doit tre publique
Linterface distante doit tendre linterface java.rmi.Remote
Chaque mthode doit dclarer au moins lexception
java.rmi.RemoteException

Passage dobjets en paramtre


Les objets locaux sont passs par valeur (copie) et doivent tre
srialisables (tendent linterface java.io.Serializable)
Les objets distants sont passs par rfrence et sont dsigns par
leur interface

2005-2006, S. Krakowiak

36

Java RMI : rgles dusage (2/2)

Ralisation des classes distantes (Remote)


Une classe distante doit implmenter une interface elle-mme
distante (Remote)
Une classe distante doit tendre la classe
java.rmi.server.UnicastRemoteObject (dautres possibilits
existent)
Une classe distante peut aussi avoir des mthodes appelables
seulement localement (ne font pas partie de son interface Remote)

2005-2006, S. Krakowiak

37

Java RMI : rgles dcriture du serveur

Un serveur est une classe qui implmente

linterface de lobjet distant


Spcifier les rfrences distantes qui doivent tre
implmentes (objets passs en paramtres)
Dfinir le constructeur de lobjet distant
Fournir la ralisation des mthodes appelables distance
Crer et installer le gestionnaire de scurit
Crer au moins une instance de la classe serveur
Enregistrer au moins une instance dans le serveur de noms

2005-2006, S. Krakowiak

38

Java RMI : exemple (Hello world)

Classe ralisant linterface


Dfinition dinterface
import java.rmi.*;
public interface HelloInterface
extends Remote{
/* mthode qui imprime un message
prdfini dans lobjet appel */
public String sayHello ()
throws java.rmi.RemoteException;
}

import java.rmi.*;
import java.rmi.server.*;
public class Hello
extends java.rmi.server.UnicastRemoteObject
implements HelloInterface {
private String message;
/* le constructeur */
public Hello (String s)
throws RemoteException
{
message = s ;
};
/* limplmentation de la mthode */
public String sayHello ()
throws RemoteException
{
return message ;
};
}

2005-2006, S. Krakowiak

39

Java RMI : exemple (Hello world)


Programme du client
import java.rmi.*;
public class HelloClient {
public static void main (String [ ] argv) {
/* lancer SecurityManager */
System.setSecurityManager (
new RMISecurityManager ()) ;
try {
/* trouver une rfrence vers lobjet distant */
HelloInterface hello =
(HelloInterface) Naming.lookup
("rmi://goedel.imag.fr/Hello1") ;
/* appel de mthode distance */
System.out.println (hello.sayHello()) ;
} catch (Exception e) {
System.out.println
("Erreur client : " + e) ;
}
}
}
2005-2006, S. Krakowiak

Programme du serveur
import java.rmi.*;
public class HelloServer {
public static void main (String [ ] argv) {

/* lancer SecurityManager */
System.setSecurityManager (
new RMISecurityManager ()) ;
try {
/* crer une instance de la classe Hello et
lenregistrer dans le serveur de noms */
Naming.rebind ("Hello1,
new Hello ("Hello world !")) ;
System.out.println ("Serveur prt.") ;
} catch (Exception e) {
System.out.println
("Erreur serveur : " + e) ;
}
}
}

40

Java RMI : tapes de la mise en uvre (1/2)

Compilation
Sur la machine serveur : compiler les interfaces et les programmes du serveur
javac HelloInterface.java Hello.java HelloServer.java
Sur la machine serveur : crer les talons client et serveur pour les objets appels distance
( partir de leurs interfaces) - ici une seule classe, Hello
rmic -keep Hello
N.B. cette commande construit et compile les talons client Hello_Stub.java et serveur
Hello_Skel.java. Loption -keep permet de garder les sources de ces talons
Sur la machine client : compiler les interfaces et le programme client
javac HelloInterface.java HelloClient.java
N.B. il est prfrable de regrouper dans un fichier .jar les interfaces des objets appels
distance, ce qui permet de les rutiliser pour le serveur et le client - voir TP

2005-2006, S. Krakowiak

41

Java RMI : tapes de la mise en uvre (1/2)


Excution
Lancer le serveur de noms (sur la machine serveur)
rmiregistry &
N.B. Par dfaut, le registry coute sur le port 1099. Si on veut le placer sur un autre port, il suffit
de lindiquer, mais il faut aussi modifier les URL en consquence :
rmi://<serveur>:<port>/<rpertoire>

Lancer le serveur
java -Djava.rmi.server.codebase=http://goedel.imag.fr/<rpertoire des classes>
-Djava.security.policy=java.policy HelloServer &
N.B. Signification des proprits (option -D) :
Le contenu du fichier java.policy spcifie la politique de scurit, cf plus loin.
LURL donne par codebase sert au chargement de classes par le client

Lancer le client
java -Djava.security.policy=java.policy HelloClient
N.B. Le talon client sera charg par le client depuis le site du serveur, spcifi dans loption
codebase lors du lancement du serveur

2005-2006, S. Krakowiak

42

Scurit
Motivations
La scurit est importante lorsquil y a tlchargement de code (il peut
tre dangereux dexcuter le code charg depuis un site distant)

Mise en uvre
La politique de scurit spcifie les actions autorises, en particulier
sur les sockets
Exemple de contenu du fichier java.policy
grant {
permission java.net.SocketPermission "*:1024-65535",
"connect,accept";
permission java.net.SocketPermission "*:80", "connect";
};
Permet dutiliser les sockets comme indiqu. Toute autre utilisation
est interdite
2005-2006, S. Krakowiak

43

Fonctionnement densemble de Java RMI

registry
3. rechercher
objet

Site
serveur

Hello_Stub
1. crer stub
2. enregistrer stub

HelloServer

HelloClient

Hello

4. tlcharger
stub

Hello_Stub
Site
client

2005-2006, S. Krakowiak

Hello_Skel

5. appel

44

Fabrique dobjets (Factory)


Motivation
Permettre au client de construire des instances multiples dune classe C sur
le site serveur
Le new nest pas utilisable tel quel (car il ne gre que la mmoire locale,
celle du client)
Solution : appel dun objet FabriqueC, qui cre localement (sur le serveur)
les instances de C (en utilisant new C)

Exemple

public interface Annuaire extends Remote{


public String titre;
public boolean inserer(String nom, Info info)
throws RemoteException, ExisteDeja;
public boolean supprimer(String nom)
throws RemoteException, PasTrouve;
public Info rechercher(String nom)
throws RemoteException, PasTrouve;
}

2005-2006, S. Krakowiak

import java.rmi.*
public interface FabAnnuaire extends Remote{
public Annuaire newAnnuaire(String titre)
throws RemoteException ;
}
public class Info implements Serializable {
public String adresse;
public int num_tel ;
}
public class ExisteDeja extends Exception{} ;
public class PasTrouve extends Exception{} ;

45

Mise en uvre dune fabrique


public class AnnuaireImpl implements Annuaire
extends UnicastRemoteObject{
private String letitre;
public Annuaire(String titre) {
this.letitre=titre};
public String titre {return letitre};
public boolean inserer(String nom, Info info)
throws RemoteException, ExisteDeja{
};
public boolean supprimer(String nom)
throws RemoteException, PasTrouve{
};
public Info rechercher(String nom)
throws RemoteException, PasTrouve{
};
La classe annuaire
}
public class FabAnnuaireImpl implements FabAnnuaire
extends UnicastRemoteObject{
public FabAnnuaireImpl{};
public Annuaire newAnnuaire(String titre)
throws RemoteException {
return new AnnuaireImpl(titre)};
}
2005-2006, S. Krakowiak

import java.rmi.*;
public class Server {
public static void main (String [ ] argv)
{

/* lancer SecurityManager */
System.setSecurityManager (
new RMISecurityManager ()) ;
try {
Naming.rebind ("Fabrique,
new (FabAnnuaireImpl)) ;
System.out.println ("Serveur prt.") ;
} catch (Exception e) {
System.out.println
("Erreur serveur : " + e) ;
}
}
}

Le serveur

La classe fabrique
46

Utilisation de la fabrique
Programme client
import java.rmi.*;
public class HelloClient {
public static void main (String [ ] argv) {

/* utiliser les annuaires */


annuaireIMAG.inserer(, );
annuaireINRIA.inserer(, );
.

/* lancer SecurityManager */
System.setSecurityManager (
new RMISecurityManager ()) ;
try {

} catch (Exception e) {
System.out.println
("Erreur client : " + e) ;
}
}
}

/* trouver une rfrence vers la fabrique */


FabAbannuaire fabrique =
(FabAbannuaire ) Naming.lookup
("rmi://goedel.imag.fr/Fabrique") ;
/* crer un annuaire */
annuaireIMAG =fabrique.newAnnuaire("IMAG");
/* crer un autre annuaire */
annuaireINRIA=fabrique.newAnnuaire("INRIA");

2005-2006, S. Krakowiak

47

Fonctionnement densemble de la fabrique

rebind(fabrique,)

Serveur

Registry
fabrique = lookup()

crr fabrique
(new)

fabrique.newAnnuaire()

Client
rfrence de lannuaire
cr (annuaireIMAG, )

Annuaire
INRIA

Noter les deux manires


dobtenir une rfrence dobjet
distant
- par consultation du registry
- par cration via une fabrique

Fabrique
dannuaires

Annuaire
IMAG

Annuaire
UJF

annuaireINRIA.inserer()

annuaireIMAG rechercher()
2005-2006, S. Krakowiak

48

Passage dobjets en paramtre (1)

Deux cas possibles


Passage en paramtre dun objet local (sur la JVM de lobjet
appelant)
Passage par valeur : on transmet une copie de lobjet (plus
prcisment : une copie de lensemble ses variables dtat)
Pour cela lobjet doit tre srialisable (i.e. implmenter
linterface java.io.Serializable)
Exemple de lannuaire : le client transmet un objet de la classe
locale Info
Passage en paramtre dun objet non-local (hors de la JVM de
lobjet appelant, par ex. sur un site distant)
Passage par rfrence : on transmet une rfrence sur lobjet
(plus prcisment : un stub de lobjet). Le destinataire utilisera
ce stub pour appeler les mthodes de lobjet.
Exemple de lannuaire : le client passe un objet de type
Annuaire (localis sur le serveur distant)

2005-2006, S. Krakowiak

49

Passage dobjets en paramtre : illustration

repertoireCentral

Le stub est transmis en


paramtre la place de
lobjet distant annuaireIMAG

stub

Une copie srialise


de lobjet local info1
est transmise

stub

repertoireCentral.enregistrer(annuaireIMAG)
annuaireINRIA.inserer(nom1,info1)

stub

2005-2006, S. Krakowiak

annuaireINRIA

Fabrique

annuaireIMAG

stub

50

Passage dobjets en paramtre (2)

Notions sur les objets srialisables


Un objet srialisable (transmissible par valeur hors de sa JVM) doit
implmenter linterface java.io.Serializable. Celle-ci est rduite un
marqueur (pas de variables ni dinterface)
Les objets rfrencs dans un objet srialisable doivent aussi tre
srialisables
Comment rendre effectivement un objet srialisable ?
Pour les variables de types primitifs (int, boolean, ), rien faire
Pour les objets dont les champs sont constitus de telles variables :
rien faire
On peut liminer une variable de la reprsentation srialise en la
dclarant transient
Pour un champ non immdiatement srialisable (ex. : Array),il faut
fournir des mthodes readObject() et writeObject()
Exemples de srialisation : passage en paramtres, criture sur un fichier.
Le support de srialisation est un stream (flot) : classes
java.io.ObjectOutputStream et java.io.ObjectInputStream.

Pour des dtails techniques : voir javadoc de linterface Serializable et des classes
ObjectOutputStream et ObjectInputStream
2005-2006, S. Krakowiak

51

Notions sur le fonctionnement interne de Java RMI (1)

La classe UnicastRemoteObject

Rappel de la rgle dusage : une classe dobjets accessibles distance tend la classe
java.rmi.UnicastRemoteObject.

Le principale fonction de cette classe se manifeste lors de la cration dune instance de


lobjet.

public class AnnuaireImpl extends UnicastRemoteObject {}


AnnuaireImpl () {

// le constructeur dAnnuaireImpl appelle automatiquement


// le constructeur de la superclasse UnicastRemoteObject

monAnnuaire = new AnnuaireImpl () ;

Le constructeur de UnicastRemoteObject cre une instance de stub pour lobjet (en utilisant
la classe Annuaire_Stub engendre par rmic, et retourne ce stub comme rsultat de la
cration

Le contenu dun stub

Un stub contient essentiellement une variable ref de type RemoteRef qui contient la localisation de
lobjet (adresse IP, port)
Un appel de mthode se fait par appel de ref.invoke() qui utilise les sockets pour la communication

2005-2006, S. Krakowiak

52

Notions sur le fonctionnement interne de Java RMI (2)


Le serveur de noms (registry)
Classes utiles (fournies par java.rmi)
Naming : sert de reprsentant local du serveur de noms. Permet
dutiliser les mthodes bind(), rebind(), lookup(), unbind(), list()
LocateRegistry : permet de localiser un serveur de noms
(rmiregistry) et ventuellement den crer un. En gnral invisible
au client (appel en interne par Naming)

Prog. client
bind, unbind, rebind,
lookup, list

Naming

Registry
getRegistry

LocateRegistry
Site client

2005-2006, S. Krakowiak

renvoie une
rfrence de
lobjet registry
Site serveur

53

Appel en retour (callback)

Le problme
Raliser un appel du serveur vers le client

Intrt
Augmenter lasynchronisme
1) appel client-serveur avec retour immdiat (demande service)
2) rappel serveur-client quand le service est excut
Augmenter le dynamisme
Le serveur peut demander des informations complmentaires au
client en cours dexcution
Lexcution du service peut faire appel des services fournis par
le client
Exemple : traitement dexceptions

2005-2006, S. Krakowiak

54

Appel en retour : principe

Le client passe en paramtre au serveur lobjet rappeler

Le serveur excute un appel asynchrone sur cet objet

Client

Server

Serveur

crer
Servant
IServer

Callback

crer
run

doCallback
ICallback

2005-2006, S. Krakowiak

thread
spar
(pour servir clients multiples)
55

Appel en retour : ralisation interfaces des objets distants)

// les deux interfaces des objets appels distance (doivent tendre Remote)
import java.rmi.*;
public interface ICallback extends Remote {
// interface de lobjet callback
public void doCallback(String message) throws RemoteException;
}

import java.rmi.*;
// interface du serveur
public interface IServer extends Remote {
public void callMeBack(int time, String param,ICallback callback)
throws RemoteException;
}

2005-2006, S. Krakowiak

56

Appel en retour : ralisation (le servant)


import java.rmi.*;
public class Servant extends Thread {
private int time;
reoit lobjet callback en paramtre
private String param;
private ICallback callback;
public Servant(int time, String param, ICallback callback) {
// le constructeur
this.time = time;
this.param = param;
this.callback = callback;
}
public void run() {
// excution du servant comme thread spar
try {
Thread.sleep(1000*time);
// attend le dlai fix (time exprim en secondes)
} catch(InterruptedException e) { }
try {
callback.doCallback(param);
// excute l'appel en retour
} catch(RemoteException e) {
System.err.println("Echec appel en retour : "+e);
}
callback = null;
// nettoyage
System.gc();
}
}
2005-2006, S. Krakowiak

57

Appel en retour : ralisation (le serveur)


import java.rmi.*;
import java.rmi.server.*;
public class Server extends UnicastRemoteObject implements IPushServer {
public Server() throws RemoteException {
super();
}
public void callMeBack(int time, String param,ICallback callback)
throws RemoteException {
Servant servant = new Servant(time, param,callback); / / cration du servant
servant.start();
// dmarrage du servant
}
public static void main(String[] args) throws Exception {
// dmarrage du serveur
Server serveur = new Server();
Naming.rebind("Server",serveur);
System.out.println("Serveur pret");
}
}
2005-2006, S. Krakowiak

58

Appel en retour : ralisation (le callback)

import java.rmi.*;
import java.rmi.server.*;
public class Callback extends UnicastRemoteObject
implements ICallback {
public Callback() throws RemoteException {
super();
}
public void doCallback(String message) throws RemoteException {
System.out.println(message);
}
}

2005-2006, S. Krakowiak

59

Appel en retour : ralisation (un client)


import java.rmi.*;
public class Client {
public static void main(String[] args) throws Exception {
Callback callback = new Callback();
// cration de l'objet callback
IServer serveur = (IServer) Naming.lookup("Server");
System.out.println("dmarrage de l'appel");
serveur.callMeBack(5, "coucou", callback);
// demande de rappel
for (int i=; i<=5; i++) {
System.out.println(i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) { }
}
System.out.println("fin du main");
}
}

2005-2006, S. Krakowiak

60

Conclusion sur Java RMI


Extension du RPC aux objets
Permet laccs des objets distants
Permet dtendre lenvironnement local par chargement
dynamique de code
Pas de langage spar de description dinterfaces (IDL fourni
par Java)

Limitations
Environnement restreint un langage unique (Java)
Mais passerelles possibles, en particulier RMI/IIOP
Services rduits au minimum
Service lmentaire de noms (sans attributs)
Pas de services additionnels
Duplication dobjets
Transactions

2005-2006, S. Krakowiak

61

Introduction CORBA

Sacha Krakowiak
Universit Joseph Fourier
Projet Sardes (INRIA et IMAG-LSR)
http://sardes.inrialpes.fr/~krakowia

Problme et voie dapproche


Situation et besoins
Extension du domaine des applications rparties
Interconnexion des systmes d'information et des rseaux
Rutilisation et adaptation dapplications existantes

Contraintes
Il ny aura pas de consensus sur les plates-formes matrielles, les
langages, les systmes, les protocoles de rseau, les
formats
dapplications ncessit de linteroprabilit

Voie dapproche
Proposer un standard pour une architecture d'applications rparties
Permettant linteroprabilit entre plates-formes et systmes
htrognes
Fond sur un modle objets

2005-2006, S. Krakowiak

63

LOMG (Object Management Group)


http://www.omg.org/

Consortium but non lucratif, cr en 1989


Plus de 850 membres en 1999 (constructeurs, SSII,
utilisateurs, recherche)

Objectif
Faire merger des standards pour lintgration dapplications
distribues htrognes et la rutilisation de composants
logiciels

Fonctionnement
Appel propositions (appuyes par des ralisations
prototypes)
Examen des rponses, discussion et amlioration,
proposition de standards
Fournit des spcifications, non des produits

2005-2006, S. Krakowiak

64

OMG : vision globale

LOMG prne lutilisation dune approche fonde sur les objets

pour fournir une vue unique dun systme distribu htrogne


OMA (Object Management Architecture) pour larchitecture
logicielle globale
CORBA (Common Object Request Broker Architecture) pour les
outils et services middleware
UML (Unified Modeling Language) pour la modlisation
MOF (Meta-Object Facility) pour la mta-modlisation

2005-2006, S. Krakowiak

65

CORBA : objectifs

Permettre linteroprabilit des composants et des

applications rpartis par lintermdiaire dun mode de


coopration unifi : lappel des objets distants
Grer lhtrognit des machines, systmes et langages

par lutilisation dun langage pivot commun : OMG IDL


Proposer un support middleware technique ouvert (non

propritaire) et multi-fournisseurs
Promouvoir la ralisation de services communs utilisant

eux-mmes le standard CORBA

2005-2006, S. Krakowiak

66

Vue densemble de lOMA (Object Management


Architecture)

Application
Interfaces

Domain
Interfaces

Common
Facilities

interfaces
+ objets

Object Request Broker (ORB)

ORB : bus logiciel


de communication

2005-2006, S. Krakowiak

Object
Services

interfaces
+ objets

67

Composants de larchitecture OMA

ORB (Object Request Broker)


bus logiciel de communication entre les autres composants

Application Interfaces
Interfaces dveloppes pour une application spcifique (non standardises)

Object Services
Interfaces de services communs au niveau systme, utiliss par les applications.

Service de noms, de transactions, d'vnements, de persistance, etc.

Common Facilities
Interfaces de services communs au niveau applications

Service dchange et de liaison de documents

Domain Interfaces
Interfaces de services spcifiques un domaine d'application (objets mtier).

2005-2006, S. Krakowiak

Tlcommunications, finance, mdecine, etc.

68

Vue schmatique du fonctionnement de CORBA

Appel
requte
rfrence dobjet
(opaque)

activation

code
dimplantation

Objet
CORBA

tat
interface

ORB

Application cliente

Application serveur

Fonctions de lORB
localiser les objets
transmettre les requtes
activer les objets
2005-2006, S. Krakowiak

69

Schma densemble de CORBA


Application
client

Appel
dynamique

Talon
IDL

Ralisation
de lobjet

Interface
ORB

squelette
IDL

interface
squelette
dynamique

Adaptateur
dobjets

Noyau ORB
Protocoles GIOP / IIOP

Rfrentiel
des
interfaces

2005-2006, S. Krakowiak

Interface propritaire
lie lORB
Interface standard

Plusieurs interfaces
possibles
Interface propre
lapplication

Rfrentiel
des
implantations

70

Rfrences dobjets

Dsignation unique dun objet


Opaque (contenu non directement exploitable par application

Comment obtenir une rfrence dobjet ?


Cration (notion de fabrique dobjets, cf plus loin
Recherche partir dun nom symbolique ou dattributs

Services de noms (font partie des Object Services)

Naming (pages blanches)


Trading (pages jaunes)

Conversion string <--> reference

Service de lORB

linitialisation
Un service de lORB contient les rfrences de quelques objets connus, dont un
service de noms

2005-2006, S. Krakowiak

71

Normalisation des communications

Protocoles dinteroprabilit entre bus de la norme

CORBA 2
GIOP : General Inter-ORB Protocol
IIOP (Internet Inter-ORB Protocol) : instanciation de GIOP sur les
protocoles de l'Internet (TCP/IP)

Composants du protocole
CDR : Common Data Representation (format de donnes)
Dcrit la reprsentation de tous les types de lIDL
IOR : Interoperable Object References (rfrences dobjets)
Contient au moins
Le numro de version de la couche transport accepte par le serveur
de lobjet
Ladresse de la machine destinataire
Une cl interne permettant de localiser lobjet dans le serveur

Format des messages changs

2005-2006, S. Krakowiak

72

Linterface ORB

Utilit
Fournit des fonctions de service utiles au client et au serveur
Conversion entre rfrences et chane de caractres
(service lmentaire de dsignation)
Ensemble de rfrences initiales vers des objets connus
Initialisation de l'adaptateur dobjets

Fonctionnement
LORB est lui-mme accessible via une rfrence dobjet
La premire opration que doit faire un client ou un serveur est
dobtenir cette rfrence (soit orb)
Opration CORBA.orb.init (ou quivalent) fournie par
lenvironnement CORBA
orb = CORBA.orb.init (args)

Les fonctions de l'ORB sont accessibles par


orb.operation

2005-2006, S. Krakowiak

73

Ladaptateur dobjets
notions de base

Fonction
Facilite la construction de serveurs en permettant disoler et de
mettre en commun diffrentes fonctions utiles
Enregistrement et recherche des implmentations d'objets
Gnration de rfrences pour les objets
Activation des processus dans le serveur
Adaptation aux spcificits des langages de programmation
Adaptation diffrentes formes de serveurs (SGBDOO, carte
puce, etc.)

Mise en uvre
Plusieurs adaptateurs peuvent coexister
Slection via un service de lORB

2005-2006, S. Krakowiak

74

OMG IDL (Interface Definition Language)

Fonctions
Description des interfaces des objets
Types et oprations
Gnralisation de lIDL utilis pour le RPC

Langage pivot entre plusieurs applications


Dfinit un contrat
Base pour la gnration automatique des talons et squelettes

Proprits
Langage dclaratif
Sparation entre interfaces et implmentations
Indpendant dun langage de programmation
projections possibles vers diffrents langages
dcriture dapplications

2005-2006, S. Krakowiak

75

OMG IDL : exemple de dfinition de types

#include <date.idl>
module annuaire {
typedef string Nom;
typedef sequence<Nom> DesNoms;
struct Personne {
Nom nom;
string<200> informations;
string<16> telephone;
string<60> email;
string<60> url;
::date::Date date_naissance;
};
// fin Personne;
typedef sequence<Personne> DesPersonnes

2005-2006, S. Krakowiak

76

OMG IDL : exemple de dfinition dinterface

Interface Repertoire {
readonly attribute string libelle;
exception ExisteDeja { Nom nom; };
exception Inconnu { Nom nom; };

};

2005-2006, S. Krakowiak

void ajouterPersonne (in Personne personne)


raises (ExisteDeja);
void retirerPersonne (in Nom nom)
raises({Inconnu);
void modifierPersonne {in Nom nom, in Personne p)
raises (Inconnu);
Personne obtenirPersonne (in Nom nom)
raises {Inconnu);
DesNoms listerNoms () ;
};
// fin Repertoire
// fin annuaire

77

OMG IDL

lments

Pragma (aide la dsignation ; exemple : version, etc)


Module (ensemble de dfinitions dintrt commun)
Types de base, format binaire normalis
Types construits
typedef, enum, struct, union, array, sequence, string
Exceptions
Interface (avec hritage multiple, sans surcharge)
une interface est associe une rfrence dobjet
Opration (synchrone, ou asynchrone sans rsultat)
description dune signature
Attribut (possibilit de lecture seule)
types de mta-donnes (TypeCode, any)

2005-2006, S. Krakowiak

78

Principe de lutilisation de lIDL pour la gnration


(mode statique)

fichier IDL

Client
Java

talon
Java

ORB Java

.idl

Serveur
C++
Prcompil. Prcompil.
Java
C++

squelette
C++

ORB C++

Principe analogue celui de rpcgen pour le RPC


2005-2006, S. Krakowiak

79

Diffrences entre RPC et CORBA

r = P(x,y)

P
r

crer obj1

crer obj2

ref. obj1

ref. obj2

appel obj1.M3
appel obj2.M5

Pour CORBA, la norme spcifie que la smantique en cas


derreur est au plus une fois (appel excut 0 ou 1 fois)
2005-2006, S. Krakowiak

80

venir : complments sur CORBA

La construction dune application CORBA


Appel dynamique et rfrentiel des interfaces
Adaptateur dobjets
POA (Portable Object Adaptor)

Dtails sur les rfrences dobjets


Interoprabilit entre bus CORBA

2005-2006, S. Krakowiak

81