Vous êtes sur la page 1sur 7

IDL

CORBA IDL (Interface Definition Language)

IDL CORBA

Langage de dfinition des services proposs par un objet serveur CORBA ! seules les mthodes de l'interface pourront tre invoques distance ! interface IDL = contrat entre le client et le serveur 1. Ecriture d'une interface IDL 2. Ecriture d'une classe implantant l'interface 3. Ecriture du programme serveur 4. Ecriture du programme client

Lionel Seinturier Universit Pierre & Marie Curie


Lionel.Seinturier@lip6.fr

1. dclaration des services accessibles distance 2. dfinition du code des services 3. instanciation et enregistrement de l'objet serveur 4. interactions avec le serveur 02/03/04
Lionel Seinturier CORBA 2 Lionel Seinturier

CORBA

IDL
Structure dun fichier IDL
3 lments principaux - module : un espace de dfinitions - interface : un regroupement de services - mthode : un service
<modules> <interfaces> <methodes> module universite { interface Etudiant { string coordonnees(); boolean bacplus( in long annee ); }; };

IDL
Syntaxe IDL
proche de la syntaxe C/C++ commentaires /* */ ou // identificateurs : squence de caractres alphabtiques, chiffres ou _ (doivent commencer par un caractre alphabtique) casse des identificateurs non dterminante ! age et Age mme identificateur mais utilisation identificateur doit respecter sa casse de dfinition dfinition CoordX devra tre utilis CoordX Mots cls IDL
any attribute boolean case char const context default double CORBA enum exception FALSE float in inout interface long module Object octet oneway out raises readonly sequence short string 4 struct switch TRUE typedef union unsigned void wchar wstring Lionel Seinturier

plusieurs modules possibles dans un mme fichier modules peuvent tre embots les uns dans les autres ou non lments "secondaires" pouvant tre dfinis dans un fichier IDL : types, constantes, exceptions, attributs
CORBA 3 Lionel Seinturier

IDL
Syntaxe IDL
Diffrences / la syntaxe C/C++ - identificateur pour chaque paramtre dune mthode - liste de paramtres vide () pas (void) - les caractres ne peuvent pas tre associs aux modificateurs signed ou unsigned

IDL
Syntaxe IDL
Elments syntaxiques - types de base & construits - modules - interfaces - mthodes - constantes - exceptions - attributs - hritage d'interfaces

