Vous êtes sur la page 1sur 81

OMG CORBA

www.omg.org www.corba.org

A. Diaconescu, B. Dupouy, L. Pautet


http://perso.telecom-paristech.fr/~diacones/comasic

Plan

CORBA vue densemble IDL (Interface Definition Language) Translation IDL vers Java

A. Diaconescu, L. Pautet & B. Dupouy

CORBA contexte et motivations

Contexte et besoins (~1990) :


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

A. Diaconescu, L. Pautet & B. Dupouy

CORBA approche et objectifs

Proposer une architecture et un intergiciel standards pour les systmes rpartis, permettant :

Linteroprabilit entre des applications et des platesformes htrognes

La conception modulaire par les modles de programmation Orients Objet


La transparence vis--vis des dtails dimplmentation

A. Diaconescu, L. Pautet & B. Dupouy

OMG Consortium

OMG - Object Management Group Cr en 1989 de plus de 800 membres


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

OMG : Object Management Group

Consortium international, non-profit

OMA : Object Management Architecture

Une architecture globale ddie la programmation oriente objet reparti


Intergiciel (mechanisms et services) Langage commun de dfinition dinterfaces Systme de communication pour objets rpartis Bus logiciel analogue un bus matriel

CORBA : Common Object Request Broker Architecture

IDL : Interface Description Language

ORB : Object Request Broker

A. Diaconescu, L. Pautet & B. Dupouy

page 6

OMA - architecture
Application Objects ORB

Domain Interfaces

Common Object Services

Specs de services de base Nommage Evnement Transaction

Common Facilities

Common Services Application Objects

Common Facilities

Applications mises en place par les dveloppeurs

Infrastructures indpendantes des domaines (horizontales) Interface utilisateur Gestion de linformation Gestion du systme Gestion des tches

Domain Interfaces

Object Request Broker

Systme de communication CORBA: specs de lORB

Infrastructures dpendantes des domaines (verticales) Simulation Tlcommunications


page 7

A. Diaconescu, L. Pautet & B. Dupouy

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

Common Object Request Broker Architecture

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

Quelques implantations connues : Orbix et Orbacus de IONA, VisiBroker de Borland,

A. Diaconescu, L. Pautet & B. Dupouy

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

A. Diaconescu, L. Pautet & B. Dupouy

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

Support pour la portabilit :

Support pour linteroprabilit :


CORBA - principes fondamentaux

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

A. Diaconescu, L. Pautet & B. Dupouy

page 12

Applications CORBA

Une application CORBA est un ensemble dObjets communicants


Rappel de dfinitions : Interface : ensemble doprations et dattributs dun objet Implantation : code associ aux oprations (dfinies dans une interface) Localisation : machine physique sur laquelle rside lobjet Rfrence : structure ( pointeur) pour accder lobjet

Linterface est un des lments fondamentaux dune application 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

A. Diaconescu, L. Pautet & B. Dupouy

page 13

CORBA Hello World exemple


Client Java : Serveur C++ : Interface IDL :

hello_client.java hello_impl.h, hello_impl.cc, hello_server.cc hello.idl

A. Diaconescu, L. Pautet & B. Dupouy

14

CORBA Hello World exemple Definir linterface

hello.idl :
interface Hello { void sayHello(); };

A. Diaconescu, L. Pautet & B. Dupouy

15

CORBA Hello World exemple Implanter lObjet Hello (C++)

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

CORBA Hello World exemple Implanter le Serveur

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

CORBA Hello World exemple Implanter le Hello Client (Java)

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 ) { } } }

A. Diaconescu, L. Pautet & B. Dupouy

18

CORBA - Hello World exemple

Vue densemble

Stub Java

Skel. C++ compilateur ORB C++,

Systm e CORBA

ORB Java,

A. Diaconescu, L. Pautet & B. Dupouy

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

CORBA htrognit et interoprabilit (1)

Sparation entre linterface et limplmentation :


IDL standard pour dfinir les interfaces Diffrents langages de programmation pour les implmentations

=> CORBA rend possible linteroprabilit entre des langages de programmation diffrents

A. Diaconescu, L. Pautet & B. Dupouy

21

