Escolar Documentos
Profissional Documentos
Cultura Documentos
www.omg.org www.corba.org
Plan
CORBA vue densemble IDL (Interface Definition Language) Translation IDL vers Java
La popularit croissante des systmes rpartis Linterconnexion de systmes informatiques varis via des diverses rseaux de communication La rutilisation et lintgration de systmes existants (legacy)
Contraintes :
Pas de consensus sur un seul langage de programmation, systme dexploitation, plate-forme matrielle ou protocole rseau => Fortes besoins dinteroprabilit
Proposer une architecture et un intergiciel standards pour les systmes rpartis, permettant :
OMG Consortium
Constructeurs (Sun, HP, DEC, IBM, ) Environnements systmes (Microsoft, Novell, ) Outils et Langages (Iona, Borland, ) Industriels (Boeing, Alcatel, )
Mission
Promouvoir lorient objet dans les systmes rpartis Fournir une architecture pour lintgration dapplications rparties garantissant rutilisabilit, interoprabilit et portabilit (OMA) Favoriser interoprabilit et portabilit dapplications rparties (CORBA) : une terminologie unique dans le domaine de lobjet un modle dobjets abstrait une architecture du modle de rfrence des interfaces et des protocoles communs
A. Diaconescu, L. Pautet & B. Dupouy page 5
Objectif
Dfinitions
page 6
OMA - architecture
Application Objects ORB
Domain Interfaces
Common Facilities
Common Facilities
Infrastructures indpendantes des domaines (horizontales) Interface utilisateur Gestion de linformation Gestion du systme Gestion des tches
Domain Interfaces
OMA - dfinitions
Interface
Description dun ensemble doprations disponibles sur un objet, spcifie en IDL. Entit capable dmettre des requtes vers des objets qui fournissent des services. Le client manipule des rfrences vers des objets distants. Objet manipul par le client pour invoquer des services sur un objet distant Un proxy est un reprsentant local au client dun objet distant Objet situ sur le serveur, implmente les mthodes des oprations dfinies en IDL Emise par un client, demande lexcution dune opration par un objet cible Contient lidentifiant de lobjet cible, le nom de lopration et les paramtres Entit identifiable caractrise par une signature dcrivant les paramtres de la requte et les valeurs de retour
A. Diaconescu, L. Pautet & B. Dupouy page 8
Client
Rfrence ou proxy
Objet implmentation
Requte
Opration
CORBA - dfinition
Un standard qui dfinie une infrastructure ouverte et indpendante de fournisseur pour la programmation par objet reparti (Distributed Object Computing DOC)
Note: CORBA est un standard et pas un produit
CORBA Implementations
Commerciaux :
ORBIX
IONA
www.iona.com
Visibroker ORBacus
Borland IONA
www.borland.com www.orbacus.com
Libres :
omniORB MICO
omniorb.sourceforge.net
www.mico.org
ORBit
TAO JacORB
www.orbit.net
www.cs.wustl.edu/~schmidt/TAO.html www.jacorb.org
PolyORB
libre.act-europe.fr/polyorb
page 10
CORBA - objectifs
Fournir une spcification dintergiciel indpendante des fournisseurs et des implantations Support pour la htrognit :
Interoprabilit entre divers langages de programmation, plates-formes et rseaux Via lInterface Definition Language (IDL) Transformation standard de lIDL vers diffrents langages de programmation Les applications peuvent tre portes sur diffrents implantations de CORBA, provenant de fournisseurs diffrents Entre diverses implantations de CORBA Via des protocoles standards de rseau : General Inter-ORB Protocol (GIOP); Internet Inter-ORB Protocol (IIOP)
A. Diaconescu, L. Pautet & B. Dupouy 11
Transparence la localisation lutilisation dun service est indpendante sa localisation Transparence daccs les services sont accds en invoquant des oprations sur des objets Sparation des interfaces et des implantations les clients dpendent des interfaces, pas des implantations
Interfaces types les rfrences dobjet sont types par les interfaces
Support de lhritage multiple dinterfaces lhritage permet de faire voluer et de spcialiser les services
page 12
Applications CORBA
Est dfinie dans un langage ddi (IDL) Reprsente un contrat entre le client et le serveur Dfinit les services que le serveur offre au client
page 13
14
hello.idl :
interface Hello { void sayHello(); };
15
hello_impl.h :
#include <hello_skel.h>
class Hello_impl : public Hello_skel{ public: Hello_impl(); virtual void sayHello(); };
hello_impl.cc :
#include <CORBA.h> #include <hello_impl.h> Hello_impl::Hello_impl() { } void Hello_impl::sayHello() { cout << "Hello World!" << endl; }
A. Diaconescu, L. Pautet & B. Dupouy 16
hello_server.cc :
#include <CORBA.h> #include <hello_impl.h> #include <fstream.h> int main(int argc, char* argv[], char*[]) { CORBA_ORB_var orb = CORBA::ORB_init(argc, argv);//init. de lorb CORBA_BOA_var boa = orb -> BOA_init(argc, argv); Hello_var p = new Hello_impl; //instanciation obj Hello_impl CORBA_String_var sRef = orb -> object_to_string(p); //cration rf const char* refFile = "Hello.ref"; ofstream out(refFile); out << sRef << endl; //sauvegarde rf out.close(); boa -> impl_is_ready(CORBA_ImplementationDef::_nil()); }
A. Diaconescu, L. Pautet & B. Dupouy 17
hello_client.java :
class hello_client { public static void main( String args[] ) { try{ org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(); IORHolder ior_holder = new IORHolder(); String iorString = ior_holder.readIORFile( "Hello.ref" ); org.omg.CORBA.Object object = orb.string_to_object(iorString ); Hello hello = HelloHelper.narrow( object ); hello.sayHello(); } catch ( org.omg.CORBA.SystemException e ) { } } }
18
Vue densemble
Stub Java
Systm e CORBA
ORB Java,
19
CORBA - transparence
Application locale Client Rseau Application rpartie Serveur
interface
interface
interface
objet
objet souche
invocation
objet squelette
objet implmentation
La souche relie le client lORB en transformant des appels de mthodes en mission de requte et rception de rponse Le squelette relie lORB lobjet dimplmentation en transformant des appels de mthodes en rception de requte et mission de rponse => Pour le client et lobjet implmentation, lemballage des paramtres, le transport des requtes, la localisation des objets sont cachs
A. Diaconescu, L. Pautet & B. Dupouy page 20
IDL standard pour dfinir les interfaces Diffrents langages de programmation pour les implmentations
=> CORBA rend possible linteroprabilit entre des langages de programmation diffrents
21
squelette (skel)
Solaris
XP
MacOS
Linux
Solaris
XP
MacOS
Souche et squelette gnrs automatiquement par un compilateur pour un langage de programmation partir de linterface Interoprabilit pour traiter des diffrentes htrognits (OS, langage, matriel, ) Un compilateur applique linterface la projection du langage IDL vers un langage de programmation Un client crit en L1 invoque une souche en L1 alors que Un squelette crit en L2 invoque un objet implmentation en L2
A. Diaconescu, L. Pautet & B. Dupouy page 22
IDL
Client
(C)
Obj Impl
(C++)
SKEL ORB
Cm p. Cm p. STUB Java C
SKEL
ORB TCP/IP
TCP/IP
ATM
ATM
IPX
OSI
Rseau
A. Diaconescu, L. Pautet & B. Dupouy page 23
OSI
IPX
Inter-ORB Protocol
Implementation Repository
Server
Object (Servant)
operation()
out args + return value
DII
IDL Skels
DSI
Object Adapter
ORB CORE
CDR
GIOP/IIOP
TCP
page 24
localisation et la dsignation des objets em/dpaquetage des paramtres (un/marshalling) invocation des mthodes et gestion des exceptions protocole de communication (TCP, ATM, ) gestion des ressources (processus, mmoire, )
Souche prpare les paramtres dentre de linvocation dcode les paramtres de sortie et le rsultat Souche statique une par type dobjet serveur invoquer identique aux souches clientes RPC gnre la compilation partir de linterface IDL Souche dynamique souche gnrique construisant dynamiquement tout type de requtes permet dinvoquer des objets serveurs que lon dcouvre lexcution (i.e. dont on ne connat pas linterface la compilation)
A. Diaconescu, L. Pautet & B. Dupouy page 26
Squelette symtrique de la souche dcode les paramtres dentre des invocations prpare les paramtres de sortie et le rsultat Squelette statique un par type dobjet serveur invoquer identique aux squelettes clients RPC gnr la compilation partir de linterface IDL Squelette dynamique squelette gnrique invoquant dynamiquement les mthodes de tout type dobjet dimplmentation permet dinvoquer des objets serveurs que lon dcouvre lexcution (i.e. dont on ne connat pas linterface la compilation)
A. Diaconescu, L. Pautet & B. Dupouy page 27
Adaptateur dobjets rceptacle pour les objets serveurs interface entre les objets serveurs et lORB gre linstanciation des objets serveurs cre les rfrences dobjets aiguille les invocations de mthodes vers les objets serveurs plusieurs adaptateurs peuvent cohabiter sur une mme machine dans des espaces dadressage Rfrence dobjets info identifiant de manire unique un objet dans lORB <interface de lobjet><adresse rseau><cl de lobjet> Interface de lobjet : diffrencie les types dobjets Adresse rseau : adresse IP et numro de port Cl de lobjet : identit du couple adaptateur et objet
A. Diaconescu, L. Pautet & B. Dupouy page 28
CORBA Rfrentiels
Le rfrentiel dinterfaces (Interface Repository) base de donnes des informations sur les types dIDLs oprations permettant laccs dynamique aux informations (ainsi que la modification dinformations) un par environnement (groupement logique de machines) possibilit de fdrer les rfrentiels de diffrents environnements Le rfrentiel dimplantation (Implementation Repository) base de donnes des informations sur:
la localisation de serveurs qui grent des objets distants vers o faut-il acheminer les requtes client pour un certain objet distant? Les instructions excuter pour dmarrer un serveur, dans le cas o ce serveur serait indisponible larriv dune requte client Ltat courant de chaque serveur enregistr
OMG CORBA
IDL - langage de description dinterfaces (Interface Definition Language)
page 30
Langage pivot de spcification - Espranto entre les langages de programmation Utilis pour dcrire les interfaces dObjets CORBA Une interface dcrit les oprations et les attributs dun Objet CORBA
Indpendant des langages de programmation
Projections (mapping) vers des langages de programmation orients objet ou non Standardiss : C++, Java, Ada, Smalltalk, C, Cobol Exotiques: Python, Perl, Modula,
Une projection est applique par un compilateur pour produire Souches Squelettes (et Patrons pour implmentation) Chaque ORB offre des compilateurs pour les langages quil supporte
page 31
Langage dclaratif fortement typ et orient objet Oprations et attributs sur des objets Hritage multiple sans surcharge doprations ou dattributs Encapsulation de lobjet implmentation
32
page 33
Sujets abords :
Spcification ( name scoping ) et Module Type Constante Interface Attribut Opration Exception Hritage Description gnrale et exemple Dfinition formelle
35
Une dfinition IDL est constitue de plusieurs modules Chaque module reprsente un contexte de nommage pour les dfinitions contenues
Exem ple :
module BanqueDef { interface Banque { //... }; interface Compte { //... }; };
36
const long N = 100; module Namespace { module Types { typedef string Name; }; interface Group { ::Namespace::Types::Name Users[N]; }; };
Des modules (imbriqus) servant despaces de noms dfinissant Des interfaces dfinissant en plus des attributs et des oprations Des types, des constantes, des exceptions,
page 37
Types simples
short, long, float, double, char, string, boolean, octet, ... any (permet la spcification des valeurs de tout type IDL) long long, long double, wchar, wstring, fixed, ...
Types complexes
...
A. Diaconescu, L. Pautet & B. Dupouy 38
Enumration Attribue une collection de valeurs possible une variable A tout moment, le variable peut prendre une des valeurs spcifies dans lnumration
Exem ple :
module BanqueDef { enum Monnaie{euro, pound, dollar, yen}; interface Compte { readonly attribute Montant solde; readonly attribute Monnaie soldeMonnaie; //... }; };
A. Diaconescu, L. Pautet & B. Dupouy 39
Exem ple :
module BanqueDef {
struct DetailsClient { string clientID; string nom; string prenom; short age; //... };
Dfinit une structure qui peut contenir seulement un des plusieurs membres chaque moment Economise la mmoire
Exem ple :
enum typeDate { numerique, strMMJJAA, strJJMMAA }
Exem ple :
typedef Compte portfolio[MAX_TYPES_COMPTE][MAX_COMPTES]
Doit tre dfinit avec typedef pour tre utilis comme paramtre, attribut ou rsultat retourn
42
Tableau unidimensionnel
Exem ple :
struct ComptesLimites { string banqueID<10>; sequence<Compte, 50> comptes; // max. longueur de la squence est 50 }; struct UnlimitedAccounts { string banqueID<10>; sequence<Compte> comptes; // pas de longueur max. de la squence };
A. Diaconescu, L. Pautet & B. Dupouy 43
Typedef
Permet dattribuer de noms plus simples / pratiques aux types de donnes existants
Exem ple :
module BanqueDef { interface Compte { //... }; typedef Compte CompteStandard; };
//CompteStandard constituera un alias pour le type Compte dans les dfinitions IDL ultrieures
44
Typedef: Dfinition dun nouveau type partir dun type existant Union: type semblable une union en C ensemble de choix - paramtr par un discriminant de type discret (switch) Enum: type discret compos de valeurs symboliques Array: type tableau implicite et contraint A. Diaconescu, L. Pautet & B. Dupouy page 45
Integer
Any: type opaque dont la gestion (em/dballage) revient lutilisateur Object: type de rfrence dobjet dont drive toutes les interfaces Squence: type tableau gnrique contraint (sequence <type, size>) ou non contraint (squence <type>) Fixed point: flottant virgule fixe (456,78 correspond fixed <5,2>)
page 46
Le type de la constante doit tre un type de taille prdfinie La valeur dune sous-expression <subexp> doit tre valide pour le type de la constante
| ^ &
<< >>
* / + - %
page 47
Dfinitions dattributs Dfinitions doprations Dfinitions dexceptions Dfinitions de types Dfinitions de constantes
Doivent tre spcifis lintrieu r d u ne interface Peu vent tre spcifis en d ehors (au plu s hau t niveau ) d e d finitions d interfaces
48
Linterface reprsente la notion fondamentale propre aux objets rpartis Lhritage multiple et rpt (en losange) est possible Toute interface drive du type de rfrence CORBA::Object La pr-dclaration constitue une solution pour les visibilits croises
page 49
exemple de getter/setter en Java: java.lang.string Title (); void Title (java.lang.string value); float Balance ();
Laccs un attribut se fait au travers de mthodes (getter et setter) quelque soit le langage de programmation Un attribut readonly nest accessible quen lecture et ne dispose donc que dun getter
page 50
Exem ple :
module BanqueDef { typedef float MontantSolde; // Type pour reprsenter le solde //... interface Compte{ exception FondsInsuffisants {}; void retirer(in Montant montant) raises (FondsInsuffisants); void deposer(in Montant montant); } }
A. Diaconescu, L. Pautet & B. Dupouy 51
Paramtre : in : initialis seulement par le client et pass lobjet out : initialis seulement par lobjet et pass au client inout : initialis par le client et pass lobjet; lobjet peut
modifier la valeur avant la retourner au client
Permet au systme CORBA de savoir dans quel sens encoder/dcoder (marshalling/unmarshalling) les paramtres
A. Diaconescu, L. Pautet & B. Dupouy 52
interface Stack { exception Empty; readonly attribute long Length; oneway void Push (in long Value); long Pop () raises (Empty); };
Une mthode peut lever une ou plusieurs exceptions Linvocation dune mthode peut donner lieu un passage de contexte dexcution auprs du serveur (variables denvironnement) Une mthode oneway (sans paramtre inout, out, sans exception, sans paramtre de retour) est asynchrone (non-bloquante)
A. Diaconescu, L. Pautet & B. Dupouy page 53
exception No_Such_Name ; exception Not_Unique { long Many; }; long Lookup (in string Name) raises (No_Such_Name, Not_Unique);
Il existe des exceptions dfinies par lutilisateur, dautres prdfinies par CORBA et dautres enfin propres au vendeur Dans une mthode, lexception correspond un paramtre de retour dont on peut interroger ltat
page 54
Une interface peut hriter de plusieurs interfaces Tous les lments de linterface hrite sont disponibles dans linterface drive
Exem ple :
module BanqueDef{ typedef float Montant; // Type pour reprsenter le montant interface Compte{ //... }; interface CompteCourant : Compte{ readonly attribute Montant limiteDecouvert; boolean commanderChequier (); }; interface CompteEpargne : Compte { float calculerInteret (); }; };
A. Diaconescu, L. Pautet & B. Dupouy 55
Une interface peut hriter de plusieurs interfaces Une interface hrite de constantes, types, exceptions, attributs et oprations de son interface parente Lhritage autorise la surcharge de types, constantes et exceptions Lhritage interdit la surcharge dattributs et oprations La rptition dun hritage se fait avec une seule instance
A. Diaconescu, L. Pautet & B. Dupouy page 56
IDL Stubs
ORB Interface
IDL Skels
Object Adapter
ORB CORE
CDR
GIOP/IIOP
TCP
page 57
Dveloppement en OMG IDL Conception dune interface OMG IDL Gnration pour un langage de programmation Dune souche Dun squelette et dun patron de limplmentation Dveloppement en langage de programmation Dveloppement de limplmentation partir du patron Larbre dhritage dans larbre de lIDL est souvent totalement diffrent de celui du langage de programmation Enregistrement des objets auprs de lORB chez le serveur Obtention de rfrences auprs de lORB chez le client Premire rfrence tant souvent celle dun serveur de noms Rfrence bien connue, chane de caractres (fichier, cmdline) Courbe dapprentissage forte selon la projection du langage (Ada << Java << C++ <<<< C)
A. Diaconescu, L. Pautet & B. Dupouy page 58
OMG CORBA
Projection IDL vers Java
page 59
IDL-JAVA: objectif
Aux clients Java daccder des Objets CORBA Aux objets Java (servants) dtre publis et rendus accessibles en tant quObjets CORBA
60
Les noms et les identificateurs IDL sont projets en Java sans modification
Un lment IDL peut tre projet en plusieurs lments Java
Exemples : interfaces IDL ou diffrents structures IDL (enum, struct, union, ...)
61
Une interface IDL est projete en plusieurs classes Java : nom original + suffixes
interface (ct client / applicatif) interface (ct serveur / Obj. CORBA) mthodes lies au type dfinit emballage params out/inout
63
void methode(out long long i); LongHolder myLongHolder = new LongHolder(17); myCORBAObj.methode(myLongHolder); myLongHolder.value ...
A. Diaconescu, L. Pautet & B. Dupouy 64
Client.java
IDL module Java package (mme nom) IDL interface Java public interface (mme nom)
Si lattribut IDL est dfinit comme readonly seulement une mthode get en Java
65
IDL-Java - Projection
IDL [unsigned] short [unsigned] long [unsigned] long long float double long double char, wchar string, wstring boolean Octet any void short int long float double Java IDL module interface attribute operation struct enum union fixed array Java package Java interface Java methods getter/setter Java method Java class Java class Java class java.math.BigDecimal Java array Java
java.math.BigFloat
char java.lang.String boolean byte org.omg.CORBA.Any void
sequence
const exception
Java array
static final (interface|attribut) java.lang.Exception subclass
page 66
Mots cls rservs du langage Java Identificateurs rservs pour la projection Holder Helper,
page 67
page 69
exception OMG IDL => classe Java membre OMG IDL => classe Java (struct)
// OMG IDL exception Error { long Code; };
// Java public final class Error extends org.omg.CORBA.UserException { public int Code; public Error(){}; public Error(int Code){}; };
page 70
// Java interface Stack { void Pop (IntHolder v) throws Empty {}; void Push (int v) {}; int Top () throws Empty {}; };
une interface <i> Une interface pour les oprations <i>Operations une classe de souche <i>Stub une classe de squelette <i>POA (_<i>ImplBase) une classe dobjet implmentation <i>Impl une classe <i>Holder une classe <i>Helper
page 71
Java - opration
opration OMG IDL => mthode Java Mais paramtre Java pass par valeur
// OMG IDL long M (in T x, inout T y, out T z);
// Java int M (T x, THolder y, THolder z) {}; int x, a, b; THolder y = new THolder(1024); THolder z = new THolder(); O.M (x, y, z); a = y.value; b = z.value;
A. Diaconescu, L. Pautet & B. Dupouy page 73
Pour satisfaire les modes inout et out, tous les types disposent de Holder
Dfinis par omg.org.CORBA pour les types de base Gnrs en plus des souches et squelettes pour les types de lutilisateur
// Java public final class TYPEHolder { public TYPE value; public TYPEHolder(); public TYPEHolder(TYPE v){value = v}; };
74
Pour em/dballer une donne vers un Any ou pour convertir vers un type, tous les types disposent de Helper
Dfinis par omg.org.CORBA pour les types de base Gnrs en plus des souches et squelettes pour les types de lutilisateur
// Java public final class TYPEHelper { public static void insert (Any a; TYPE v) {}; public static TYPE extract (Any a) {}; public TYPE narrow (Object ob) {}; };
page 75
Java ct client
public class Client { public static void main (String args) { // Crer un orb ORB orb = ORB.init (args, null); // Retrouver la rfrence du client CORBA.Object object = orb.string_to_object (args[0]); // Construction dune rfrence objet type myInterface myObject = myInterfaceHelper.narrow (Object); // Invocation dune mthode myObject.myOperation(); };
A. Diaconescu, L. Pautet & B. Dupouy 76
Java - ct serveur
public class Server { public static void main (String args) { // Crer un orb puis un adaptateur ORB orb = ORB.init (args, null); POA rootpoa = POAHelper.narrow (orb.resolve_initial_references ("RootPOA")); // Lance ladaptateur rootpoa.the_POAManager().activate(); // Crer un servant chez ladaptateur myInterfaceImpl myImpl = new myInterfaceImpl (); org.omg.CORBA.Object myObject = rootpoa.servant_to_reference(myImpl); // ou directement auprs du rootpoa // org.omg.CORBA.Object myObject = myImpl._this(orb); // Affiche lIOR pour les clients System.out.println (orb.object_to_string (myObject)); // Lancer lorb pour traiter les requtes orb.run(); }; A. Diaconescu, L. Pautet & B. Dupouy
page 77
Java : ct serveur
Dcouplage entre la rfrence dun Objet CORBA et le servant associ a cette rfrence
Un Serveur doit crer et exporter la rfrence dun Objet CORBA afin de permettre aux clients daccder cet Object CORBA Une rfrence doit indiquer lObjet CORBA, qui doit tre activ via une association un servant (implmentation effective, en Java, C++, )
78
Java : ct serveur
Inscrire le servant et lIdentifiant de lObject CORBA auprs dun POA (Portable Object Adapter)
79
- lenregistrement de servants
Java : ct serveur
Ex: org.omg.CORBA.Object obj = myHelloServant._this(orb); Enregistre le servant avec le POA par dfaut (le rootPOA), en lui associant un ID Objet unique Cre et retourne lObjet CORBA de ce servant
NOTE: afin de convertir la rfrence de lObjet CORBA vers une rfrence du type du servant il faut appeler la mthode narrow() de la classe Helper du type concern: Ex: Hello myHello = HelloHelper.narrow(obj);
A. Diaconescu, L. Pautet & B. Dupouy 80
Lobjet implmentation hrite du squelette Ds lors il ne peut hriter dune autre classe
omg.org.CORBA. Object org.omg.PortableServer. Servant extends class <I>POA extends class <I>Impl
page 81
Le standard Java inclut le support dun ORB CORBA Les mcanismes de configuration de la JVM, via lintrospection, permettent de modifier la bibliothque dimplantation utilise Mcanismes standard de configuration Orb.propreties -> fichier de configuration standard Portabilit du code des stubs/skels Implantation portable du cur de lintergiciel: org.omg.CORBA.portable, org.omg.CORBA.portable_2_3, and org.omg.PortableServer.portable Possibilit de spcifier lors de lexcution du nud la classe Java implantant lORB: org.omg.CORBA.ORBClass Note: le JDK de Sun dispose dune implantation de CORBA, mais elle est
incomplte et non standard, lui prfrer une autre implantation, telle que JacORB.
A. Diaconescu, L. Pautet & B. Dupouy page 82