Prprocesseur - identique celui de C/C++ - substitution de macros (#define) - compilation conditionnelle (#ifdef et #ifndef) - inclusion de sources (#include) - directives de compilation (#pragma)

CORBA

Lionel Seinturier

CORBA

Lionel Seinturier

IDL
OS, archi., langage reprsentation normalise conversion prise en charge par l'ORB si machines avec reprsentation

IDL
Types de base : rels
float double long double : 4 octets : 8 octets : 16 octets 17.5e-3 -8.0 0.57e3

Types de base : entiers


Reprsentation signe short long long long : 2 octets : 4 octets : 8 octets [-32768,+32767] [-231, 231-1] [-263, 263-1]

notation scientifique

Types de base : boolens, chanes et caractres


boolean char string string<n> wchar wstring
Lionel Seinturier CORBA

Reprsentation non signe unsigned unsigned unsigned


short long long long

: 2 octets : 4 octets : 8 octets

[0,65535] [0, 232-1] [0, 264-1]

: 2 valeurs TRUE et FALSE : caractre (ISO Latin-1) : chane de caractres taille quelconque : chane de caractres taille max n : caractre tendu (Unicode) 16 bits : chane de caractres tendus
8

'e' '\'' '\\' "hello"

Transmis tel quel sans conversion : type octet


CORBA 7

Lionel Seinturier

IDL
Types construits : structures, numrations, dfinitions
Structures : regroupement d'attributs ( struct C, tuple SQL)
struct identificateur { liste d'attributs typs ; }; struct personne { string nom; long age; };

IDL
Types construits : unions
Union : type variable en fonction d'un type discriminant (de base ou numr)
enum categorie { racine, noeud, feuille }; typedef ... tracine; typedef ... tnoeud; typedef ... tfeuille; union arbre switch(categorie) { case racine: tracine dracine; case noeud: tnoeud dnoeud; case feuille: tfeuille dfeuille; };

! utilisation possible du type personne Enumration : liste de valeur pour un type ( enum C)
enum identificateur { liste de valeurs , }; enum couleur {rouge, vert, bleu};

! utilisation possible du type couleur ! Attention : unicit des noms de valeurs entre +sieurs enum enum piste { rouge, noire }; interdit Dfinition de type : utilisation d'un raccourci pour un type ( typedef C)
typedef type identificateur; typedef string<16> tprenom;
CORBA 9 Lionel Seinturier

Type par dfaut possible lorsque tous les cas ne sont pas couverts
union foo switch(long) { case 0: float for0; default: string other; };

CORBA

10

Lionel Seinturier

IDL
Types construits : tableaux
Tableaux multi-dimensionnels de taille fixe (pas de mot cl spcial [])
type identificateur [taille] + long vecteur[10] float matrice[10][5]

IDL
Types construits : divers
Type objet CORBA - permet de passer en paramtre par rfrence un objet CORBA - mot cl : Object

les tailles sont obligatoires et constantes Type indiffrenci Tableaux unidimentionnels de taille quelconque
sequence<type> identificateur ; sequence<long> vecteur;

- permet de passer en paramtre n'importe quel type (de base ou construit) - mot cl : any Type vide - permet de spcifier un type vide (utilisation uniquement pour retour mthode) - mot cl : void

possibilit de spcifier une taille maximale


sequence<type,max> identificateur ; sequence<long,16> vecteur;

CORBA

11

Lionel Seinturier

CORBA

12

Lionel Seinturier

IDL
Modules
conteneurs de dfinitions de : types, constantes, exceptions, interfaces, modules hirarchies de modules permettent de structurer les applications
module ident { ... };

IDL
Interfaces
points daccs aux objets CORBA identiques aux interfaces Java ou aux classes abstraites C++ peuvent contenir : types, constantes, exceptions, attributs, mthodes peuvent hriter leur structure dune ou +sieurs autres interfaces peuvent tre prdclares en vue dune utilisation ultrieure
interface ident [ : heritage ] { ... }; interface ident ;

Exemple
module mesanimaux { ... module alaville { ... }; module alacampagne { ... }; ... };

Exemple de prdclaration
interface A; // // // // prdclare (le compilateur sait que lident. A est associ une interface utilise A utilise B

- oprateur de rsolution de porte :: mesanimaux::alaville::... - visibilit des dfinitions respecte l' des modules

interface B { ... }; interface A { ... };

CORBA

13

Lionel Seinturier

CORBA

14

Lionel Seinturier

IDL
Mthodes
sont nommes prennent des paramtres et retournent un rsultat peuvent lever une ou +sieurs exceptions
typeRetour ident ( [ paramtre+ ] ) [raises (exception+)] ; paramtre = mode type ident

IDL
Mthodes
surcharge interdite (pas 2 mthodes de mme nom dans 1 interf.) paramtres - n'importe quel type de base - si type construit, dfinition d'un typedef - interface IDL Exemple
module foo { interface FooItf { void setPrenoms( in sequence<string> prenoms ); // interdit typedef sequence<string> tprenoms; void setPrenoms( in tprenoms prenoms ); // ok }; }; module bar { interface BarItf { void go( in foo::FooItf callback ); }; };
Lionel Seinturier CORBA 16 Lionel Seinturier

Exemple
module banque { interface CompteItf { void deposer( in float montant ); boolean retirer( in float montant ); float solde(); string getTitulaire(); }; };

CORBA

15

IDL
Mthodes
Passage de paramtres par rfrence pour les objets CORBA par valeur pour tous les autres in (entre) le client fournit la valeur si le serveur la modifie, le client ne "voit" pas la modification Client inout (entre/sortie) le client fournit la valeur si le serveur la modifie, le client "voit" la modification out (sortie) le serveur fournit la valeur le client "voit" la modification
CORBA 17 Lionel Seinturier

IDL
Mthodes
peuvent tre dclare oneway (asynchrone)
"normal" (synchrone)
oneway

(asynchrone)
Client Serveur

IN Serveur OUT

Client

Serveur

normal : le client attend la rponse avant de continuer oneway : pas de rponse, le client continue tout de suite aprs l'envoi ! client et serveur s'excutent en // le temps de l'exc. de la mth. Particularit CORBA de smantique entre normal et oneway

normal : livraison messages garantie (dans la limite du protocole de transport) oneway : pas de garantie sur la livraison des messages ! n'utiliser que pour des invocations non vitales
CORBA 18 Lionel Seinturier

IDL
Mthodes oneway
Pas de message de retour donc - pas de paramtre de retour - pas de paramtre inout ou out - pas d'exception Exemple
interface Itf { oneway float foo( in long bar ); oneway void foo( in long bar ); long bar(); }; // interdit // ok

IDL
Constantes
Des variables types dont la valeur est fixe
const type ident = expr ;

types autoriss pour les constantes : uniquement types de base oprateurs autoriss dans l'expression - unaires + - ~ - binaires + - * / % << >> & | ^ Exemple
interface const const const }; Vrac { long taille = 8; long segments = 1024/taille; string usage = Hello;

CORBA

19

Lionel Seinturier

CORBA

20

Lionel Seinturier

IDL
Exceptions
Des structures de donnes qui signalent une situation exceptionnelle utilisateur systme CORBA (BAD_PARAM,
COMM_FAILURE, NO_MEMORY, ...)

IDL
Constantes & exceptions & typedef
Peuvent tre dfinis niveaux dans un fichier IDL globalement (en dehors de tout module) localement un module localement une interface ! influence la visibilit de la dfinition
const long c0 = 0; module m { const long c1 = 1; interface Itf { const long c2 = 2; }; };

utilisateur : dclares et doivent tre obligatoirement traites systme : peuvent tre traites Exceptions utilisateur
exception ident { donne* }; exception Overflow { double limit; }; interface Math { double exp( in double x ) raises(Overflow); };

Accs :
CORBA 21 Lionel Seinturier CORBA

c0 , m::c1 , m::Itf::c2

22

Lionel Seinturier

IDL
Attributs
Possibilit d'attacher des proprits types aux interfaces variables mais accessibles avec des mthodes setter/getter
[readonly] attribute type nom ; interface Capteur { attribute float seuil; readonly attribute float temp; };

IDL
Hritage d'interfaces
Simple
interface Ouvrier : Employe { ... };

Multiple
interface Ouvrier : Employe, Personne { ... };

et temp ne sont jamais accds comme des variables


seuil

interface Capteur { void setSeuil( in float val ); float getSeuil(); float getTemp(); }; readonly

mais systmatiquement via leurs mthodes setter/getter

Une sous-interface hrite de tous les lments de sa ou ses super-interfaces peut ajouter de nouveaux lments peut redfinir les types, constantes, exceptions dune super-interface ne peut pas redfinir les attributs, les oprations

: en lecture seule
23 Lionel Seinturier CORBA 24 Lionel Seinturier

CORBA

IDL
Hritage d'interfaces
ordre de dclaration des interfaces non significatif possibilit dhritage en losange ( AB AC B,CD ) graphe d'hritage doit tre sans cycle ( AB BA interdit)

IDL
Hritage d'interfaces
Constantes, exceptions et typedef remplacs ds leur utilisation
interface A { const long taille = 3; typedef float coord[taille]; void f( in coord tableau ); }; interface B { const long taille = 4; }; interface C: A,B {}

Utilisation lments des super-interfaces doivent tre non ambigus


interface A { typedef string tnom; }; interface B { typedef string<16> tnom; }; interface C: A,B { const tnom nom1 = "Bob"; // interdit: tnom ambigu const A::tnom nom2 = "Bob"; // A::tnom ok const B::tnom nom2 = "Bob"; // B::tnom ok };

Signature C::f void f(in coord tableau); Mais C::taille ambigu ? 3 ? 4

coord float[taille]

Solution : la constante est remplace ds son utilisation ! dans A signature A::f void f(in float tableau[3]);

CORBA

25

Lionel Seinturier

CORBA

26

Lionel Seinturier

IDL
Conclusion IDL
Langage de dclaration des services offerts par un objet CORBA Pas de code Syntaxe proche C/C++/Java Utilis le langage de programmation utilis pour l'implantation des services Une interface IDL peut tre implante +sieurs fois - de faon diffrente dans un mme langage - de faon diffrente/identique dans des langages Processus de dveloppement CORBA 1. Ecriture d'une interface IDL 2. Ecriture d'une classe implantant l'interface 3. Ecriture du programme serveur 4. Ecriture du programme client
CORBA 27 Lionel Seinturier

Vous aimerez peut-être aussi