CORBA htrognit et interoprabilit (2)


Client Ada Java C++ C interface IDL souche (stub) ORB Linux

Serveur Ada Java C++ C

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

CORBA - vue gnrale


Com pilateu r Ad a

IDL

Com pilateu r C++

Obj Impl Client (Ada) STUB


(Java)

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

CORBA - architecture gnrale


Interface Repository IDL File IDL compiler Client Obj Ref
in args

Implementation Repository

Server
Object (Servant)

operation()
out args + return value

DII

IDL Stubs ORB Interface

IDL Skels

DSI

Object Adapter

ORB CORE

CDR

GIOP/IIOP

TCP
page 24

A. Diaconescu, L. Pautet & B. Dupouy

CORBA ORB (Courtier ou Mdiateur)

ORB (Object Request Broker)

Composant central du standard CORBA qui fournit un point daccs vers :


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, )

Interface de lORB (ORB Interface)

rend lORB accessible au travers dun ensemble de primitives


A. Diaconescu, L. Pautet & B. Dupouy page 25

CORBA Souches statiques et dynamiques

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

CORBA Squelettes statique et dynamique

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

CORBA Adaptateur et Rfrence

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

un sur chaque site accueillant des objets serveurs


A. Diaconescu, L. Pautet & B. Dupouy page 29

OMG CORBA
IDL - langage de description dinterfaces (Interface Definition Language)

page 30

A. Diaconescu, L. Pautet & B. Dupouy

OMG IDL Interface Description Language

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

A. Diaconescu, L. Pautet & B. Dupouy

page 31

OMG IDL - caractristiques


Langage dclaratif fortement typ et orient objet Oprations et attributs sur des objets Hritage multiple sans surcharge doprations ou dattributs Encapsulation de lobjet implmentation

A. Diaconescu, L. Pautet & B. Dupouy

32

OMG IDL - syntaxe


Syntaxiquement proche du C++ (mais ) De nouveaux mots-cls, types, concepts

module, interface, attribute, readonly, oneway, any, sequence,

A. Diaconescu, L. Pautet & B. Dupouy

page 33

CORBA IDL dfinitions et syntaxe

Sujets abords :

Spcification ( name scoping ) et Module Type Constante Interface Attribut Opration Exception Hritage Description gnrale et exemple Dfinition formelle

Pour chaque sujet :


A. Diaconescu, L. Pautet & B. Dupouy

35

OMG IDL - spcification et module


Une dfinition IDL est constitue de plusieurs modules Chaque module reprsente un contexte de nommage pour les dfinitions contenues

Les modules et les interfaces forment des espaces de nommage

