© 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL...

68
- 1 - © 2000, Mireille Fornarino, E.S.S.I. Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d ’objets Client d ’objets 3. IDL 3- Le langage IDL Un « esperanto » pour les objets Objets Corba

Transcript of © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL...

Page 1: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 1 -© 2000, Mireille Fornarino, E.S.S.I.

Le contrat IDL

IDL

Bus CORBA SqueletteIDL

StubIDL

Fournisseurd ’objets

Clientd ’objets

3. IDL

3- Le langage IDL

Un « esperanto » pour les objets

Objets Corba

Page 2: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 2 -© 2000, Mireille Fornarino, E.S.S.I.

Le langage IDL

Interface Definition Language

langage de spécification d’interfaces, supportant l’héritage

multiple;

indépendant de tout langage de programmation ou

compilateur (langage pivot entre applications);

langage utilisé pour générer les stubs, les squelettes et pour définir

les interfaces du Référentiel d’interface;la correspondance IDL-langage de programmation est fournie

pour les langages C, C++, Java, Smalltalk, Ada, Cobol.

3. IDLDescription

Page 3: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 3 -© 2000, Mireille Fornarino, E.S.S.I.

IDL versus C++

Grammaire IDL : sous ensemble de la grammaire ANSI C++ avec constructions supplémentaires

Nouveaux mots clés :

attributeinterfacemoduleonewayreadonlysequenceany

3. IDLDescription

Page 4: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 4 -© 2000, Mireille Fornarino, E.S.S.I.

Exemple

interface account { readonly attribute float balance; attribute string description; void credit (in float f); void debit (in float f); };interface currentAccount : account { readonly attribute float overdraftLimit; };interface bank { exception reject {string reason;}; account newAccount (in string name)

raises (reject); currentAccount newCurrentAccount (in string name, in float limit)

raises (reject); void deleteAccount (in account a); };

interface attribut

opérations

exception

opérations

3. IDLDescription

Page 5: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 5 -© 2000, Mireille Fornarino, E.S.S.I.

Eléments IDL

Une spécification IDL définit un ou plusieurs types, constantes, exceptions, interfaces, modules,...

• pragma

• constantes

• types de base au format binaire normalisé

• nouveaux types (typedef, enum, struct, union, array, sequence)

• exceptions

• types de méta-données (TypeCode, any)

3. IDLDescription

Page 6: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 6 -© 2000, Mireille Fornarino, E.S.S.I.

Eléments IDL

Un module permet de limiter la validité des identificateurs

Interface : ensemble d’opérations et de types =>classe C++

Syntaxe : Interface | [<héritage>] { <interface Body>};

• opération (synchrone ou asynchrone sans résultat)• attribut (possibilité de lecture seule)

Surcharge Interdite

3. IDLDescription

