Title: Introduction
1Introduction à CorbaRéunion Cube 24/10/2003
- P. Déchamboux (FTRD DTL/ASR)
2Contenu et déroulement
- Références
- http//www.omg.org/
- http//corbaweb.lifl.fr/CORBA_des_concepts_a_la_pr
atique/ - http//www.cs.wustl.edu/schmidt/corba.html
- Plan
- vision Corba
- mise en oeuvre de Corba
- liaison et transport dans Corba
- services systèmes et canevas de Corba
- Annexe
- exemple HelloWorld
3Vision de Corba
4OMG concepts-clés
- Permettre linteropérabilité des composants /
applications par lintermédiaire dun mode de
coopération unifié lappel dobjets distants - Gérer lhétérogénéité des réseaux, machines,
systèmes et langages - Vision utilisateur langage pivot commun
OMG-IDL - Offrir une architecture globale
5OMG les objectifs techniques
- Liaison avec tous les langages
- Transparence des invocations
- Invocation statique et dynamique
- Système auto-descriptif
- Activation automatique
- Interopérabilité entre bus
6OMG 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 dobjets, 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
- interopérabilité sémantique
7OMA larchitecture globale
Bus dobjets répartis
Licences
Nommage
Vendeur
Sécurité
Relations
Collections
Temps
Externalisation
Transactions
Persistance
Propriétés
Changements
Events
Cycle de vie
Interrogations
Concurrence
Services objet communs
8OMG le modèle client/serveur objet
Objet CORBA
9Mise en oeuvre de Corba
10OMG-IDL le langage dinterfaces
- 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
11OMG-IDL mise en oeuvre des interfaces
- Projection des descriptions OMG-IDL vers les
langages dimplantation des clients et des
serveurs (e.g., C, C, Java, etc). - mode statique
- Instanciation sous forme dobjets CORBA des
descriptions OMG-IDL dans un référentiel
dinterfaces. - mode dynamique
12CORBA les composantes du bus
Interface du bus Interface dinvocation
statique Interface dinvocation dynamique
Adaptateur dobjet Interface de squelettes
statiques Interface de squelettes dynamiques
Application serveur
Application cliente
SSI
DSI
SII
DII
ORB
OA
Bus de communication
IR
Référentiel des interfaces
ImplR
Référentiel des implantations
13Liaison et transport dans Corba
14Les couches de transport de CORBA
- GIOP protocole dinteropérabilité entre bus de
la norme CORBA 2 - support à lappel 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é)
15Nommage dans Corba
- Noms du domaine Corba
- Interoperable Object Reference IOR
- identification protocole
- interface OMG-IDL
- Sous-domaine Corba/Internet
- adresse IP port
- clé de format libre (dépendant de ladaptateur
dobjet) - identificateur dadaptateur dobjet
- clé de format libre (dépendant de ladaptateur
dobjet)
16Mise en place dune liaison
Interface applicative (issue de linterface IDL)
Talon client (IOR)
Emballeur GIOP
Objet Corba
17Services systèmes et canevas de Corba
18Les services communs (1)
- Services de localisation dobjets
- 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
19Les 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
20Exemple Hello World en Java
21Chaine de production de programme
Hello.idl
Compilateur OMG-IDL / Java
_StubForHello.java
HelloOperations.java Hello.java HelloHelper.java H
elloHolder.java
HelloPOA.java HelloPOATie.java
HelloClient.java
HelloImpl.java
HelloServeur.java
Client
Serveur
22De lIDL à Java
- Interface OMG-IDL Hello
- Interface Java HelloOperations, Hello
- Classes Java HelloHelper, HelloHolder
ltHello.idlgt interface Hello void
doHello()
ltHello.javagt public interface
HelloOperations public void doHello() public
interface Hello extends HelloOperations,
org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEn
tity
23Implantation du serveur Corba
ltHelloServeur.javagt public class
HelloServeur public static void main(String
args) // Initialisation du Bus Corba et
dun POA org.omg.CORBA.ORB orb
org.omg.CORBA.ORB.init(args, null) org.omg.Por
tableServer.POA poa POAHelper.narrow(orb.res
olve_initial_references("RootPOA")) poa.the_PO
AManager().activate() // récupération du
serveur de nom org.omg.CosNaming.NamingContext
ns org.omg.CosNaming. NamingContextHelper.n
arrow( orb.resolve_initial_references("Na
meService")) // Creation du servant et
enregistrement au serveur de noms HelloImpl
hello new HelloImpl() ns.rebind( new
org.omg.CosNaming.NameComponent new
NameComponent("HelloObj",""), hello) //
Mise en attente du serveur orb.run()
24Implantation du client Corba
ltHelloClient.javagt 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.CosNamin
g.NamingContext ns org.omg.CosNaming.
NamingContextHelper.narrow( orb.resolve_i
nitial_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","")) Hell
o hello HelloHelper.narrow(obj_ref) //
Invocation de l'objet distant hello.doHello()
25Les classes générées (client et serveur)
- Classe _StubForHello implantation du talon
- sert à envoyer les requêtes
- utilisé en lieu et place de l'objet Hello dans le
client - Classe HelloPOA ? Classe HelloPOATie
- reçoit et décode les requêtes ?reçoit et décode
les requêtes - implantation par héritage ?implantation par
délégation
ltHelloImpl.javagt public class HelloImpl
extends HelloPOA public HelloImpl()
public void doHello() System.out.println(
"Hello world!")
26Corba dynamique
27Linvocation dynamique
- Référentiel dinterfaces (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 dopération, une liste
de couples valeur - type (au sens de lIR) et une
structure pour le résultat - invoke
- send_deferred get_response, poll_response
- send_oneway
28Le squelette dynamique
- API (DSI) de décodage de requêtes
- Pas dutilisation de squelettes pré-générés
- Utilisée pour implanter dynamiquement des objets
- Cas dutilisation création de passerelles