Exem ple :
module BanqueDef { interface Banque { //... }; interface Compte { //... }; };

Rfrence lintrieu r d es interfaces


Banque Compte

Rfrence lextrieu r d es interfaces


BanqueDef::Banque BanqueDef::Compte

A. Diaconescu, L. Pautet & B. Dupouy

36

OMG IDL - spcification et module


<specification> ::= <definition>+ <definition> ::= <module> | <interface> | <type> | <constant> | <exception> <module> ::= <definition>+ <interface> ::= <header> <body> <body> ::= <export>* <export> ::= <attribute> | <operation> | <type> | <constant>| <exception>

const long N = 100; module Namespace { module Types { typedef string Name; }; interface Group { ::Namespace::Types::Name Users[N]; }; };

Une spcification ou un module comporte


Des modules (imbriqus) servant despaces de noms dfinissant Des interfaces dfinissant en plus des attributs et des oprations Des types, des constantes, des exceptions,

Loprateur :: permet de rfrencer des entits

A. Diaconescu, L. Pautet & B. Dupouy

page 37

OMG IDL types de donnes

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

enum struct union array sequence

...
A. Diaconescu, L. Pautet & B. Dupouy 38

OMG IDL le type enum


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

OMG IDL le type struct


Structure Permet de grouper diffrents membres

Chaque membre doit tre nomm et typ

Doit inclure au moins un membre

Exem ple :
module BanqueDef {

struct DetailsClient { string clientID; string nom; string prenom; short age; //... };

interface Banque { DetailsClient getDetailsClient (in string clientID); //... } };


40

A. Diaconescu, L. Pautet & B. Dupouy

OMG IDL le type union

Dfinit une structure qui peut contenir seulement un des plusieurs membres chaque moment Economise la mmoire

Consomme seulement lespace requis par le plus grand des membres

Exem ple :
enum typeDate { numerique, strMMJJAA, strJJMMAA }

struct structureDate { short Jour; short Mois; short Annee; };


union Date switch (typeDate) { case numerique: long formatDigital; case strMMJJAA: case strJJMMAA: string formatStr; default: structureDate formatStruct; Le discriminateur peu t tre : };
integer, char, boolean ou enu m A. Diaconescu, L. Pautet & B. Dupouy 41

OMG IDL le type array


Tableau Permet de dfinir des tableaux


multidimensionnels pour tout type de donne IDL dimensions prdfinies

Exem ple :
typedef Compte portfolio[MAX_TYPES_COMPTE][MAX_COMPTES]

Doit tre dfinit avec typedef pour tre utilis comme paramtre, attribut ou rsultat retourn

A. Diaconescu, L. Pautet & B. Dupouy

42

OMG IDL le type sequence

Tableau unidimensionnel

pour tout type de donne IDL dimensions prdfinies ou flexibles (non-dfinies)

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

OMG IDL dfinition de types de donnes

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

A. Diaconescu, L. Pautet & B. Dupouy

44

OMG IDL types de donnes


<type> ::= <constructed_type> | <simple_type> | <template_type> <constructed_type> ::= <union_type> | <struct_type> | <enum_type> | <array> <simple_type> := <floating_point_type> | <integer_type> | <object_type> | <any_type> | <octet_type> | char_type> | <wide_char_type> | <boolean_type> <template_type> := <sequence_type> | <string_type> | <wide_string_type> | <fixed_point_type> typedef string Name; sequence <Name> Names; struct Group { string Aliases[3]; Names Users; }; enum Sex {Male, Female}; union Status switch (Sex) { case Male: boolean Bearded; default: long Children; };

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

OMG IDL types de donnes


Type Type gnrique String Wstring Fixed Sequence Void Unsigned Short (2) Long (4) Unsigned Long (4) Long Long (8) Unsigned Long Long (8) Short (2) Octet (1) Char (1) Wchar (2) Boolean Double (8) Long Double (16) Floating Point Float (4) Type simple Array Type construit Enum Struct Union

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>)

A. Diaconescu, L. Pautet & B. Dupouy

page 46

OMG IDL - constante


<constante> ::= "const" <constante_type> <identifier> "=" <expression> <exp> ::= [<subexp>] <operator> <subexp> <operator> ::= <unary_operator> | <binary_operator> const long N_Components = 150; const long Component_Size = 8; const long Component_Table_Size = N_Components * Component_Size ; const string Warning = "Beware !"; const Octet Invalid = 2 * 150 60; // (2 * 150) 60 = 300 60 = 240
Unary operator + - ~ Binary operator

plus, minus, not

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

| ^ &

or, xor, and

<< >>
* / + - %

shift left, shift right


mul, div plus, minus, mod

A. Diaconescu, L. Pautet & B. Dupouy

page 47

OMG IDL - interface

Une dfinition dinterface IDL contient typiquement :


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

A. Diaconescu, L. Pautet & B. Dupouy

48

OMG IDL - interface


<interface> ::= <header><body> <header> ::= "interface" <identifier> [: <inheritance>] <inheritance>::= <interface_name> {, < interface_ name>} <body> ::= <export> * <export> ::= <attribute> | <operation> | <type> | <constant> | <exception> interface Chicken; interface Egg; interface Chicken { enum State {Sleeping, Awake}; attribute State Alertness; Egg lay(); }; interface Egg { Chicken hatch(); };

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

A. Diaconescu, L. Pautet & B. Dupouy

page 49

OMG IDL - attribut


<attribute> ::= " attribute " [" readonly "] <type> <declarators> <declarators> ::= <declarator> {, declarator} interface Account { attribute string Title; readonly attribute float Balance; }; struct Coord { unsigned long X, Y; }; interface Triangle { attribute Coord Points[3]; };

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

A. Diaconescu, L. Pautet & B. Dupouy

page 50

OMG IDL - opration


Dfinit la signature dune fonction de lobjet La signature contient gnralement :


Le type de donne du rsultat Des paramtres et leurs directions Des exceptions

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

OMG IDL direction de paramtres

Chaque paramtre indique sa direction de passage entre le client et lobjet

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

OMG IDL - opration


<operation> ::= ["oneway"] <type> <identifier> <parameters> [<raise>] [<context>] <parameters> ::= <parameter>* <mode> ::= "in" | "out" | "inout" <parameter> ::= <mode> <type> <identifier> <raise> ::= "raises" (<exception>, {, <exception>}) <context> ::= "context" (<string>, {, <string>})

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

OMG IDL - exception


<exception> ::= " exception" <identifier> <member>* <member> ::= <type> <declarators> <declarators> ::= <declarator> {, >declarator}
exceptions prdfinies: OBJECT_NOT_EXIST COMM_FAILURE BAD_PARAM

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

A. Diaconescu, L. Pautet & B. Dupouy

page 54

OMG IDL hritage


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

OMG IDL hritage


<interface> ::= <header><body> <header> ::= "interface" <identifier> [: <inheritance>] <inheritance>::= <interface_name> {, < interface_ name>} <body> ::= <export> * <export> ::= <attribute> | <operation> | <type> | <constant> | <exception> interface Bird { void eat (); }; interface Egg; interface Chicken : Bird { Egg lay(); }; interface Egg { Chicken hatch(); };

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

CORBA dveloppement (1)


IDL File IDL compiler Client Server Object (Servant)

IDL Stubs

ORB Interface

IDL Skels

Object Adapter

ORB CORE

CDR

GIOP/IIOP

TCP
page 57

A. Diaconescu, L. Pautet & B. Dupouy

CORBA dveloppement (2)

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

A. Diaconescu, L. Pautet & B. Dupouy

IDL-JAVA: objectif

Gnrer les classes Java ncessaires pour permettre :


Aux clients Java daccder des Objets CORBA Aux objets Java (servants) dtre publis et rendus accessibles en tant quObjets CORBA

Exemple : stubs, skeletons, interfaces Java,

A. Diaconescu, L. Pautet & B. Dupouy

60

IDL-Java projection automatique

Compilateur IDL vers Java

conforme au standard OMG

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, ...)

A. Diaconescu, L. Pautet & B. Dupouy

61

IDL-JAVA : fichiers gnrs

Une interface IDL est projete en plusieurs classes Java : nom original + suffixes

Exemple: BanqueDef.idl >> compilation IDL Java :


BanqueDef.java BanqueDefOperations.java BanqueDefHelper.java BanqueDefHolder.java _BanqueDefStub.java BanqueDefPOA.java BanqueDefPOATie.java

interface (ct client / applicatif) interface (ct serveur / Obj. CORBA) mthodes lies au type dfinit emballage params out/inout

- stub - skeleton - skeleton (variant pour la dlgation)

Le dveloppeur doit implanter la class BanqueDefImpl.java


A. Diaconescu, L. Pautet & B. Dupouy 62

IDL Java : class Helper


Offre des oprations statiques pour manipuler le type Exemple :


org.omg.CORBA.Object obj = orb.string_to_object (ior); //ior = la rfrence de lobjet CORBA Hello hello = HelloHelper.narrow (obj);

A. Diaconescu, L. Pautet & B. Dupouy

63

IDL Java : class Holder

Offre du support pour limplantation de paramtres de type out et inout


Exemple Definition.idl

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

Java-IDL : projections directes


IDL module Java package (mme nom) IDL interface Java public interface (mme nom)

Hritage dinterfaces IDL hritage dinterfaces Java


Attributs IDL une paire de mthodes Java (get/set)

Si lattribut IDL est dfinit comme readonly seulement une mthode get en Java

A. Diaconescu, L. Pautet & B. Dupouy

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

A. Diaconescu, L. Pautet & B. Dupouy

page 66

Java - identificateurs et module

identificateur OMG IDL => identificateur Java En cas de conflits

module OMG IDL => package Java


// OMG IDL module Namespace { }; // Java package Namespace { };

Mots cls rservs du langage Java Identificateurs rservs pour la projection Holder Helper,

Lidentificateur Java est prcd dun _

A. Diaconescu, L. Pautet & B. Dupouy

page 67

Java - structure et numration

structure OMG IDL => classe Java


// OMG IDL struct Point { long X, Y; }; // Java public final class Point { public int X; public int Y; public Point (int X, int Y) {}; };

enum OMG IDL => classe Java


// OMG IDL enum Color {Red, Green, Blue}; // Java public final class Color { public static final int _Red = 0; public static final Color Red = new Color(_Red); public static final int _Blue = 2; public static final Color Blue = new Color(_Blue); public int value () {}; public static Color from_int (int value) {}; protected Color (int) {}; }; page 68

A. Diaconescu, L. Pautet & B. Dupouy

Java - union et dfinition de type

union OMG IDL => classe Java


// OMG IDL union Status (boolean) { case TRUE: boolean Bearded; case FALSE: long Children; }; // Java public final class Status { public Status() {}; public boolean discriminator () {}; public boolean Bearded () {}; public void Bearded (boolean v) {}; public long Children () {}; public void Children (long v) {}; };

typedef OMG IDL => remplac par le type alias


// OMG IDL typedef int Duration; struct Animal { Duration Age; }; // Java public final class Animal { public int Age; public Animal (int Age) {}; };

A. Diaconescu, L. Pautet & B. Dupouy

page 69

Java - constante et exception

constante OMG IDL => public static final


// OMG IDL interface Math { const double Pi = 3.14; }; module Math { const double Pi = 3.14; }; // Java public final class Math { public static final double Pi = 3.14; }; public final class Pi { public static final double value = 3.14; };

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

A. Diaconescu, L. Pautet & B. Dupouy

Java - interface et gnration

interface OMG IDL => interface Java


// OMG IDL interface Stack { void Pop (out long v) raises Empty; void Push (in long v); long Top () raises Empty; };

Pour chaque interface <i>


// 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

A. Diaconescu, L. Pautet & B. Dupouy

page 71

Java construction imbrique et attribut

Constructions imbriques => dans un package Java


// OMG IDL interface Stack { exception Empty; }; // Java package StackPackage; public final class Empty extends org.omg.CORBA.UserException {};

attribut OMG IDL => getter/setter Java


// OMG IDL interface Account { readonly attribute long Balance; string attribute Name; }; // Java interface Account { int Balance () {}; void Name (string value) {}; string Name () {}; . };
page 72

A. Diaconescu, L. Pautet & B. Dupouy

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

Java Holder / exemple

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}; };

A. Diaconescu, L. Pautet & B. Dupouy

74

Java Helper / exemple

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) {}; };

