Introduction à Corba

publicité
Corba avec Java et C++
2004
Jean­Marc Vanel
Transiciel ­ Sogeti
1
1
Contenu et déroulement
➨Plan
➨Partie 1: survol
vision Corba
mise en oeuvre de Corba
liaison et transport dans Corba
services «communs»
Annexe ­ exemple : HelloWorld
➨Partie 2
Service de nommage (désignation)
Premier programme CORBA en C++
Etude du type « Any »
Les mécanismes dynamiques de C.O.R.B.A.
Synthèse sur C.O.R.B.A.
2
2
Vision de Corba
3
3
OMG : concepts­clés
➨Permettre l’interopérabilité des composants / applications par l’intermédiaire d’un mode de coopération unifié : l’appel d’objets distants
➨Gérer l’hétérogénéité des réseaux, machines, systèmes et langages
➨Vision utilisateur = langage pivot commun : OMG­IDL
➨Offrir une architecture globale
4
4
OMG : les objectifs techniques
➨Liaison avec tous les langages
➨Transparence des invocations
➨Invocation statique et dynamique
➨Système auto­descriptif
➨Activation automatique
5
➨Interopérabilité entre bus
5
OMG : vision globale
➨ Common Object Request Broker Architecture CORBA
appel de méthode réparti transparent
passages de paramètres : in, out, in/out
types de paramètres : types de base (entiers, string, etc), références d’objets, objets par valeur
un bus à objets répartis (ORB)
transport des requêtes, activation des objets
des services de base (CORBAservices)
des utilitaires communs (CORBAfacilities)
des interfaces de domaines = objets métiers
6
« interopérabilité sémantique »
6
OMA : l’architecture globale
Ident do
e rm
f aaic ne
es
Obj e t s
a ppl i c a t i f s
Sa
nt
é
Spé c i f i que s
Té
lé
co
ms
Ut i l i t a i r e s c o mmuns
Fi
na
nc
e
Ad
mi
ni
st
ra
ti
on
Wo
rk
fl
ow
Da
ta
Wa
re
IH
M
Bus d’o bj e t s r é pa r t i s
Nommage
Ve nde ur
Li
ce
nc
es
Sé c ur i t é Re l at i onsCol l e c t i ons
Te mps
Cyc l e
de vi e
I nt e r r ogat i ons
Tr
an
sa
ct
io
ns
Pr
op
ri
ét
és
Pe
rs
is
ta
nc
e
Ev
en
ts
Ext e r nal i s at i on
Ch
an
ge
me
nt
s
Conc ur r e nc e
Se r v i c e s o bj e t c o mmuns
7
7
OMG :
le modèle client/serveur objet
Référ ence
d’objet
Interface
d’objet
Code
d’implantation
Re quê t e
Obj e t
CORBA
Ac t i v at i on
Et at
ORB
8
8
Mise en oeuvre de Corba
9
9
OMG­IDL : le langage d’interfaces
➨Rôle du langage
décrire les interfaces des objets
langage pivot entre applications
générer des squelettes de programme dans les langages de programmation des applications
10
10
OMG­IDL : mise en oeuvre des interfaces
➨Projection des descriptions OMG­IDL vers les langages d’implantation des clients et des serveurs (e.g., C, C++, Java, etc).
mode « statique »
➨Instanciation sous forme d’objets CORBA des descriptions OMG­IDL depuis un référentiel d’interfaces.
mode « dynamique »
11
11
CORBA : les composantes du bus
Interface du bus
Interface d’invocation statique
Ada pt a t e ur d’o bj e t
I nt e r f a c e de s que l e t t e s s t a t i qu
I nt e r f a c e de s que l e t t e s dy na mi q
Interface d’invocation dynamique
SSI
SI I
DI I
ORB
DSI
OA
Bus de c o mmuni c a t i o n
IR
Ré f é r e nt i e l
de s i nt e r f ac e s
I mpl R
Ré f é r e nt i e l
de s i mpl ant at i ons
12
12
Liaison et transport dans Corba
13
13
Les couches de transport de CORBA
➨GIOP : protocole d’interopérabilité entre bus de la norme CORBA 2
support à l’appel de méthode (enveloppe = REQUEST, REPLY, etc)
encodage des données : CDR
GIOP sur Internet = Internet Inter ORB Protocol (IIOP)
champs « service context » (ex: standardisation ctxt transactions, sécurité)
14
14
Nommage dans Corba
➨ Noms du domaine Corba
Interoperable Object Reference : IOR
identification protocole
interface OMG­IDL
➨ Sous­domaine Corba/Internet
adresse IP + port
15
15
Mise en place d’une liaison
Invocation
Servant applicatif
Interface applicative (issue de l’interface IDL)
IOR servant
Talon client
(IOR)
Emballeur GIOP
Adaptateur
d’objet
Squelette serveur
Emballeur GIOP
Liaison IIOP
16
16
Services «communs»
17
17
Les services communs (1)
➨Services de localisation d’objets
service de nommage (Naming)
pour retrouver un objet par un nom
service de type « pages blanches »
service de courtage (Trader)
pour retrouver un objet par des propriétés
service de type « pages jaunes »
18
18
Les services communs (2)
➨Services de communications asynchrones
Events, Notification, Messaging
➨Services de sûreté de fonctionnement
Security, Transactions, Concurrence
➨Services concernant la vie des objets
Life Cycle, Property, Relationship, Externalization, Persistent Object, Query, Collection, Versionning, Time, Licencing 19
19
Exemple : « Hello World » en Java
20
20
Chaine de production de programme
Hello.idl
Compilateur
OMG-IDL / Java
_HelloStub.java
HelloClient.java
Client
HelloPOA.java
HelloPOATie.jav
a
HelloOperations.jav
a
Hello.java
HelloHelper.java
HelloHolder.java
HelloImpl.java
HelloServeur.java
Serveur
21
21
De l’IDL à Java
➨ Interface OMG­IDL Hello
<Hello.idl>
interface Hello {
void doHello();
};
➨ Interfaces Java HelloOperations, Hello
<Hello.java>
public interface HelloOperations {
public void doHello();
}
public interface Hello extends HelloOperations,
org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {}
➨Classes Java HelloHelper, HelloHolder
22
22
Implantation du serveur Corba
<HelloServeur.java>
23
public class HelloServeur {
public static void main(String args[]) {
// Initialisation du Bus Corba et d’un POA
org.omg.CORBA.ORB orb = ORB.init(args, null);
org.omg.PortableServer.POA poa
= POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
// récupération du serveur de nom
org.omg.CosNaming.NamingContext ns
= NamingContextHelper.narrow(
orb.resolve_initial_references("NameService"));
// Creation du servant et enregistrement au serveur de noms
HelloImpl hello = new HelloImpl();
ns.rebind(
new NameComponent[] { new NameComponent("HelloObj","")},
hello );
// Mise en attente du serveur
orb.run();
}
23
Implantation du client Corba
<HelloClient.java>
public class HelloClient {
public static void main(String args[]) {
// Initialisation du Bus Corba
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
// récupération du serveur de nom
org.omg.CosNaming.NamingContext ns
= org.omg.CosNaming. NamingContextHelper.narrow(
orb.resolve_initial_references("NameService"));
// Récupération de la souche depuis le serveur de nom
org.omg.CORBA.Object obj_ref
= ns.resolve(new org.omg.CosNaming.NameComponent[]
{new NameComponent("HelloObj","")});
Hello hello = HelloHelper.narrow(obj_ref);
// Invocation de l'objet distant
hello.doHello();
}
}
24
24
Les classes générées (client et serveur)
➨ Classe _HelloStub : implantation du talon
sert à envoyer les requêtes
utilisé en lieu et place de l'objet Hello dans le client
➨ Classe HelloPOA
reçoit et décode les requêtes
implantation par héritage
délégation
➨ Classe HelloPOATie
reçoit et décode les requêtes
implantation par <HelloImpl.java>
public class HelloImpl extends HelloPOA {
public HelloImpl() {}
public void doHello() {
System.out.println("Hello world!");
}
}
25
25
Corba dynamique
26
26
L’invocation dynamique
➨Référentiel d’interfaces (IR)
accessible comme objet Corba
gestion de méta­objets Corba (ModuleDef, InterfaceDef, OperationDef, AttributeDef, TypedefDef, …)
➨API (DII) de construction de requêtes
➨Un objet Request = un nom d’opération, une liste de couples type­valeur (au sens de l’IR), une structure pour le résultat, des méthodes:
27
invoke
send_deferred, get_response, poll_response
send_oneway
27
Le squelette dynamique
➨API (DSI) de décodage de requêtes
➨Pas d’utilisation de squelettes pré­générés
➨Utilisée pour implanter dynamiquement des objets
➨Cas d’utilisation : création de passerelles
28
28
Téléchargement