Вы находитесь на странице: 1из 108

DPARTEMENT SI

AM DERY
Invocation de Mthode distance
Exemple : Java
Remote Method Invocation
travailler seuls
Concepts gnraux
Mise en uvre Java
Merci Rmi Vankeisbelck, Michel Riveill etc
Client Serveur
2
Invocation de mthodes distantes
3
Mcanisme qui permet des objets localiss sur des
machines distantes de schanger des messages
(invoquer des mthodes)
RMI
4
Core API (intgr au JDK 1.1)
Gratuit
100 % Java
Dvelopp par JavaSoft
Rserv aux objets Java
Utilise les sockets et le protocole JRMP
Invocation de mthodes distantes
5
Stubs et encodage des paramtres
6
le code dun objet client invoque une mthode sur un
objet distant
Utilisation dun objet substitut dans la JVM du client : le stub
(souche) de l objet serveur
Stubs et encodage des paramtres
7
Du ct du client
8
Appel dune mthode du stub (de faon entirement
transparente)
le stub construit un bloc de donnes avec
identificateur de lobjet distant utiliser
description de la mthode appeler
paramtres encods qui doivent tre passs
puis il envoie ce bloc de donnes au serveur...
Du ct du serveur
9
un objet de rception (Squeleton) effectue les
actions suivantes :
dcode les paramtres encods
situe l objet appeler
invoque la mthode spcifie
capture et encode la valeur de retour ou l exception
renvoye par l appel
Encodage des paramtres
10
Encodage dans un bloc d octets afin d avoir une
reprsentation indpendante de la machine
Types primitifs et basiques (int/Integer...)
Encods en respectant des rgles tablies
Big Endian pour les entiers...
Objets ...
Gnrateur de stubs
11
Les stubs grent la communication ainsi que
l'encodage des paramtres
Processus videmment complexe...
Entirement automatique
Un outil permet de gnrer les stubs pour les OD
Stubs et rmic
12
La commande rmic du jdk rend transparent la
gestion du rseau pour le programmeur
une rfrence sur un ODrfrence son stub local
syntaxe = un appel local
objetDistant.methode()
Un exemple : le sempiternel Hello World !!!
13
Interfaces et classes prdfinies
14
Interface = protocole d application
15
L interface HelloWorld
import java.rmi.*;
interface HelloWorld extends Remote {
public String sayHello()
throws RemoteException;
}
Rle de l interface
16
HelloWorld
HelloWorld
Les exceptions
17
Lexception RemoteException doit tre dclare
par toutes les mthodes distantes
Appels de mthodes distants moins fiables que les appels
locaux
Serveur ou connexion peut tre indisponible
Panne de rseau
...
Du ct client
18
HelloWorld hello = ...;
// Nous verrons par la suite comment obtenir
// une premire rfrence sur un stub
String result = hello.sayHello();
System.out.println(result);
Du ct Serveur
19
Implmentation de la classe qui gre les mthodes de
linterface HelloWorld
// Classe d'implmentation du Serveur
public class HelloWorldImpl
extends UnicastRemoteObject
implements HelloWorld {
public String sayHello() throws RemoteException {
String result = hello world !!! ;
System.out.println( Mthode sayHello invoque... +
result);
return result;
}
}
Classe dimplmentation
20
doit implanter linterface HelloWorld
doit tendre la classe RemoteServer du paquetage
java.rmi
RemoteServer est une classe abstraite
UnicastRemoteObject est une classe concrte qui
gre la communication et les stubs
Classe dimplmentation
21
HelloWorld
HelloWorld
HelloWorldImpl
Loutil RMIC
22
outil livr avec le JDK permet de gnrer les stubs
> rmic -v1.2 HelloWorldImpl
gnre un fichier HelloWorldImpl_stub.class
rmic doit tre pass pour toutes les classes
d'implmentation des OD afin d'en gnrer les stubs
Depuis la v3, les stubs sont gnrs dans un package sous
le rpertoire de travail
Deux nouvelles options :
"-idl" and "-iiop" pour gnrer des IDL and des stubs pour
IIOP.
Fichiers gnrs
Un squelette(skeleton) pour un objet serveur au dessus du
protocole JRMP qui contient une mthode qui rpartit les
appels aux implmentations des objets distants
Un talon (tie) pour un objet serveur similaire au squelette, qui
communique avec le client en utilisant le protocole IIOP.
Un stub ou proxy pour lobjet distant responsable pour faire des
appels aux mthodes sur les objets du sserveur.
Le protocole JRMP est utilis dans la gnration par dfault. U
Rfrence sur un objet
24
On sait implanter un serveur d un ct, et appeler
ses mthodes de l autre
MAIS
Comment obtient-on une rfrence vers un stub de
notre objet serveur ???
Localisation des objets de serveur
25
On pourrait appeler une mthode sur un autre objet serveur
qui renvoie une rfrence sur le stub...
Mais quoi qu il en soit, le premier objet doit lui aussi tre
localis (La poule et l uf) !!!
On a alors recours a un Service de Nommage
Les Services de Nommage
26
Obtention d'une premire rfrence sur un objet
distant : bootstrap laide dun Service de
Nommage ou Annuaire
Enregistrement des rfrences d'objets dans
l'annuaire afin que des programmes distants
puissent les rcuprer
Exemple : Le RMIRegistry
27
Implmentation d'un service de nommage
Fourni en standard avec RMI
Permet d'enregistrer des rfrences sur des objets de serveur
afin que des clients les rcuprent
On associe la rfrence de l'objet une cl unique (chane de
caractres)
Le client effectue une recherche par la cl, et le service de
nommage lui renvoie la rfrence distante (le stub) de l'objet
enregistr pour cette cl
Le RMIRegistry
28
Programme excutable fourni pour toutes les plates formes
S'excute sur un port (1099 par dfaut) sur la machine
serveur
Pour des raisons de scurit, seuls les objets rsidant sur la
mme machine sont autoriss lier/dlier des rfrences
Un service de nommage est lui-mme localis l'aide d'une
URL
La classe Naming
29
du package java.rmi
permet de manipuler le RMIRegistry
supporte des mthodes statiques permettant de
Lier des rfrences d'objets serveur
Naming.bind(...) et Naming.rebind(...)
Dlier des rfrences d'objets serveur
Naming.unbind(...)
Lister le contenu du Naming
Naming.list(...)
Obtenir une rfrence vers un objet distant
Naming.lookup(...)
Enregistrement dune rfrence
30
Lobjet serveur HelloWorld (cot serveur bien
entendu)
On a cr l'objet serveur et on a une variable qui le
rfrence
HelloWorld hello = new HelloWorldImpl();
On va enregistrer l'objet dans le RMIRegistry
Naming.rebind("HelloWorld",hello);
L'objet est dsormais accessible par les clients
Obtention d'une rfrence cot client
31
sur l'objet serveur HelloWorld
On dclare une variable de type HelloWorld et on
effectue une recherche dans l'annuaire
HelloWorld hello =
(HelloWorld)Naming.lookup("rmi://www.helloworldserver
.com/HelloWorld");
On indique quelle est l'adresse de la machine sur
laquelle s'excute le RMIRegistry ainsi que la cl
La valeur retourne doit tre transtype (caste) vers
son type rel
Remarque
32
Le Service de Nommage n'a pas pour fonction le
rfrencement de tous les objets de serveur
Il devient vite complexe de grer l'unicit des cls
La rgle de bonne utilisation du Naming est de lier des
objets qui font office de point d'entre, et qui
permettent de manipuler les autres objets serveurs
Une autre utilisation du rmiRegistry
33
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
Client
Registry registry;
registry = LocateRegistry.getRegistry();
Hello hello = (Hello) registry.lookup("coucou");
Serveur
LocateRegistry.createRegistry(port); // port=1099
Hello stub = (Hello) UnicastRemoteObject.exportObject(unHello, 0);
Naming.rebind("rmi://"+"localhost"+":"+ port +"/coucou", stub);
JNDI
Les applications JNDI applications
peuvent accder aux objets enregistrs dans
lannuaire RMI
RMI peut utiliser dautres serveurs de noms via JNDI
LDAP ou le serveur de noms Corba par exemple
Conception, implmentation et excution de
l'exemple
35
Rappel
On veut invoquer la mthode sayHello() d'un objet de
serveur distant de type HelloWorld depuis un
programme Java client
Nous allons devoir coder
L'objet distant
Le serveur
Le client
Et dfinir les permissions de scurit et autres
emplacements de classes...
Processus de dveloppement
36
1) dfinir une interface Java pour un OD
2) crer et compiler une classe implmentant cette interface
3) crer et compiler une application serveur RMI
4) crer les classes Stub (rmic)
5) dmarrer rmiregistry et lancer lapplication serveur RMI
6) crer, compiler et lancer un programme client accdant des
OD du serveur
Hello World : L'objet distant
37
Une interface et une classe d'implmentation
stubs gnrs automatiquement par rmic
toutes les classes ncessaires lobjet de client doivent
tre dployes sur la machine cliente et accessibles au
chargeur de classes (dans le CLASSPATH)
L'interface HelloWorld (HelloWorld.class)
Le stub HelloWorldImpl_stub gnr par rmic pour cet objet
Hello World : Le serveur
38
instancie un objet de type HelloWorld et attache au service de
nommage
puis objet mis en attente des invocations jusqu' ce que le serveur soit
arrt
import java.rmi.*;
import java.rmi.server.*;
public class HelloWorldServer {
public static void main(String[] args) {
try {
System.out.println("Cration de l'objet serveur...");
HelloWorld hello = new HelloWorldImpl();
System.out.println("Rfrencement dans le RMIRegistry...");
Naming.rebind("HelloWorld",hello);
System.out.println("Attente d'invocations - CTRL-C pour
stopper");
} catch(Exception e) {
e.printStackTrace();
}
}
}
Serveur (suite)
39
Apres avoir compil le tout...
Pour dmarrer le serveur, il faut tout d'abord lancer le
RMIRegistry
Attention : La base de registres RMI doit connatre les interfaces et les
stubs des objets qu'elle enregistre (CLASSPATH) !!!
> rmiregistry &
et ensuite on lance le serveur
> java HelloWorldServer
Cration de l'objet serveur...
Rfrencement dans le RMIRegistry...
Attente d'invocations - CTRL-C pour stopper
Hello World : client
40
obtenir une rfrence sur l'objet de serveur HelloWorld,
invoquer la mthode sayHello(), puis afficher le rsultat de
l'invocation sur la sortie standard
import java.rmi.*;
public class HelloWorldClient {
public static void main(String[] args) {
try {
System.out.println("Recherche de l'objet serveur...");
HelloWorld hello =
(HelloWorld)Naming.lookup("rmi://server/HelloWorld");
System.out.println("Invocation de la mthode sayHello...");
String result = hello.sayHello();
System.out.println("Affichage du rsultat :");
System.out.println(result);
System.exit(0);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Le client (suite)
41
Il suffit ensuite de lancer le programme
> java HelloWorldClient
Recherche de l'objet serveur...
Invocation de la mthode sayHello...
Affichage du rsultat :
hello world !!!
Au niveau du serveur, le message...
Mthode sayHello invoque... hello world !!!
...s'affichera dans la console
Passage de paramtres
42
On sera souvent amens a passer des paramtres
aux mthodes distantes...
Les mthodes distantes peuvent retourner une
valeur ou lever une exception...
On a deux types de paramtres
Les objets locaux
Les objets distants
Passage de paramtres: ATTENTION
43
Certains objets sont copis (les objets locaux), d'autres non (les
objets distants)
Les objets distants, non copis, rsident sur le serveur
Les objets locaux passs en paramtre doivent tre srialisables afin
d'tre copis, et ils doivent tre indpendants de la plate-forme
Les objets qui ne sont pas srialisables lveront des exceptions
Attention aux objets srialisables qui utilisent des ressources locales
!!!
Que doit connatre le client ?
44
Lorsquun objet serveur est pass un programme,
soit comme paramtre soit comme valeur de
retour, ce programme doit tre capable de
travailler avec le stub associ
Le programme client doit connatre la classe du
stub
Que doit connatre le client ?
45
les classes des paramtres, des valeurs de retour et
des exceptions doivent aussi tre connues...
Une mthode distante est dclare avec un type de valeur de
retour...
...mais il se peut que l objet rellement renvoy soit une
sous-classe du type dclar
Que doit connatre le client ?
46
Le client doit disposer des classes de stub, classes
des objets retourns
copier les classes sur le systme de fichiers local du client
(CLASSPATH)...
...cependant, si le serveur est mis jour et que de nouvelles
classes apparaissent, il devient vite pnible de mettre jour le
client
C est pourquoi les clients RMI peuvent charger
automatiquement des classes de stub depuis un autre
emplacement
Il s agit du mme type de mcanisme pour les applets qui
fonctionnent dans un navigateur
Chargement dynamique des classes
47
Problme de scurit
Le programme client tlcharge du code sur le rseau
Ce code pourrait contenir des virus ou effectuer des oprations
non attendues !!!
Utilisation d un gestionnaire de scurit pour les applications
de clients RMI
Possibilit de crer des gestionnaires de scurit personnaliss
pour des applications spcifiques
RMI fournit des gestionnaires de scurit suffisants pour un
usage classique
Chargement dynamique
48
Pour ne plus dployer les classes du serveur chez
le client
Utilisation des chargeurs de classes qui tlchargent des classes
depuis une URL
Utilisation d un serveur Web qui fournit les classes
Ce que a change
Bien entendu, les classes et interfaces de l objet distant ne changent
pas
Le code du serveur ne change pas
le client et la faon de le dmarrer sont modifis
Et lancer un serveur Web pour nos classes
Hello World : chargement dynamique
49
Sparation des classes
Serveur (fichiers ncessaires a l'excution du serveur)
HelloWorldServer.class
HelloWorldImpl.class
HelloWorld.class
HelloWorldImpl_Stub.class
Download (fichiers de classes charger dans le
programme client)
HelloWorldImpl_Stub.class
Client (fichiers ncessaires au dmarrage du client)
HelloWorld.class
HelloWorldClient.class
Hello World : Dmarrage du serveur Web
50
Mettre les classes Download dans le rpertoire des
documents Web du serveur Web, accessibles via une
URL
le chargeur de classes ira chercher les classes un emplacement
de type http://www.class-server.com/classes/HelloWorldImpl_Stub.class
};
Hello World : Politiques de scurit
51
Le programme Java client doit pouvoir se connecter aux ports de
la base de registres RMI et des implmentations des objets de
serveur, ainsi qu'au port du serveur Web
Fichier client.policy
grant {
permission java.net.SocketPermission
"*:1024-65535", "connect,resolve";
permission java.net.SocketPermission
"*:80", "connect";
};
Hello World : gestionnaire de scurit RMI
52
Le client intgre un gestionnaire de scurit RMI pour les
stubs tlchargs dynamiquement
import java.rmi.*;
import java.rmi.server.*;
public class HelloWorldClient {
public static void main(String[] args) {
try {
// Installe un gestionnaire de scurit RMI
System.setSecurityManager(new RMISecurityManager());
System.out.println("Recherche de l'objet serveur...");
HelloWorld hello =
(HelloWorld)Naming.lookup("rmi://server/HelloWorld");
System.out.println("Invocation de la mthode sayHello...");
String result = hello.sayHello();
System.out.println("Affichage du rsultat :");
System.out.println(result);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Hello World : Dmarrage cot serveur
53
1) Lancer la base de registres RMI (elle doit pouvoir accder aux
classes Download - CLASSPATH)
> rmiregistry
2) Lancer le serveur Web servant les fichiers de classes Download
3) Lancer le serveur (les classes Server doivent tre accessibles)
> java HelloWorldServer
Cration de l'objet serveur...
Rfrencement dans le RMIRegistry...
Attente d'invocations - CTRL-C pour stopper
Hello World : Dmarrage cot client
54
Le client doit pouvoir se connecter des machines distantes pour
la base de registres RMI, les objets de serveur ainsi que le serveur
Web
On doit lui fournir un fichier client.policy
Le client doit bien connatre l'emplacement des classes afin de
pouvoir les tlcharger
On va le lui prciser lors du lancement
> java -Djava.security.policy=client.policy
-Djava.rmi.server.codebase=http://www.class-server.com:80/
HelloWorldClient
Erreurs classiques
Stub inaccessible au rmiregistry
java.rmi.ServerException: RemoteException
occurred in server ...
java.rmi.UnmarshalException: error
unmarshalling ...
java.lang.ClassNotFoundException:
Le stub est accessible au serveur MAIS PAS AU rmiregistry
Attention lordre dappel : gnration des stubs et appel du rmiregistry
rmiregistry pas lanc
java.net.ConnectException
Oubli du constructeur pour le RemoteObject
unreported exception java.rmi.RemoteException in default constructorpublic class HelloImpl extends
UnicastRemoteObject implements Hello { ^
rmiregistry dj lanc
java.rmi.server.ExportException: Port already in use: 1099On peut lancer un autre registry mais sur
un autre port.
Erreurs classiques
La classe dimplmentation n'hrite pas de
UnicastRemoteObject
S'il n'hrite pas de UnicastRemoteObject, il n'est pas Remote
donc on lui demande d'tre Serializable ...
Trouble: java.rmi.MarshalException: error marshalling
arguments; nested exception
is: java.io.NotSerializableException: CalculatorImpl
ATTENTION aux CLASSPATH et package Java
Conclusion
57
On a vu ce qu'est une invocation de mthode
distante
On a vu le mcanisme des stubs, ainsi que
l'encodage des paramtres
On a vu le dploiement avec tlchargement des
classes dynamiquement
Nous avons mme appliqu ces concepts au
travers de l'exemple "HelloWorld en RMI
CHRONI QUE D UNE I NVASI ON ANNONCE
POURQUOI ? COMMENT?
QUI : CORBA / COM- DCOM / JAVA RMI
Protocoles dapplication et
Langages de spcifications
Spcifications des types de donnes qui transitent sur le rseau
XDR et RPC de SUN
Protocole := CHOICE {
requete [0] REQUETE,
reponse [1] REPONSE }
Programme reqrep {
version {
REPONSE rerep(REQUETE) = 1
}= 1
} = 10000
ASN.1 et norme ISO
Exemple : annuaire des surnoms
XDR et
RPC
Protocole := CHOICE {
enregistrerReq [0] SEQUENCE{PrintableString nom,
PrintableString surnom}
enregistrerRep[1] BOOLEAN,
listerReq [2] NULL,
listerRep [3] SET OF Personnes, .}
Programme surnoms {
version {
boolean enregistrer(nomSurnom) = 1;
listePersonnes lister(void)=2
}= 1
} = 10000
ASN.1 et
norme
ISO
Gnrateurs de Stubs
RPCGEN / MAVROS
ASN1
XDR
Librairie marshalling
et unmarshalling
squelettes du client et
du serveur
Spcifications
des donnes
Gnrateurs
Types de
donnes
C Lisp
Java
Types de
donnes
C
Fichiers
gnrs
Implmentation des objets distribus
Corba indpendant des
langages de
programmation
Projections C,C++,
Java
Un langage de
Spcification IDL
Orient C++
Tout Java
CORBA, DCOMet JAVA
une interface = une
unit lmentaire
hritage des interfaces
aucune interface
impose
normalisation des
interface
au moins une interface :
Iunknown
non transmissible par
hritage
composition dinterfaces
hritage de classe
implmentation de plusieurs interfaces possibles
Gnrateurs
RMIC / Orbix...
IDL
Int. Java
Spcifications
des donnes
Gnrateurs
Fichiers
gnrs
Stubs Skeletons Proxy
(mise en uvre de la srialisation
et dsrialisation)
CORBA
module Surnoms {
typedef string Nom ;
struct Personne {Nom nom;
string surnom;};
typedef sequence<Personne> ListePersonnes;
interface Surnoms{
exception ExisteDeja{string surnom;};
boolean enregistrer(in Personne personne) raises
(ExisteDeja);
..
};
};
Surnoms.java
Compilation interface IDL
Client
StubForSurnoms.java
_SurnomsImplBase.java
Serveur
SurnomsImpl.java
Client.java
Serveur.java
A crire
Gnr
1- Exemple
introductif
Surnoms.idl
Compilateur IDL/Java
Rpertoire grid
Rpertoire grid
Rpertoire grid
Rpertoire Surnoms
SurnomsHelper.java
SurnomsHolder.java
jidl Surnoms.idl
RMI
public interface Surnoms extends java.rmi.Remote
{
public Boolean enregistrer(String nom, String surnom) throws
java.rmi.RemoteException,
ServeurSurnoms.surnoms.ExisteDeja ;
.
}
RMI
Classes et Interfaces
ClasseLocale
Souche Squelette
ClasseDistante
InterfaceDistante
Remote
Appel mthode m()
Appel mthode
m()
Machine locale Machine distante
InterfaceDistante
Invocation dynamique
Permet au programme client de
dcouvrir les objets lexcution et les interfaces
proposs par ces objets
construire dynamiquement messages et requtes
envoyer et recevoir le rsultat de telles requtes
Rend les systmes ractifs et faciles modifier
OFFERT PAR CORBA, DCOM et JAVA
Linvocation dynamique
API (DII) de construction de requtes
sans passer par des souches prgnres
Un objet Request = un nom dopration, une liste
de couples valeur - type (au sens de lIR) et une
structure pour le rsultat
invoke
send_deferred + get_response, poll_response
send_oneway
Un peu plus sur linfrastructure
transport des messages
localisation des serveurs et des objets
persistance
ORB pour CORBA
norme Corba 1
DCOM pour OLE
non formelle
JDK
Transport des messages
Rfrences aux objets
identifiant (libre choix d implmentation dans le norme
CORBA)
nombres cods sur 128 bits en OLE
url Uniform Resource Locator en Java RMI
Performances diffrentes et
incompatibilits entre ORBs
et entre ORB et COM
Scnario d obtention de la rfrence du
service de nommage
Client ou Serveur
ORB
CosNaming::
NamingContext
resolve_initial_references ("NameService");
conversion
ajout,retrait,lecture,...
Enregistrer un objet
Opration pour publier un Objet
en gnral, opration ralise par le serveur
Scnario Type
1. Crer un objet
2. Construire un chemin d accs (Name)
3. Appeler l opration bind ou rebind avec le chemin et la rfrence de
l objet
void bind (in Name n, in Object obj)
raises (NotFound, CannotProceed, InvalidName, AlreadyBound);
Retrouver un objet
Opration ralise par un client ou un serveur
Scnario type :
construire un chemin d accs (Name)
appeler l opration resolve avec le chemin
convertir la rfrence obtenue dans le bon type
Object resolve (in Name n)
raises (NotFound, CannotProceed, InvalidName)
Interaction Client Enregistreur
client
serveur
client registre
Lookup : o est objetDistant ?
stub
Il est ici
Envoyez le stub
Le voici
stub squelette
objet
Distant
result = objetDistant.m()
result
RMIRegistry + ClassLoader
Interface avec linfrastructure
Un peu de vocabulaire
Cot client :
stub en CORBA
proxy en OLE
stub/proxy en Java
Ct Serveur :
stub en OLE
skeleton en CORBA
implmentation dune interface en RMI
BOA Objects Adaptaters
Mcanisme de Transport :
Client - Serveur
Appel direct : DLL (in process - utilisation du mme
espace mmoire)
Appel indirect :
LRPC (application sur la mme machine) passe par le proxy
RPC (sur 2 machines diffrentes)
IIOP en Corba
Invocations
Invocations statiques
IDL en CORBA stub + skeleton
En OLE
appel direct si in process
proxy + stub si application fournis uniquement pour les
applications MicroSoft
Versions rcentes dfinition du langage ODL
IDL et ODL sont incompatibles
Invocations
Invocations dynamiques
DII en CORBA
IDispatch en OLE
java reflect
Du ressort de linfrastructure
CORBA vs OLE
dfinition du serveur
trs gnrale laisse
limplmentation
flexibilit primordiale
pour lintgration de
systmes (BDD)
processus formel avec
lOMG
un serveur est une
application ou une
DLL
stratgie commerciale
et pratique
Services et Objets Distribus
Services normaliss
Seulement certains
sont implments
Naming, Trading,
Event
Le programmeur doit
les connecter
Des services en
Programmant avec Java
Securit,Threads,
vnements
Url et Web
Non intgrs RMI
Les points communs des middlewares en
objets distribus (aspect rseau)
Adressage :
tout objet doit tre affect une rfrence unique
Transport :
pour tablir une communication entre 2 nuds
et transmettre une requte
Marshalling :
transformation de la requte pour passer sur le
rseau
Les points communs des middlewares en
objets distribus
Activation :
activer les implmentations des objets
Dispatching :
gestion des threads
Protocol :
transmission des requtes entre excutables
Des services communs
Services de nommage, Interface repository.....
Les points communs des middlewares en
objets distribus (aspect objet)
Encapsulation :
Interdire l'accs direct au contenu de l'objet
Interface :
Permettre l'volution du code
Hritage / Composition :
Grer les versions
Envoi de messages
Privilgier les communications synchrones
Des objets distribus aux
composants
CHRONI QUE D UNE I NVASI ON ANNONCE
POURQUOI ? COMMENT?
QUI : / CORBA3 CCM/ WEB SERVI CES
( . NET, J2EE) / EJBS
Quels Composants ?
Une vision simplifie : les Web Services
Des composants normaliss : CCM
Des composants pratiques : EJB
Et tout ce que l'avenir nous rserve : OpenCCM,
Fractal .
Une unit logique applicative
Une librairie fournissant des donnes et des
services dautres applications.
Un objet mtier dploy sur le web (vision objet)
Un module ou composant (Application
avec JAX-RPC : un composant simple avec une
interface RMI )
Une sorte d'objet plutt qu'un composant
Un Service Web, cest quoi ?
Architecture globale
Un langage de description : WSDL
Une infrastructure : Le Web et http
Une communication par envoi de messages : SOAP
Du marshalling : XML
Un service de nommage dynamique : UDDI
Points communs avec les middlewares objets
Annuaire
UDDI
Client
XML
5 : Jai compris comment invoquer
ton service et je tenvoie un document
XML reprsentant ma requte
Serveur
2 : Jai trouv! Voici le serveur
hbergeant ce service web
3 : Quel est le format dappel du
service que tu proposes?
Contrat
SOAP
4 : Voici mon contrat (WSDL)
XML
XML
6 : Jai excut ta requte et je te retourne le rsultat
1

:

J
e

r
e
c
h
e
r
c
h
e
u
n

s
e
r
v
i
c
e

W
E
B

Cycle de vie dutilisation
Cycle de vie plus complet
Dploiement du service Web
Enregistrement du service Web
Dcouverte du service Web
Invocation du service Web par le client
Pour tre de vrais composants
- Description des interfaces requises
- Langage pour grer le flux dexcution :
WSFL
- des services spcifiques
- scurit (SAML, )
- transactions (BTP, )
- une dcouverte des services web (W3C)
Des environnements intgrs .net
Toute la mcanique est cache
On peut se concentrer sur la conception
Aide l'assemblage ?
Des adeptes et des sceptiques
Passage l'chelle ?
Evolution ?
Interoprabilit ?
Une brique permettant la programmation par
assemblage
Une solution facilitant le dploiement, la gestion du
cycle de vie des applications logicielles
Une meilleure intgration des services
plus qu'un objet
Un composant, cest quoi ?
Exemple des diffrents lments
E
Exemple de modle de composant
30
Modle abstrait de composant CORBA
I
m
p
l

m
e
n
t
a
t
i
o
n

d
e

f
a
c
e
t
t
e
Consommateur
Payer,
slectionner,
prendre
Ouvrir,
remplir,
mettre Monnaie
Fournisseur
Ouvrir capot,
fermer,
Rparateur
F
a
c
e
t
t
e
s
rceptacle
Prise de courant
Prise deau
*
Plus de monnaie
vide
*
Temprature
Source dvnements
Puit dvnements
On/Off
Attributs
III. Composants :
3. CORBA C.
EJB CORBA 3:
Points communs avec les middlewares objets
Langages de description : CIDL ou Interfaces Java
Infrastructure : RMI / ORB
Marshalling : repose sur Corba / RMI
Nommage : Home ++
Interface : Hritage + Composition
EJB CORBA 3: Apports
Interfaces entres et sorties : ports requis et offerts
Conteneur : intgration des proprits non
Fonctionnelles (scurit, persistance, transaction)
Home : fabrique et navigation
Communication par envoi de message et notification
(vnement)
Un vrai cycle de vie
Fichier de dploiement
Packaging d'assemblage
Approche dclarative base sur XML
Prochaine invasion dans la ligne ?
Approche composant revisite :
Open CCM : une meilleure solution CCM + MDA
(+ d'abstraction des infrastructures, projections vers
des middlewares connus)
Des Composants conteneurs ouverts
(travaux de recherche)
Des composants adaptables (fractal)
Les problmes rsoudre encore
Problmes dinteroprabilit
RMI et Corba en Java
entre le monde Microsoft et le reste
Arrive des Web Services : la solution ?
Les composants encore nouveaux.
les Enterprise Java Beans
Corba Components
et aussi C# et net
Les plus grosses difficults
Sont conceptuelles
Comment choisir les composants adapts ?
(manque de smantique, Web smantique)
Comment accepter plus de services ? (proprits
non fonctionnelles)
Etre plus architecte que programmeur .
Quelques interrogations ?
Comment choisir le bon middleware (intergiciel) ?
Il y en a de plus en plus
Corba, RMI, DCOM, DSA + CCM, J2EE
+ Web Services, .net ....
Savoir les comparer
Identifier les points communs
Interoprabilit : XML une solution suffisante ?
Des Critres de Comparaisons
Autour du concept objet ?
Communication synchrone ou asynchrone ?
Description via des interfaces ou des messages ?
Communication directe ou indirecte ?
Spcifique ou indpendant langage ?
Possibilit de transformation de messages ou non ?
Protocole de communication binaire ou textuelle ?
Prise en compte de QoS ou non ?
(transaction, scurit ....)
Comment faire interoprer les middlewares ?
Aller vers un middleware standard ?
(J2EE / Corba)
Construire une couche au dessus des middlewares ?
des familles de middlewares, des middlewares
gnriques (Jonathan, PolyOrb, ...)
Avoir une approche architecturale ?
des design patterns
Faire interoprer des middlewares existants?
M2M
Lavenir ?
Aprs les approches par composants,
des middlewares au dessus de JMS
Une rflexion de plus haut niveau pour
sortir les schmas communs
extrioriser quand et comment on les utilise
ne pas confondre les problmes avec XML
Format URL
rmi://[host][:port][/[object]]
rmi:[/][object]
If the object name is absent, then the URL names
the registry at the given host and port. Otherwise, it
names the remote object registered at that registry
under the name provided. If the host is omitted, the
local host is assumed. If the port is omitted, the
default registry port 1099 is assumed.