Académique Documents
Professionnel Documents
Culture Documents
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
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
notation scientifique
: 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
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
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
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 { ... };
interface Capteur { void setSeuil( in float val ); float getSeuil(); float getTemp(); }; readonly
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 {}
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