A. Diaconescu, L. Pautet & B. Dupouy

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

- Objets CORBA et servants

Java : ct serveur

Dcouplage entre la rfrence dun Objet CORBA et le servant associ a cette rfrence

Le servant fournit les services dcrits par lObjet CORBA

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++, )

A. Diaconescu, L. Pautet & B. Dupouy

78

- lactivation dObjets CORBA

Java : ct serveur

Deux actions sont ncessaires :

Instancier le servant ( associer avec lObjet CORBA)

Ex: HelloImpl myHelloServant = new HelloImpl();

Inscrire le servant et lIdentifiant de lObject CORBA auprs dun POA (Portable Object Adapter)

Ceci active lObjet CORBA de ce servant et le rend disponible aux clients

A. Diaconescu, L. Pautet & B. Dupouy

79

- lenregistrement de servants

Java : ct serveur

Plusieurs faons possibles:

Appeler la mthode _this() sur le servant


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

Appeler la mthode servant_to_reference() sur le POA cibl

Ex: org.omg.CORBA.Object obj = rootPOA.servant_to_reference(myHelloServant);

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

Java implmentation (hritage)


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

import org.omg.CORBA.*; import java.lang.*;


public class <I>Impl extends <I>POA { public Op (..); }

interface <I>Operations extends interface <I> implements

A. Diaconescu, L. Pautet & B. Dupouy

page 81

Java - connexions avec la JVM

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