Réutilisation de spécifications existantes (#include)

Page 7: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 7 -© 2000, Mireille Fornarino, E.S.S.I.

module unService {

typedef unsigned long EntierPositif; typedef sequence<Positif> desEntiersPositifs;

interface Premier {

boolean est_premier ( in EntierPositif nombre);desEntiersPositifs nombres_premiers (in EntierPositif nombre);

};};

module monApplication { interface MonService {

unService::EntierPositif prochainPremier(..);

Exemple

module

définitionsde type

interface

opérations

3. IDLDescription

Page 8: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 8 -© 2000, Mireille Fornarino, E.S.S.I.

Exemple

// Regroupe les définitions communes à ce service.module date {// Une année est codée par un entier 16 bits.

typedef short Annee; // Ensemble non borné d'années. typedef sequence<Annee> DesAnnees;

enum Mois { // Enumération des mois. Janvier, Fevrier, Mars, Avril, Mai, Juin,Juillet, Aout, Septembre, Octobre, Novembre, Decembre };// Ensemble non borné de mois.

typedef sequence<Mois> DesMois;

// Enumération des jours de la semaine. enum JourDansLaSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche };

// Un jour est un entier 16 bits non signé. typedef unsigned short Jour;

struct Date { // Structure pour la notion de date. Jour le_jour; Mois le_mois; Annee l_annee; };// Ensemble non borné de dates.

typedef sequence<Date> DesDates;

// Regroupement de divers formats de dates. union DateMultiFormat// Le discriminant anonyme sert à choisir le format.

switch(unsigned short) { case 0: string chaine; case 1: Jour nombreDeJours; default: Date date; };

exception ErreurInterne {}; exception MauvaiseDate { DateMultiFormat date; };

// Service de traitement sur les dates. interface Traitement { boolean verifierDate (in Date d); JourDansLaSemaine calculerJourDansLaSemaine ( in Date d) raises(ErreurInterne,MauvaiseDate); long nbJoursEntreDeuxDates (in Date d1, in Date d2) raises(MauvaiseDate); void dateSuivante (inout Date d, in Jour nombreJours) raises(MauvaiseDate); };

// Service de conversion de dates. interface Convertisseur { Jour convertirDateVersJourDansAnnee (in Date d) raises(MauvaiseDate); Date convertirChaineVersDate (in string chaine) raises(MauvaiseDate); string convertirDateVersChaine (in Date d) raises(MauvaiseDate);

// L’année courante pour l’opération suivante. attribute Annee annee_courante; Date convertirJourDansAnneeVersDate (in Jour jour);

// L’année de référence des opérations suivantes. readonly attribute Annee base_annee ; Date convertirJourVersDate (in Jour jour); Jour convertirDateVersJour (in Date d) raises(MauvaiseDate);

void obtenirDate(in DateMultiFormat d1,out Date d2) raises(MauvaiseDate); };

// Héritage de spécification. interface ServiceDate : Traitement,Convertisseur {};};

3. IDLDescription

Page 9: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 9 -© 2000, Mireille Fornarino, E.S.S.I.

Attribut IDL

Définition d’attributinterface account {

readonly attribute float balance;attribute string description;...

};

Equivaut à :float get_balance();string get_description();void set_description(in string s);

3. IDLDescription

Page 10: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 10 -© 2000, Mireille Fornarino, E.S.S.I.

void op1 (in long input, out long output, inout long both);

interface account;

interface bank { account newAccount (in string name); void deleteAccount (in account old);};

Operations (1/2)

Paramètres nommés et associés à un mode

Opérations bloquantes par défaut

<uneOpération> ::= <modeInvocation> <typeRetour> <identificateur>‘ (‘ <paramètres> ‘ ) ’ <clausesExceptions><clausesContextes>

Client uneBanque

newAccountcalcul

retours

3. IDLDescription

Page 11: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 11 -© 2000, Mireille Fornarino, E.S.S.I.

Opérations (2/2)

oneway void notify (in string message);

Opération non bloquante

Pas de paramètre de type out, inout ou d’exceptions

Valeur de retour : void

Pas d ’exceptions déclenchées.

Client uneBanque

notify(«ok »)

méthodefinie

3. IDLDescription

Page 12: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 12 -© 2000, Mireille Fornarino, E.S.S.I.

Exceptions

exception reject {string reason;}; account newAccount (in string name)

raises (reject);

exception DateErronnee {String raison; };

Des exceptions CORBA standardisées

UNKNOWN NO_PERMISSIONBAD_PARAM NO_IMPLEMENTCOM_FAILURE OBJECT_NOT_EXISTINV_OBJREF ……….

CORBA::Exception

CORBA::UserException

CORBA::SystemException

3. IDLDescription

Gestion explicite de la part du client

Page 13: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 13 -© 2000, Mireille Fornarino, E.S.S.I.

Définitions circulaires

module Circulaire {interface B;interface A {

void utiliséB(in B unB);}interface B {

void utiliséA(in A unA);}

3. IDLDescription

Page 14: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 14 -© 2000, Mireille Fornarino, E.S.S.I.

Types de base et autres types

Types de base• short• long• unsigned short• unsigned long• float• double• char• boolean• octet•…...

Types construits• struct• union• enum

Types génériques• array• sequence• string

MétaTypes•any•TypeCode

Types de données dynamiques et auto-descriptifs

3. IDLDescription

Page 15: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 15 -© 2000, Mireille Fornarino, E.S.S.I.

Type Any

interface PileDeChaines {readonly attribut string sommet;void poser(in string valeur);string retirer();

};

interface PileGénérique {readonly attribut Any sommet;readonly attribut TypeCode typeDesValeurs;void poser(in Any valeur);Any retirer();

};

3. IDLDescription

Page 16: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 16 -© 2000, Mireille Fornarino, E.S.S.I.

Projection vers un langage de programmation

Stubs

DefinitionsIDL

Précompilateur IDL Objet

implementation

Methodes

Squelettes

Client Serveur

Adaptateur d'objet

Noyau ORB

C++

C++ Java

Java

3. IDLProjection

Page 17: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 17 -© 2000, Mireille Fornarino, E.S.S.I.

Mapping C++ des modules

traduit en namespace C++ les modules CORBA contiennent des types prédéfinis des interfaces et des opérations

// IDLmodule M{// définitions};

// C++namespace M{// définitions};

3. IDLProjection

Page 18: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 19 -© 2000, Mireille Fornarino, E.S.S.I.

Projections de types élémentaires

CORBA/IDL C++ Java

short CORBA : :Short short

unsigned short CORBA : :UShort short

long CORBA : :Long int

boolean CORBA : :Boolean boolean

string char* et CORBA : :String String

3. IDLProjection

Page 19: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 20 -© 2000, Mireille Fornarino, E.S.S.I.

Projections en C++ et Java3. IDLProjection

• énumération : enum en C++ ; constantes encapsulées dans une classe dont le nom est celui du type énuméré en Java

• séquences: encapsulées dans une classe qui contrôle les débordements en C++; des tableaux dynamiques en Java

• tableaux : tels que.

• Interface : classe C++ ; interface Javainterface J:I {…} class J : public virtual I interface J extends I

{…}

• Opérations : méthodes

• Attributs : une ou deux méthodes d ’accès

Page 20: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 22 -© 2000, Mireille Fornarino, E.S.S.I.

Projection en Java : définitions contenues dans une interface

Génération d ’un package contenant la traduction des définitions imbriquées

IDL : interface UneInterface{struct uneStructure {…};}

Java généré : package UneInterfacePackage;public final class UneStructure{ …}

Utilisation :UneInterfacePackage.UneStructure s = …;

Page 21: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 24 -© 2000, Mireille Fornarino, E.S.S.I.

Passage de paramètres en java

// OMG IDL

interface Modes {

long operation ( in long inArg, out long outArg, inout long inoutArg);

}

//Java

interface Modes {

int operation(int inArg, org.omg.CORBA.IntHolder outArg,

org.omg.CORBA.IntHolder inoutArg);

}

//Utilisation

Modes m = …;

IntHolder argSortie = new IntHolder(); IntHolder argES = new IntHolder(131);

int result = m.operation(57,argSortie,argES);

…. argSortie.value…..

3. IDLProjection

Page 22: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 25 -© 2000, Mireille Fornarino, E.S.S.I.

Mapping C++ des références objet

interface A{ void op1 (in long param);};

// C++-usedA_ptr aPtr;A_var aVar;aVar->op1(2);aPtr->op1(5);

Interface

traduit en classes C++ traduit en deux types C++

• A_varRéférence sur un objet (instance de classe A) avec gestion automatique de la mémoire.• A_ptrSimilaire aux pointeurs C++.

3. IDLProjection

Page 23: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 26 -© 2000, Mireille Fornarino, E.S.S.I.

Gestion mémoire : pointeurs en C++

En C++ Gestion difficile car les clients et les serveurs sont dans des processus différents.Problèmes : Qui fait l’allocation de la mémoire ? (malloc, new)

Qui fait la désallocation de la mémoire ? (delete)

«hello»

c

«hello»

tmp

Client Serveur

interface T { string op1()};

char* T_i::op1() { char* tmp = CORBA::string_alloc(6); strcpy(tmp, «hello»); return tmp;};

Page 24: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 27 -© 2000, Mireille Fornarino, E.S.S.I.

Exceptions (1/3)

Définition d'un ensemble d'exception système standardisées : UNKNOWN, BAD_PARAM, NO_MEMORY, etc ...;

Possibilité de définir des exceptions propres à l'utilisateur;

Exceptions propagées de l'objet implémentation vers le client;

CORBA::Exception

CORBA::UserException CORBA::SystemException

CORBA::UNKNOWN

autres exceptions système standard du

bus CORBA

exceptions définies dans les IDL

3. IDLProjection

Page 25: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 28 -© 2000, Mireille Fornarino, E.S.S.I.

Mapping C++ des exceptions (3/3)

Client

Objet Implémentation

interface bank { exception reject {string reason;}; account newAccount (in string name)

raises (reject);...}

Interface IDL

bank_var b;...try { a = b->newAccount("Bill");}catch (const bank::reject& r) {// actions}catch(...) {...}

void bank_i::newaccount (const char* name, CORBA::Environnement&) { ...throw bank::reject ("Impossible to create a new account");};

3. IDLProjection

Page 26: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 29 -© 2000, Mireille Fornarino, E.S.S.I.

Mapping C++

Compilateur IDL

Client

Serveurinterface room { attribute string name; attribute long number; ...}

class room : publicvirtual CORBA::Object {...}

class roomImpl : public virtual room { ... virtual CORBA::String* name()=0; virtual void name (const CORBA::String&)=0;

virtual CORBA::Long number()=0; virtual void number(const CORBA::Long)=0; ...}

class room _i : public virtual roomImpl, public SDAroom { ... CORBA::String* name() { return SDAroom::name();} void name (const CORBA::String& s) { SDAIroom::name(s);} CORBA::Long number() { return SDAroom::number();} void number(const CORBA::Long l) { SDAIroom::number(l);}}

3. IDLProjection

Page 27: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 30 -© 2000, Mireille Fornarino, E.S.S.I.

Utilisation à partir de C++(1)

interface Calendrier {

Calendrier_var monCalendrier = … référence;Annee anneeATraiter = monCalendrier -> anneeCourante();monCalendrier -> anneeCourante(anneeATraiter +1);

attribute Annee anneeCourante;

boolean verifierUneDate(in Date d);void leJourSuivant(inout Date d);Date convertirChaine (in String uneChaine) raises (DateErronnee);

if (monCalendrier -> verifierDate (uneDate)) { monCalendrier -> leJourSuivant(date);CORBA::String chaine = monCalendrier -> convertirDate (uneDate);

exception DateErronnee {String raison; };

try { date = convertirChaine (¨31 fevrier 1998 ¨); } catch (DateErronnee& exception) { cout << exception.raison};

3. IDLUtilisation

Page 28: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 31 -© 2000, Mireille Fornarino, E.S.S.I.

interface Calendrier { …. }

typedef sequence <Date> desDates;interface CalendrierFerie : Calendrier {

void lesJoursFeries (in Annee UneAnnee, out desDates dates);}

CalendrierFerie_var monCalendrierFerie = CalendrierFerie::_narrow (tonCalendrier);

desDates datesRepos;monCalendrierFerie -> lesJoursFeries (1998, datesRepos);for (CORBA::Ulong i=0; i< datesRepos.length(); i++){

CORBA::String_var chaine;chaine = monCalendrierFerie -> convertirChaine(datesRepos[i]); }

3. IDLUtilisationUtilisation à partir de C++(2)

Page 29: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 32 -© 2000, Mireille Fornarino, E.S.S.I.

ORBacus

ORBACUS is an Object Request Broker (ORB) that is compliant with the Common Object Request Broker Architecture (CORBA) specification (2.4 + features 3)

• Dynamic Invocation and Dynamic Skeleton Interface

•Dynamic Any

• Interface and Implementation Repository

• Pluggable Protocols

• IDL-to-HTML and IDL-RTF documentation tools

• Includes Naming, Trading, Event, Notify, Property Services,balancing,…

• Full CORBA IDL support

• C++ and Java language mappings

• Simple configuration and bootstrapping

• Portable Object Adapter

• Objects by Value

• Portable Interceptors

• Single- and Multi-threaded

• Active Connection Management

• Fault Tolerant Extensions

Page 30: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 33 -© 2000, Mireille Fornarino, E.S.S.I.

Étapes de mise en oeuvre

Spécification interface IDL

Compilation interface IDL

Implantation des objets Corba

Implantation du serveur

Enregistrement du serveur

Implantation du client

Côté client Côté serveurUtilisation du service Nommage

Page 31: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 34 -© 2000, Mireille Fornarino, E.S.S.I.

Spécification interface IDL (1/2)

Un objet grid est un tableau contenant des valeurs.Les valeurs sont accessibles grâce aux opérateurs get et set qui peuvent être invoqués à distance.

Processus client Processus serveur

Appel de get et set sur l'objet grid distant

objets grid

1- Exemple introductif

Page 32: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 35 -© 2000, Mireille Fornarino, E.S.S.I.

Spécification interface IDL (2/2)

interface Grid { readonly attribute short height; readonly attribute short width; void set (in short n, in short m, in long value); long get(in short n, in short m); void copyIn(inout Grid g);};

1- Exemple introductif

Page 33: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 36 -© 2000, Mireille Fornarino, E.S.S.I.

Grid.java

Compilation interface IDL

Client

_GridStub.java GridPOA.java

Serveur

Grid_Impl.javaClient.java

Serveur.java

A écrire

Généré

1- Exemple introductif

Grid.idl

Compilateur IDL/Java

Répertoire gridRépertoire grid

Répertoire gridRépertoire grid

I

GridHelper.java

GridHolder.java

jidl … Grid.idl

GridOperations.java

Page 34: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 37 -© 2000, Mireille Fornarino, E.S.S.I.

Hiérarchie Java des classes

org.omg.CORBA.portableObjectImpl<<Abstraite>>

_GridStub

étend

<<abstract>>

GridPOA

Org.omg.PortableServer.Servant

<<Interface>>

GridOperations

Implémente<<Interface>>

Grid

étend

Grid_Impl<<Interface>>

Org.omg.CORBA.Object

étend

Standard

À implémenter

Généré

Page 35: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 38 -© 2000, Mireille Fornarino, E.S.S.I.

// Extrait fichier grid.javapublic interface Grid extends GridOperations, …

org.omg.CORBA.Object {}

public interface GridOperations{short height();void set(short n, short m, int value);short width();void copyIn(GridHolder g);

}

1- Exemple introductif

L ’interface Java générée

Sans readonly :+ void height(short val);

Page 36: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 39 -© 2000, Mireille Fornarino, E.S.S.I.

Sont également générées les classes :// Classe utilitaire pour le type Gridfinal public class GridHelper { public static Grid narrow(org.omg.CORBA.Object obj) { …} …..}conversion de type, insertion dans un Any, extraction, obtenir le TypeCode, ..

// Classe utilitaire pour le passage out et inout final public class GridHolder implements

org.omg.CORBA.portable.Streamable { public Grid value; public gridHolder(Grid initial) { value = initial;}…

1- Exemple introductif

Les classes Java communes générées

Page 37: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 40 -© 2000, Mireille Fornarino, E.S.S.I.

• implantation du stubpublic class _GridStub extends… implements Grid

– envoie de requêtes– invisible par le programmeur– instanciée automatiquement par GridHelper (narrow)– Utilise le DII pour assurer la portabilité du binaire

• implantation du squelettepublic abstract class GridPOA extends ... implements GridOperations

– reçoit et décode des requêtes– doit être héritée par l’implantation

1- Exemple introductif

Les classes Java Stubs et Squelettes

Page 38: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 41 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation de l'interface (Classes servants)

Ecrire une classe Java qui hérite de la classeGridPOA

public class Grid_impl extends GridPOA {public int [][] valeur;

public Grid_impl(short width, short height) {valeur = new int [width] [height]; …….}

public int get(short n, short m) { return valeur[n][m]; }

public short height(){ return (short) valeur[1].length;}

public void copyIn(GridHolder g)…..

g.value.set(i,j,this.valeur[i][j]) ;…}

1- Exemple introductif

Page 39: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 42 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation du serveur (1)1- Exemple introductif

1. Initialiser le bus CORBA

– obtenir l’objet ORB

2. Initialiser l’adaptateur d’objets

– obtenir le POA

3. Créer les implantations d’objets (servants)

4. Enregistrer les implantations par l’adaptateur

5. Diffuser leurs références

– afficher une chaîne codifiant l’IOR

6. Attendre des requêtes venant du bus

7. Destruction du Bus

Page 40: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 43 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation du serveur (2)1- Exemple introductif

public class ServeurDeGrilles{public static void main(String args[]) throws Exception { // Propriétés nécessaires à l’utilisation d’ORBACUS java.util.Properties props = System.getProperties(); props.put("org.omg.CORBA.ORBClass", "com.ooc.CORBA.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "com.ooc.CORBA.ORBSingleton");

// Initialisation du bus CORBA pour un processus serveur.int status = 0;org.omg.CORBA.ORB orb = null;try { orb = org.omg.CORBA.ORB.init(args, props); (1) status = run(orb); (2,3,4,5,6) } catch(Exception ex) { ex.printStackTrace(); status = 1; } if(orb != null) { try { orb.destroy(); (7) } catch(Exception ex) { ex.printStackTrace(); }

Page 41: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 44 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation du serveur (3)1- Exemple introductif

public class ServeurDeGrilles{ …static int run(org.omg.CORBA.ORB orb) throws org.omg.CORBA.UserException{ org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow( orb.resolve_initial_references("RootPOA")); (2) org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager();

Grid_Impl grilleImpl = new Grid_Impl(100,100); // (3) « création de servants » Grid Grille = Grid_Impl._this(orb); (4) « activation de servants » try { // Obtenir sous forme textuelle l'IOR de l'objet. String chaineIOR = orb.object_to_string (grille); // (5) // . . . diffuser la chaîne . . System.out.println("IOR : " + chaineIOR);. // Mettre le serveur en attente des requêtes venant du bus CORBA. manager.activate(); orb.run(); // (6)}

Page 42: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 45 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation du client1- Exemple introductif

1. Initialiser le bus (objet ORB)

2. Créer les souches des objets à utiliser

2.a. obtenir les références d’objet (IOR)

2.b. convertir vers les types nécessaires

– narrow contrôle le typage à travers le réseau

3. Réaliser les traitements

• Rem. : éviter l’opérateur bind (2.a + 2.b)

– spécifique à chaque produit donc non portable

Page 43: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 46 -© 2000, Mireille Fornarino, E.S.S.I.

Implémentation du client en Java1- Exemple introductif

public class ClientDeGrille { public static void main(java.lang.String[] args) { //………… Comme le serveur avec status = run(orb, args[0]); //IOR est ici passé en argument…

static int run(org.omg.CORBA.ORB orb, String ref){ try { org.omg.CORBA.Object obj = orb.string_to_object(ref); // (2.a) Grid grille = GridHelper.narrow(objet); // (2.b) System.out.println(grille.height()); System.out.println(grille.width()); grille.set((short) 2, (short) 4, 123); System.out.println("grid[2,4] is " + grille.get((short)2, (short)4));}}

Page 44: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 47 -© 2000, Mireille Fornarino, E.S.S.I.

Activation des servants

Informer l’ORB de l’existence d’un servant comme « représentant » d’un objet CORBA particulier.

L’activation d’un servant lui affecte un object identifier utilisé dans les références qui seront créées.

La valeur de IdAssignmentPolicy du POA permet de laisser le POA ou le code de l’application serveur affecter l’Identificateur.

La valeur de ImplicitActivationPolicy permet de choisir entre une activation active et une activation passive (NO_IMPLICIT_ACTIVATION/IMPLICIT_ACTIVATION)

Page 45: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 48 -© 2000, Mireille Fornarino, E.S.S.I.

Activation Implicite

Si le POA de l’objet servant a les politiques : RETAIN,IMPLICIT_ACTIVATION, et SYSTEM_ID :

L’activation implicite est réalisée lors de la première création d’une référence sur le servant:

Grid Grille = GridImpl._this(orb);Le nouveau servant est activé (en utilisant le POA renvoyé par _default_POA), qui par défaut renvoie le RootPOA

Page 46: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 49 -© 2000, Mireille Fornarino, E.S.S.I.

Activation explicite de servants

// The code instantiates a servant.

I_mpl impl = new I_impl();

// To activate a servant, we need the servant’s POA.

orb.omg.PortableServer.POA poa = impl._default_POA();

Quand le POA d’un Servant est défini avec les politiques :NO_IMPLICIT_ACTIVATION

Et SYSTEM_ID//creates a unique ID for the servant

poa.activate_object(impl);

Et USER_IDbyte[] id = "MyObjectName".getBytes();

poa.activate_object_with_id(id, impl);

Page 47: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 50 -© 2000, Mireille Fornarino, E.S.S.I.

Désactivation de servants

org.omg.PortableServer.POA poa = impl._default_POA();byte[] id = poa.servant_to_id(impl);poa.deactivate_object(id);

Page 48: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 51 -© 2000, Mireille Fornarino, E.S.S.I.

Le cycle de vie des objets

• Problème

– actuellement, 1 grille = 1 serveur

– pas de création/destruction d’objets à distance

– seulement invocation d’opérations

• Solution

– notion de fabrique d’objets

– exprimée en OMG-IDL

• C’est un canevas de conception : Design pattern

– voir aussi le service LifeCycle

Autres usages de la fabrique :- gestion de droits, load-balancing, polymophisme, …

Page 49: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 52 -© 2000, Mireille Fornarino, E.S.S.I.

FabriqueGrilleGrille

GrilleGrille

creerGrille

L’implantation de la fabrique

Page 50: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 53 -© 2000, Mireille Fornarino, E.S.S.I.

L’implantation de la fabrique

FabriqueGrilleGrille

GrilleGrille

detruireGrille

Page 51: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 54 -© 2000, Mireille Fornarino, E.S.S.I.

Interface IDL d ’une fabrique de Grilles

module grilles {. . .interface Fabrique { Grid newGrid(in short width,in short height);}; };

Page 52: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 55 -© 2000, Mireille Fornarino, E.S.S.I.

Implantation Java de la fabrique de grilles

import grille.*;public class Fabrique_impl extends FabriquePOA{ org.omg.CORBA.ORB orb_;

public Fabrique_Impl (org.omg.CORBA.ORB orb)

{ orb_=orb; . . .}

public Grid newGrid(int width,int height){ Grid_impl gi = new Grid_Impl(width,height); return gi._this(orb_);}

} }

Page 53: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 56 -© 2000, Mireille Fornarino, E.S.S.I.

Références

public class B_impl extends BPOA{ org.omg.CORBA.ORB orb_; A_impl a_; public B_impl(org.omg.CORBA.ORB orb) { orb_ = orb; a_ = new A_impl();} A getA()

{ return a_._this(orb_);}}

interface A{};

interface B { A getA(); }B b = ... // Get a B object reference somehowA a = b.getA();

Page 54: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 57 -© 2000, Mireille Fornarino, E.S.S.I.

Références et strings

Vous pouvez convertir toute référence en une string et inversement pour par exemple:

• le serveur créé un objet et écrit sa référence dans un fichierString ref = orb.object_to_string(grille);String refFile = « Grid.ref » ;FileOutputStream file = new FileOutputStream(refFile);PrintWriter out = new PrintWriter(file);out.println(ref); out.flush(); file.close();

•Le client lit le fichier et utilise la référence pour accéder à l’objet.FileInputStream file = new FileInputStream(refFile);string ref = new BufferedReader ( new

InputStreamReader(file)).readLine();file.close();org.omg.CORBA.Object obj = orb.string_to_object(ref);

•Stockage dans une BD Service de nommage

Page 55: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 60 -© 2000, Mireille Fornarino, E.S.S.I.

Services initiaux : références

Services initiaux : ensemble de services uniques dont la référence peut être obtenue par l’opérationresolve_initial_references : // IDLmodule CORBA{ interface ORB

{typedef string ObjectId;exception InvalidName {};Object resolve_initial_references(

in ObjectId identifier)raises(InvalidName);};

};

Noms standardisés par exemple: NameService et TradingService.

Page 56: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 61 -© 2000, Mireille Fornarino, E.S.S.I.

Scénario d ’obtention de la référence du service de nommage

Client ou Serveur ORB

CosNaming::NamingContext

resolve_initial_references ("NameService");

conversion

ajout,retrait,lecture,...

Page 57: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 62 -© 2000, Mireille Fornarino, E.S.S.I.

Obtenir le service de Nommage en Java

import org.omg.CosNaming.*;...//retrouver la référence de l ’objet notoire « NameService »org.omg.CORBA.Object objRef = null;try { objRef = orb.resolve_initial_references ("NameService");} catch( org.omg.CORBA.ORBPackage.InvalidName e ) { outils.ARRET ("Le service initial NameService est inconnu");}

//la convertir en une référence à un objet //de type CosNaming::NamingContext NamingContext nsRef = NamingContextHelper.narrow(objRef);if ( nsRef == null ) { outils.ARRET ("Le service initial 'NameService' n'est pas

un objet CosNaming::NamingContext");

Page 58: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 64 -© 2000, Mireille Fornarino, E.S.S.I.

Créer un nom/chemin en Java

import org.omg.CosNaming.*; //créer un chemin simpleNameComponent[] nsNom = new NameComponent [1];nsNom[0] = new NameComponent(  "grilleA ", "");

//créer un chemin composéNameComponent[] nsNom = new NameComponent [2];nsNom[0] = new NameComponent( "appli", "");nsNom[1] = new NameComponent(    "grille ", "");

Page 59: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 65 -© 2000, Mireille Fornarino, E.S.S.I.

Enregistrer un objet

• Opération pour publier un Objet– en général, opération réalisée par le serveur

• Scénario Type1. Créer un objet2. Construire un chemin d ’accès (Name)3. Appeler l ’opération « bind » ou « rebind » avec le chemin et la référence de l ’objet

void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound);

Page 60: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 66 -© 2000, Mireille Fornarino, E.S.S.I.

Enregistrer un objet en Java

//créer un chemin

NameComponent[] nsNom = new NameComponent [1];

nsNom[0] = new NameComponent("MONOBJET","");

//enregistrer l ’objet

try {

nsRef.bind (nsNom, uneRefObjet);} catch (org.omg.CosNaming.NamingContextPackage.NotFound enf) {

. . .

} catch(org.omg.CosNaming.NamingContextPackage.AlreadyBound eab){

. . .

} catch(org.omg.CosNaming.NamingContextPackage.CannotProceed

ecp){

. . .

} catch(org.omg.CosNaming.NamingContextPackage.InvalidName ein) {

. . .

Page 61: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 67 -© 2000, Mireille Fornarino, E.S.S.I.

Retrouver un objet

• Opération réalisée par un client ou un serveur

• Scénario type :

– construire un chemin d ’accès (Name)

– appeler l ’opération « resolve » avec le chemin

– convertir la référence obtenue dans le bon type

Object resolve (in Name n)

raises (NotFound, CannotProceed, InvalidName)

Page 62: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 68 -© 2000, Mireille Fornarino, E.S.S.I.

Retrouver un objet en Java

//créer un cheminNameComponent[] nsNom = new NameComponent [1];nsNom[0] = new NameComponent("MONOBJET",""); //retrouver l ’objetorg.omg.CORBA.Object objRef = null;try {objRef = nsRef.resolve (nsNom);} catch (org.omg.CosNaming.NamingContextPackage.NotFound enf) {. . .} catch(org.omg.CosNaming.NamingContextPackage.CannotProceed ecp){. . .} catch (org.omg.CosNaming.NamingContextPackage.InvalidName ein) {. . .} //convertir la référenceGrille uneRefObjet = GrilleHelper.narrow (objRef);

Page 63: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 69 -© 2000, Mireille Fornarino, E.S.S.I.

• Création d’une nouvelle fabrique de grilles et mise à disposition par le service Nommage

– 1. Initialiser le bus CORBA

– 2. Initialiser l’adaptateur d’objets

– 3. Créer la fabrique

– 4. Obtenir le service Nommage (NS)

– 5. Créer un répertoire (contexte)

– 6. Enregistrer le couple fabrique/répertoire dans le NS

Une application d’administration de la fabrique

Page 64: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 70 -© 2000, Mireille Fornarino, E.S.S.I.

Serveur Java de la fabrique

import org.omg.CORBA.*; // le bus CORBA.import org.omg.CosNaming.*; // le service Nommage.public class ServeurFabrique {public static void main(String args[]) throws Exception { … (1) (2) status = run(orb); }

static int run(org.omg.CORBA.ORB orb)…{FabriqueImpl fabrique = new FabriqueImpl(); // (3) NamingContext nc = NamingContextHelper.narrow( // (4) orb.resolve_initial_references ("NameService")); NameComponent[] nom = new NameComponent[1]; // (5) nom[0] = new NameComponent("FABRIQUE", ""); nc.rebind(nom,fabrique); // (6)}

Page 65: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 71 -© 2000, Mireille Fornarino, E.S.S.I.

Client de la fabrique

public class Administration {public static void main(String args[]) throws Exception { ORB orb = ORB.init (args,null); // (1) NamingContext nc = NamingContextHelper.narrow( // (2) orb.resolve_initial_references ("NameService")); NameComponent[] nsNom = new NameComponent [1]; nsNom[0] = new NameComponent("FABRIQUE",""); org.omg.CORBA.Object objet=nc.resolve(nsNom); //(3.a) Fabrique fabrique=FabriqueHelper.narrow(objet);//(3.b) Grid g = fabrique.newGrid( 4,4); // (4) nsNom[0] = new NameComponent( "Grille4x4",""); nc.bind (nsNom, g); // (5)}

Page 66: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 72 -© 2000, Mireille Fornarino, E.S.S.I.

Conclusion

• CORBA : ça marche et c’est simple

• Choisir son langage d’implantation

– C++ : complexe et moins portable

– Java : portable et plus lent

• Choisir son bus

– 1 bus = 1 bibliothèque

– mixer les bus : c’est possible

Expérimentez en TPs !

Page 67: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 73 -© 2000, Mireille Fornarino, E.S.S.I.

Disponibilité de Orbacus

• Bus CORBA:– ORBacus <URL:http://www.ooc.com>– MICO <URL:http://www.vsb.cs.uni-

frankfurt.de/~mico/>

• Environnements systèmes :– Sun Solaris, Linux, SGI IRIX, HP-UX, AIX,

W95/NT …, JDK 1.1.x et 1.2,1.3…1.4…• Gratuit avec les sources C++ et java

• URL : http://corbaweb.lifl.fr

Page 68: © 2000, Mireille Fornarino, E.S.S.I. - 1 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client d objets 3. IDL 3- Le langage.

- 74 -© 2000, Mireille Fornarino, E.S.S.I.

Bon langage de spécification d’interfaces d’objets Facile à apprendre

types de base figés interdiction de sous-typer ou étendre une structure ou union interdiction de surcharge à l’intérieur d ’un module pas de passage d’objets par valeur (disponible en 3.0)

pas de sémantique des objets (contraintes, assertions, …) Pas d ’expression possible de la qualité de service pas de notion d’architecture logicielle

3. IDL

OMG-IDL : évaluation