Top Posters
Since Sunday
A
6
j
6
c
5
m
5
C
5
d
5
s
5
n
4
i
4
d
4
d
4
J
4
A free membership is required to access uploaded content. Login or Register.

Modele Corba.docx

Uploaded: 6 years ago
Contributor: divya
Category: Computer Science
Type: Other
Rating: N/A
Helpful
Unhelpful
Filename:   Modele Corba.docx (477.78 kB)
Page Count: 128
Credit Cost: 1
Views: 61
Last Download: N/A
Transcript
CORBA des concepts la pratique L objectif de ce document est de pr senter concr tement les diff rentes tapes de la construction d une application r partie au dessus du bus CORBA Pour cela ce document fait quelques rappels sur la vision globale de l OMG sur la construction d applications r parties et passe en revue les possibilit s du langage OMG-IDL Le c ur de ce document illustre progressivement les composantes du bus CORBA sur la construction d une application d annuaires avec les langages de programmation Java C et CorbaScript La derni re partie est consacr e aux m canismes dynamiques de CORBA Une vision globale de la construction d applications r parties L OMG L Object Management Group OMG est un consortium international cr en et regroupant actuellement plus de acteurs du monde informatique des constructeurs IBM Sun des producteurs de logiciel Netscape Inprise ou ex-Borland Visigenic IONA Tech des utilisateurs Boeing Alcatel et des institutionels et universit s NASA INRIA LIFL L objectif de ce groupe est de faire merger des standards pour l int gration d applications distribu es h t rog nes partir des technologies orient es objet Ainsi les concepts-cl s mis en avant sont la r utilisabilit l interop rabilit et la portabilit de composants logiciels L l ment-cl de la vision de l OMG est CORBA Common Object Request Broker Architecture un middleware orient objet Ce bus d objets r partis offre un support d ex cution masquant les couches techniques d un syst me r parti syst me d exploitation processeur et r seau et il prend en charge les communications entre les composants logiciels formant les applications r parties h t rog nes Le mod le objet client serveur Le bus CORBA propose un mod le orient objet client serveur d abstraction et de coop ration entre les applications r parties Chaque application peut exporter certaines de ses fonctionnalit s services sous la forme d objets CORBA c est la composante d abstraction structuration de ce mod le Les interactions entre les applications sont alors mat rialis es par des invocations distance des m thodes des objets c est la partie coop ration La notion client serveur intervient uniquement lors de l utilisation d un objet l application implantant l objet est le serveur l application utilisant l objet est le client Bien entendu une application peut tout fait tre la fois cliente et serveur La figure pr c dente pr sente les diff rentes notions intervenant dans ce mod le objet client serveur L application cliente est un programme qui invoque les m thodes des objets travers le bus CORBA La r f rence d objet est une structure d signant l objet CORBA et contenant l information n cessaire pour le localiser sur le bus L interface de l objet est le type abstrait de l objet CORBA d finissant ses op rations et attributs Celle-ci se d finit par l interm diaire du langage OMG-IDL voir section La requ te est le m canisme d invocation d une op ration ou d acc s un attribut de l objet Le bus CORBA achemine les requ tes de l application cliente vers l objet en masquant tous les probl mes d h t rog n it langages syst mes d exploitation mat riels r seaux L objet CORBA est le composant logiciel cible C est une entit virtuelle g r e par le bus CORBA L activation est le processus d association d un objet d implantation un objet CORBA L implantation de l objet est l entit codant l objet CORBA un instant donn et g rant un tat de l objet temporaire Au cours du temps un m me objet CORBA peut se voir associer des implantations diff rentes Le code d implantation regroupe les traitements associ s l implantation des op rations de l objet CORBA Cela peut tre par exemple une classe Java aussi bien qu un ensemble de fonctions C L application serveur est la structure d accueil des objets d implantation et des ex cutions des op rations Cela peut tre par exemple un processus Unix Dans la suite de ce document nous verrons que ces notions abstraites se traduisent par des composantes technologiques fournies par la norme CORBA L architecture globale L OMG d finit aussi une vision globale de la construction d applications r parties l Object Management Architecture Guide OMAG Cette architecture globale appel e aussi l OMA vise classifier les diff rents objets qui interviennent dans une application en fonction de leurs r les Le bus d objets r partis est la cl de vo te de l architecture globale de l OMG Il assure le transport des requ tes entre tous les objets CORBA Il offre un environnement d ex cution aux objets masquant l h t rog n it li e aux langages de programmation aux syst mes d exploitation aux processeurs et aux r seaux Ce bus est plus amplement d taill dans la suite Les services objet communs CORBAservices fournissent sous forme d objets CORBA sp cifi s gr ce au langage OMG-IDL les fonctions syst mes n cessaires la plupart des applications r parties Actuellement l OMG a d fini des services pour les annuaires Nommage et Vendeur le cycle de vie des objets les relations entre objets les v nements les transactions la s curit la persistance etc Au fur et mesure des besoins l OMG ajoute de nouveaux services communs Les utilitaires communs CORBAfacilities sont des canevas d objets Frameworks qui r pondent plus particuli rement aux besoins des utilisateurs Ils standardisent l interface utilisateur e g Fresco OpenDoc la gestion de l information l administration le Workflow etc Les interfaces de domaine Domain Interfaces d finissent des objets de m tiers sp cifiques des secteurs d activit s comme la finance e g monnaie lectronique la sant e g dossier m dical et les t l coms e g transport multim dia Leur objectif est de pouvoir assurer l interop rabilit s mantique entre les syst mes d informations d entreprises d un m me m tier les Business Object Frameworks BOFs Les objets applicatifs Application Objects sont ceux qui sont sp cifiques une application r partie et ne sont donc pas standardis s Toutefois d s que le r le de ces objets appara t dans plus d une application ils peuvent alors rentrer dans une des cat gories pr c dentes et donc tre standardis s par l OMG Le bus d objets r partis CORBA Les caract ristiques Le bus CORBA est donc l interm diaire n gociateur travers lequel les objets vont pouvoir dialoguer Il fournit les caract ristiques suivantes La liaison avec tous les langages de programmation cependant actuellement l OMG a seulement d fini officiellement cette liaison pour les langages C C SmallTalk Ada COBOL et Java La transparence des invocations les requ tes aux objets semblent toujours tre locales le bus CORBA se chargeant de les acheminer en utilisant le canal de communication le plus appropri L invocation statique et dynamique ces deux m canismes compl mentaires permettent de soumettre les requ tes aux objets En statique les invocations sont contr l es la compilation En dynamique les invocations doivent tre contr l es l ex cution Un syst me auto-descriptif les interfaces des objets sont connues du bus et sont aussi accessibles par les programmes par l interm diaire du r f rentiel des interfaces Nous reviendrons plus en d tail sur cet aspect dans la section L activation automatique et transparente des objets les objets sont en m moire uniquement s ils sont utilis s par des applications clientes L interop rabilit entre bus partir de la norme CORBA un protocole g n rique de transport des requ tes GIOP pour General Inter-ORB Protocol a t d fini permettant l interconnexion de bus CORBA provenant de fournisseurs distincts une de ses instanciations est l Internet Inter-ORB Protocol IIOP fonctionnant au dessus de TCP IP Les composantes Le bus CORBA fournit les composantes suivantes ORB Object Request Broker est le noyau de transport des requ tes aux objets Il int gre au minimum les protocoles GIOP et IIOP L interface au bus fournit les primitives de base comme l initialisation de l ORB SII Static Invocation Interface est l interface d invocations statiques permettant de soumettre des requ tes contr l es la compilation des programmes Cette interface est g n r e partir de d finitions OMG-IDL DII Dynamic Invocation Interface est l interface d invocations dynamiques permettant de construire dynamiquement des requ tes vers n importe quel objet CORBA sans g n rer utiliser une interface SII IFR Interface Repository est le r f rentiel des interfaces contenant une repr sentation des interfaces OMG-IDL accessible par les applications durant l ex cution SSI Skeleton Static Interface est l interface de squelettes statiques qui permet l implantation des objets de recevoir les requ tes leur tant destin es Cette interface est g n r e comme l interface SII DSI Dynamic Skeleton Interface est l interface de squelettes dynamiques qui permet d intercepter dynamiquement toute requ te sans g n rer une interface SSI C est le pendant de DII pour un serveur OA Object Adapter est l adaptateur d objets qui s occupe de cr er les objets CORBA de maintenir les associations entre objets CORBA et implantations et de r aliser l activation automatique si n cessaire ImplR Implementation Repository est le r f rentiel des implantations qui contient l information n cessaire l activation Ce r f rentiel est sp cifique chaque produit CORBA Ces diff rentes composantes sont toutes d crites dans le langage OMG-IDL ce qui les rend accessibles au travers du bus e g le r f rentiel des interfaces Cela permet aussi d homog n iser les diff rentes implantations possibles de la norme car diff rentes approches peuvent tre envisag es pour construire un bus bus processus les objets sont dans le m me espace m moire que les clients C est le cas typique des applications embarqu es Ici le langage OMG-IDL sert sp cifier les objets bus OS les clients et les fournisseurs sont des processus diff rents sur la m me machine Le bus CORBA peut alors tre tout ou partie du syst me d exploitation e g Spring l OS orient objet de SUN Spring bus r seau les processus sont sur des sites diff rents et les requ tes sont v hicul es travers le r seau c est le cas sur Internet avec IIOP F d ration de bus CORBA plusieurs bus distincts peuvent tre mis ensemble pour former une f d ration Les communications entre ces bus peuvent se faire soit par le protocole commun IIOP soit travers des passerelles sp cifiques ou g n riques DII-DSI Les protocoles r seaux Tout bus la norme CORBA doit fournir les protocoles GIOP et IIOP Le protocole GIOP d finit une repr sentation commune des donn es CDR ou Common Data Representation un format de r f rences d objet interop rable IOR ou Interoperable Object Reference et un ensemble de messages de transport des requ tes aux objets Request Reply Cependant GIOP est seulement un protocole g n rique IIOP fournit alors une implantation de GIOP au dessus de TCP IP et donc d Internet Les IORs dans le contexte d IIOP doivent contenir le nom complet de l interface OMG-IDL de l objet l adresse IP de la machine Internet o est localis l objet un port IP pour se connecter au serveur de l objet une cl pour d signer l objet dans le serveur Son format est libre et il est donc diff rent pour chaque implantation du bus CORBA Toutefois un bus CORBA peut contenir d autres protocoles de transport des requ tes aux objets Par exemple nous travaillons actuellement sur un bus multi-protocoles permettant d avoir simultan ment des communications en IIOP UDP-IOP et Multicast-IOP Les services objet communs Les services objet communs ont pour objectif de standardiser les interfaces des fonctions syst me indispensables la construction et l ex cution de la plupart des applications r parties Cette section d crit sommairement ces services selon leur r le dans une application r partie Elle se base sur l actuelle sp cification CORBAservices COS et les travaux en cours l OMG La recherche d objets Cette cat gorie de services offre les m canismes pour rechercher retrouver dynamiquement sur le bus les objets n cessaires aux applications Ce sont les quivalents des annuaires t l phoniques Le service Nommage Naming Service est l quivalent des pages blanches les objets sont d sign s par des noms symboliques Cet annuaire est mat rialis par un graphe de r pertoires de d signation Le service Vendeur Trader Service est l quivalent des pages jaunes les objets peuvent tre recherch s en fonction de leurs caract ristiques La vie des objets Cette cat gorie regroupe les services prenant en charge les diff rentes tapes de la vie des objets CORBA Le service Cycle de Vie Life Cycle Service d crit des interfaces pour la cr ation la copie le d placement et la destruction des objets sur le bus Il d finit pour cela la notion de fabriques d objets Object Factory Le service Propri t s Property Service permet aux utilisateurs d associer dynamiquement des valeurs nomm es des objets Ces propri t s ne modifient pas l interface IDL mais repr sentent des besoins sp cifiques du client comme par exemple des annotations Le service Relations Relationship Service sert g rer des associations dynamiques appartenance inclusion r f rence auteur emploi reliant des objets sur le bus Il permet aussi de manipuler des graphes d objets Le service Externalisation Externalization Service apporte un m canisme standard pour fixer ou extraire des objets du bus La migration le passage par valeur et la sauvegarde des objets doivent reposer sur ce service Le service Persistance Persistent Object Service offre des interfaces communes un m canisme permettant de stocker des objets sur un support persistant Quel que soit le support utilis ce service s utilise de la m me mani re via un Persistent Object Manager Un objet persistant doit h riter de l interface Persistent Object et d un m canisme d externalisation Le service Interrogations Query Service permet d interroger les attributs des objets Il repose sur les langages standards d interrogation comme SQL ou OQL L interface Query permet de manipuler les requ tes comme des objets CORBA Les objets r sultats sont mis dans une collection Le service peut f d rer des espaces d objets h t rog nes Le service Collections Collection Service permet de manipuler d une mani re uniforme des objets sous la forme de collections et d it rateurs Les structures de donn es classiques listes piles tas sont construites par sous-classement Ce service est aussi con u pour tre utilis avec le service d interrogations pour stocker les r sultats de requ tes Le service Changements Versionning Service permet de g rer et de suivre l volution des diff rentes versions des objets Ce service maintient des informations sur les volutions des interfaces et des implantations Cependant il n est pas encore sp cifi officiellement La s ret de fonctionnement Cette cat gorie de services fournit les fonctions syst me assurant la s ret de fonctionnement n cessaire des applications r parties Le service S curit Security Service permet d identifier et d authentifier les clients de chiffrer et de certifier les communications et de contr ler les autorisations d acc s Ce service utilise les notions de serveurs d authentification de clients r les droits et d l gation de droits d IIOP s curis utilisant Kerberos ou SSL Le service Transactions Object Transaction Service assure l ex cution de traitements transactionnels impliquant des objets distribu s et des bases de donn es en fournissant les propri t s ACID Le service Concurrence Concurrency Service fournit les m canismes pour contr ler et ordonnancer les invocations concurrentes sur les objets Le m canisme propos est le verrou Ce service est con u pour tre utilis conjointement avec le service Transactions Les communications asynchrones Par d faut la coop ration des objets CORBA est r alis e selon un mode de communication client serveur synchrone Toutefois il existe un ensemble de services assurant des communications asynchrones Le service Ev nements Event Service permet aux objets de produire des v nements asynchrones destination d objets consommateurs travers des canaux d v nements Les canaux fournissent deux modes de fonctionnement Dans le mode push le producteur a l initiative de la production le consommateur est notifi des v nements Dans le mode pull le consommateur demande explicitement les v nements le producteur est alors sollicit Le service Notification Notification Service est une extension du service pr c dent Les consommateurs sont uniquement notifi s des v nements les int ressant Pour cela ils posent des filtres sur le canal r duisant ainsi le trafic r seau engendr par la propagation des v nements inint ressants Le service Messagerie CORBA Messaging OMG-CM d finit un nouveau mod le de communication asynchrone permettant de g rer des requ tes persistantes lorsque l objet appelant et l objet appel ne sont pas pr sents simultan ment sur le bus Cela permet d avoir des fonctionnalit s proches des MOMs Message Oriented Middleware Autres fonctions Le service Temps Time Service fournit des interfaces permettant d obtenir une horloge globale sur le bus Universal Time Object de mesurer le temps et de synchroniser les objets Le service Licences Licensing Service permet de mesurer et de contr ler l utilisation des objets et cela en vue de facturer les clients et de r mun rer les fournisseurs Les interfaces de domaine Parall lement aux services l OMG porte ses efforts sur la conception de canevas d objets d di s des secteurs d activit ou m tiers ou des besoins applicatifs transverses des m tiers Ces efforts sont effectu s au sein de groupes de travail nomm s selon les cas Working Groups Domain Task Forces ou Special Interest Groups etc Les groupes les plus actifs sont actuellement Business Objects DTF standardise les m thodogies et les technologies pour la conception d applications m tier au dessus de CORBA Workflow Workgroup travaille sur les outils CORBA n cessaires au fonctionnement des applications de gestion de flux de travail indispensables aux activit s coop ratives au sein des entreprises C I DSIG fait la promotion de CORBA au sein des organismes et administrations li s la d fense en jouant un r le p dagogique End User SIG travaille en relation avec les utilisateurs finaux fin de d terminer leurs besoins de conna tre leurs exp riences pour mieux orienter les futurs technologies CORBA CORBAmed d finit les standards OMG pour le domaine de la m decine Ces standards permettront l interop rabilit entre les acteurs de la sant en d finissant par exemple la notion d objets patient Life Sciences Research DTF est un nouveau groupe d di l utilisation de CORBA par les instituts de recherche dans les sciences de la vie les universit s et les laboratoires pharmaceutiques Electronic Commerce s int resse la d finition de technologies CORBA pour les applications de commerce lectronique Financial Services DTF produit les sp cifications OMG li es au domaine de la finance banque comme par exemple la d finition d objets monnaie et d objets convertisseur de monnaie Telecom DTF fait la liaison entre le monde CORBA et le monde des t l communications Internet Platform SIG travaille sur les rapprochements des technologies CORBA avec les technologies d Internet Il tudie principalement les relations avec le World Wide Web Manufacturing DFT tente de combler le foss entre les technologies OMG et les besoins des industries Realtime SIG r fl chit sur la prise en compte des aspects temps r el au sein du bus CORBA Distributed Simulation SIG adresse les probl mes li s la simulation distribu e et son ex cution au dessus d un bus CORBA Test SIG doit d finir les m thodologies les outils les protocoles pour automatiser les tests d applications r parties CORBA Object Model Working Group travaille sur l unification des mod les orient s objet en vue de cr er un standard plus g n raliste que celui propos actuellement par CORBA UML Revision Task Force travaille sur le futur du langage UML Ce langage standardis par l OMG est une notation graphique pour d finir des mod les orient s objet Cette liste n est pas exhaustive car les groupes de travail OMG sont lanc s ou arr t s au fur et mesure du temps des besoins et de l activit de leurs participants De plus vu le nombre de groupes il nous est assez difficile de suivre pleinement l activit de chacun d eux Cependant le point important retenir est que l OMG est un consortium de standardisation de facto ouvert qui est pr t accueillir et ou cr er tout nouveau groupe de travail voulant r fl chir aux impacts de l utilisation du bus CORBA dans un contexte applicatif particulier Par exemple le groupe Sciences de la vie a t cr tout r cemment pour permettre d tendre la vision globale de l OMG vers ce nouveau domaine Le langage OMG-IDL La notion de contrat IDL Le langage OMG-IDL Interface Definition Language permet d exprimer sous la forme de contrats IDL Geib la coop ration entre les fournisseurs et les utilisateurs de services en s parant l interface de l implantation des objets et en masquant les divers probl mes li s l interop rabilit l h t rog n it et la localisation de ceux-ci Un contrat IDL sp cifie les types manipul s par un ensemble d applications r parties c est- -dire les types d objets ou interfaces IDL et les types de donn es chang s entre les objets Le contrat IDL isole ainsi les clients et fournisseurs de l infrastructure logicielle et mat rielle les mettant en relation travers le bus CORBA Les contrats IDL sont projet s en souches IDL ou interface d invocations statiques SII dans l environnement de programmation du client et en squelettes IDL ou interface de squelettes statiques SSI dans l environnement de programmation du fournisseur Le client invoque localement les souches pour acc der aux objets Les souches IDL construisent des requ tes qui vont tre transport es par le bus puis d livr es par celui-ci aux squelettes IDL qui les d l gueront aux objets Ainsi le langage OMG-IDL est la cl de vo te du bus d objets r partis CORBA Un exemple L exemple ci-dessous illustre la sp cification d un service de gestion de dates Les mots cl s OMG-IDL sont mis en gras pragma prefix lifl fr D finit l organisation sp cifiant le contrat IDL module date Regroupement des d finitions communes ce service typedef short Annee Une ann e est cod e par un entier bits typedef sequence Annee DesAnnees Ensemble non born d'ann es enum Mois Enum ration des mois Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre typedef sequence Mois DesMois Ensemble non born de mois enum JourDansLaSemaine Enum ration des jours de la semaine Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche typedef sequence JourDansLaSemaine DesJoursDansLaSemaine typedef unsigned short Jour Un jour est cod par un entier bits non sign typedef sequence Jour DesJours Ensemble non born de jours struct Date Structure d finissant la notion de date Jour le jour Mois le mois Annee l annee typedef sequence Date DesDates Ensemble non born de dates union DateMultiFormat Regroupement de divers formats de dates switch unsigned short Le discriminant anonyme sert choisir le format case string chaine Si alors l union contient une cha ne case Jour nombreDeJours Si alors elle contient un nombre de jours default Date date Par d faut cette union contient une date typedef sequence DateMultiFormat DesDateMultiFormats exception ErreurInterne Exception vide exception MauvaiseDate DateMultiFormat date Exception avec des champs interface Traitement Service de traitement sur les dates boolean verifierDate in Date d JourDansLaSemaine calculerJourDansLaSemaine in Date d raises ErreurInterne MauvaiseDate long nbJoursEntreDeuxDates in Date d in Date d raises MauvaiseDate void dateSuivante inout Date d in Jour nombreJours raises MauvaiseDate interface Convertisseur Service de conversion de dates Jour convertirDateVersJourDansAnnee in Date d raises MauvaiseDate Date convertirChaineVersDate in string chaine raises MauvaiseDate string convertirDateVersChaine in Date d raises MauvaiseDate attribute Annee annee courante Fixer l ann e courante pour l op ration suivante Date convertirJourDansAnneeVersDate in Jour jour readonly attribute Annee base annee L ann e de r f rence des op rations suivantes Date convertirJourVersDate in Jour jour Jour convertirDateVersJour in Date d raises MauvaiseDate void obtenirDate in DateMultiFormat dmf out Date d raises MauvaiseDate interface ServiceDate Traitement Convertisseur H ritage de sp cification Le langage OMG-IDL permet d exprimer simplement et ind pendamment de tout aspect d implantation langages syst mes d exploitation machines et r seaux et ou de r partition les types de donn es et d objets manipul s par un service CORBA Bien s r le choix des identificateurs de ces types est d terminant pour une lecture ais e d une sp cification OMG-IDL comme c est le cas dans l exemple ci-dessus Les fonctionnalit s La liste suivante pr sente les constructions offertes par le langage OMG-IDL et leurs utilit s Un pragma permet de fixer les identifiants d signant les d finitions OMG-IDL l int rieur du r f rentiel des interfaces Ces identifiants assurent une d signation unique et coh rente des d finitions OMG-IDL quel que soit le r f rentiel des interfaces consult i e ils sont utilis s pour f d rer des IFRs La forme la plus utilis e est le pragma prefix qui fixe l organisation d finissant un contrat IDL en utilisant son nom de domaine Internet Le pragma version permet de d finir le num ro de version d une sp cification OMG-IDL Un module sert regrouper des d finitions de types qui ont un int r t commun e g date Cette structuration permet aussi de limiter les conflits de noms pouvant intervenir entre plusieurs sp cifications il est facilement imaginable que le nom Convertisseur soit utilis dans une autre sp cification Les conflits de nom de module sont facilement r gl s par le pragma prefix Les types de donn es de base sont ceux couramment rencontr s en informatique void short unsigned short long unsigned long long long bits unsigned long long float double long double bits boolean octet char string wchar et wstring format de caract res international et fixed pour les nombres pr cision fixe Le format binaire de ces types est d fini par la norme afin de r gler les probl mes d changes de donn es entre environnements h t rog nes Les types de m ta-donn es TypeCode et any sont une composante sp cifique l OMG-IDL et nouvelle par rapport d autres langages IDL Le type TypeCode permet de stocker la description de n importe quel type IDL Le type any permet de stocker une valeur IDL de n importe quel type en conservant son TypeCode Ces m ta-types permettent de sp cifier des contrats IDL g n riques ind pendants des types de donn es manipul s e g une pile d any stocke n importe quelle valeur Une constante se d finit par un type simple un nom et une valeur valuable la compilation e g const double PI Un alias ou typedef permet de cr er de nouveaux types en renommant des types d j d finis Par exemple il est plus clair de sp cifier qu une op ration retourne un Jour plut t qu un entier bits sign Une num ration ou enum d finit un type discret via un ensemble d identificateurs Par exemple il est plus parlant d num rer les jours de la semaine que d utiliser un entier pour coder un JourDansLaSemaine Une structure d finit une fiche regroupant des champs e g Date Cette construction est fortement employ e car elle permet de transf rer des structures de donn es compos es entre objets CORBA Une union juxtapose un ensemble de champs le choix tant arbitr par un discriminant de type simple entiers caract re bool en ou num rations Toutefois cette construction est tr s rarement utilis e et on pr f rera plut t utiliser le type any Un tableau sert transmettre un ensemble de taille fixe de donn es homog nes Mais cette construction est rarement utilis e car on lui pr f re la suivante Une s quence permet de transf rer un ensemble de donn es homog nes dont la taille sera fix e l ex cution et non la d finition comme pour un tableau e g DesDates Une exception sp cifie une structure de donn es permettant une op ration de signaler les cas d erreurs ou de probl mes exceptionnels pouvant survenir lors de son invocation Une exception se compose de z ro e g ErreurInterne ou plusieurs champs e g MauvaiseDate Une interface d crit les op rations fournies par un type d objets CORBA e g Traitement et Convertisseur Une interface IDL peut h riter de plusieurs autres interfaces e g ServiceDate L h ritage multiple et r p t est autoris car ici on parle seulement d h ritage de sp cifications La seule contrainte impos e est qu une interface ne peut pas h riter de deux interfaces qui d finissent un m me nom d op rations Ce probl me doit tre r solu manuellement en vitant liminant les conflits de noms La surcharge est donc aussi interdite en OMG-IDL Actuellement un objet CORBA ne peut implanter qu une seule interface IDL CORBA int grera la notion d interfaces multiples OMG-MI comme cela existe d j en Java ou avec COM Orfali Une op ration se d finit par une signature qui comprend le type du r sultat le nom de l op ration la liste des param tres et la liste des exceptions ventuellement d clench es lors de l invocation Un param tre se caract rise par un mode de passage un type et un nom formel Les modes de passages autoris s sont in out et inout Le r sultat et les param tres peuvent tre de n importe quel type exprimable en IDL Par d faut l invocation d une op ration est synchrone Cependant il est possible de sp cifier qu une op ration est asynchrone oneway c est- -dire que le r sultat est de type void que tous les param tres sont en mode in et qu aucune exception ne peut tre d clench e Malheureusement CORBA ne sp cifie pas la s mantique d ex cution d une op ration oneway l invocation peut chouer tre ex cut e plusieurs fois sans que l appelant ou l appel puissent en tre avertis Toutefois dans la majorit des implantations CORBA l invocation d une telle op ration quivaut un envoi fiabilis de messages De plus l OMG travaille sur les sp cifications d un service pour les communications asynchrones CORBA Messaging Un attribut est une mani re raccourcie d exprimer une paire d op rations pour consulter et modifier une propri t d un objet CORBA Il se caract rise par un type et un nom De plus on peut sp cifier si l attribut est en lecture seule readonly ou consultation modification mode par d faut Il faut tout de m me noter que le terme IDL attribut est trompeur l implantation d un attribut IDL peut tre faite par un traitement quelconque par exemple l implantation de l attribut temperature d un Thermometre consultera un capteur physique tandis que celle de l attribut annee courante du Convertisseur sera plut t r alis e par une variable d tat de l objet Cette description du langage OMG-IDL est toutefois incompl te Les types Object any et TypeCode seront d taill s par la suite Pour plus d informations sur la syntaxe du langage OMG-IDL nous vous conseillons de vous reporter Geib et bien s r CORBA Les limites actuelles Bien que le langage OMG-IDL soit simple et assez complet il est actuellement limit sur certains points Les types de donn es de base sont limit s en nombre et l utilisateur de CORBA ne peut pas en ajouter facilement Cependant l OMG ne s interdit pas d introduire de nouveaux types au fur et mesure des besoins e g les entiers bits les r els bits les caract res internationaux et les nombres pr cision fixe n taient pas pr sents dans les premi res versions de la norme CORBA L impossibilit de sp cifier des types intervalles qui seraient tout de m me pratique pour exprimer des Secondes des Minutes ou des Heures L impossibilit de sous-typer d tendre la d finition d une structure ou d une union cela peut tre g nant pour la r utilisation et la sp cialisation de sp cification IDL Par exemple il est impossible d enrichir la structure Date dans le contexte d un nouveau service de dates L interdiction de conflits de noms l int rieur d un module ou d une interface impliquant l interdiction de surcharger des op rations c est- -dire d finir deux op rations ayant le m me nom mais des signatures diff rentes Le passage par valeur de structures de donn es et non d objets Par exemple si l on veut transf rer un graphe d objets il faut l aplatir dans une s quence de structures Il serait pr f rable comme avec Java RMI de pouvoir passer l objet graphe par valeur L OMG travaille actuellement sur une extension de l OMG-IDL pour exprimer le passage d objets par valeur cela sera disponible dans CORBA OMG-OBV Toutefois l OMG est un lieu de standardisation tr s actif et donc si les limites soulev es ci-dessus deviennent l avenir des inconv nients majeurs au d veloppement de CORBA alors on peut tre s r que de nouvelles sp cifications viendront am liorer le langage OMG-IDL D autres limites peuvent encore tre exprim es mais celles-ci n cessiteront de nouveaux langages Le langage OMG-IDL ne sert pas exprimer la s mantique des objets comme des contraintes des pr et post conditions sur les op rations L expression de la s mantique permettrait de tester et valider automatiquement les objets La description de la qualit de service c est- -dire les caract ristiques d une implantation ne sont pas exprimables avec le langage OMG-IDL La r partition et les liaisons entre les objets c est- -dire l architecture logicielle d une application ne s expriment pas non plus via le langage OMG-IDL Cependant l OMG a standardis UML Unified Modelling Language UML qui offre une notation graphique universelle pour mod liser les applications De plus l OMG travaille aussi sur un mod le de composants OMG-MC qui devrait palier ce probl me La projection vers un langage de programmation Une projection est la traduction d une sp cification OMG-IDL dans un langage d implantation Pour permettre la portabilit des applications d un bus vers un autre les r gles de projection sont normalis es et fixent pr cis ment la traduction de chaque construction IDL en une ou des constructions du langage cible et les r gles d utilisation correcte de ces traductions Actuellement ces r gles existent pour les langages C C SmallTalk Ada Java et Cobol orient objet Nous ne d taillons pas ici ces r gles pour plus d informations reportez-vous CORBA Toutefois voici quelques exemples de r gles de projection Construction OMG-IDL Projection en C Projection en Java module M Au choix du produit CORBA namespace M ou class M ou pr fixe M package M interface J I class J public virtual I interface J extends I String char java lang String La projection est r alis e par un pr -compilateur IDL d pendant du langage cible et de l implantation du bus CORBA cible Ainsi chaque produit CORBA fournit un pr -compilateur IDL pour chacun des langages support s Le code des applications est alors portable d un bus un autre car les souches squelettes g n r s s utilisent toujours de la m me mani re quel que soit le produit CORBA Par contre le code des souches et des squelettes IDL n est pas forc ment portable car il d pend de l implantation du bus pour lequel ils ont t g n r La figure suivante illustre la pr -compilation d un contrat IDL vers les langages cibles C et Java Comme les deux applications vont dialoguer travers IIOP on peut tr s bien d un c t utiliser un pr -compilateur IDL C fourni par un bus A et de l autre c t utiliser un pr -compilateur IDL Java fourni par un bus B La mise en place d une application CORBA L OMG n impose pas de processus de conception et de d veloppement d applications distribu es la norme CORBA laisse une enti re libert sur le choix des outils mettre en uvre N anmoins la mise en place d une application CORBA suit toujours peu pr s le m me sc nario La d finition du contrat IDL partir du cahier des charges il faut d finir les objets composant l application l aide d une m thodologie orient e objet e g OMT Cette mod lisation est ensuite traduite sous la forme de contrats IDL compos s des interfaces des objets et des types de donn es utiles aux changes d informations entre les objets La pr -compilation du contrat IDL les interfaces des objets sont d crites dans des fichiers texte Le pr -compilateur prend en entr e un tel fichier et op re un contr le syntaxique et s mantique des d finitions OMG-IDL contenues dans ce fichier Le pr -compilateur peut aussi charger ces d finitions dans le r f rentiel des interfaces C'est la partie frontale commune tous les pr -compilateurs IDL La projection vers les langages de programmation le pr -compilateur IDL g n re le code des souches qui sera utilis par les applications clientes des interfaces d crites dans le fichier IDL ainsi que le code des squelettes pour les programmes serveurs implantant ces types Cette projection est sp cifique chaque langage de programmation un environnement CORBA fournit un pr -compilateur IDL pour chacun des langages support s L'implantation des interfaces IDL en compl tant et ou en r utilisant le code g n r pour les squelettes le d veloppeur implante les objets dans le langage de son choix ou dans le langage le mieux adapt la r alisation de ses objets Il doit tout de m me se plier aux r gles de projection vers ce langage L'implantation des serveurs d'objets le d veloppeur doit crire les programmes serveurs qui incluent l'implantation des objets et les squelettes pr -g n r s Ces programmes contiennent le code pour se connecter au bus instancier les objets racines du serveur rendre publiques les r f rences sur ces objets l'aide par exemple du service Nommage et se mettre en attente de requ tes pour ces objets Le nombre de programmes serveurs est tout de m me souvent limit L'implantation des applications clientes des objets le d veloppeur crit un ensemble de programmes clients qui agissent sur les objets en les parcourant et en invoquant des op rations sur ceux-ci Ces programmes incluent le code des souches le code pour l'interface Homme-Machine et le code sp cifique l'application Les clients obtiennent les r f rences des objets serveurs en consultant le service Nommage Il faut tout de m me souvent d velopper une multitude de programmes clients des objets en fonction des r les et des activit s de chacun des utilisateurs de l application r partie L'installation et la configuration des serveurs cette phase consiste installer dans le r f rentiel des implantations les serveurs pour automatiser leur activation lorsque des requ tes arrivent pour leurs objets La diffusion et la configuration des clients une fois les programmes clients mis au point il est n cessaire de diffuser les ex cutables sur les sites de leur future utilisation et de configurer les sites clients pour qu'ils sachent o se trouvent les serveurs utilis s L'ex cution r partie de l application enfin l'exploitation de l application peut commencer Le bus d'objets r partis CORBA assure alors les communications entre les programmes clients et les objets via le protocole IIOP Quel que soit le langage employ avec CORBA et la nature de l application le d veloppeur est toujours cens suivre le cycle de d veloppement que nous venons de pr senter La section suivante pr sente dans les d tails la mise en uvre de ce sc nario Une application d annuaires Apr s ce tour d horizon des concepts propos s par l OMG nous allons passer la mise en pratique du bus CORBA Nous avons choisi pour cela de pr senter la r alisation d une application de gestion d annuaires Celle-ci est compos e d objets CORBA mod lisant des r pertoires d adresses de personnes sur Internet Ces objets sont g r s par des serveurs permettant de les cr er d truire et retrouver Des exemples d applications clientes illustrent l utilisation de ces objets Certains de ces clients sont pr venus automatiquement de tout changement dans les r pertoires qui les int ressent selon un principe de notification Cette application nous permet de voir concr tement l utilisation du langage OMG-IDL et l implantation d objets CORBA de serveurs et de clients avec les langages C Java et CorbaScript De plus nous abordons l utilisation du service Nommage le cycle de vie des objets et la notification d applications clientes Dans ce document nous ne pr sentons que les fragments de code significatifs pour la compr hension Toutefois l ensemble du code de cette application est disponible sur notre site WWW Il fonctionne avec le bus CORBA ORBacus connu aussi sous le nom d OmniBroker OOC mais doit pouvoir facilement tre port sur d autres bus Le choix de ce bus est justifi par le fait qu il est gratuit pour des utilisations non commerciales qu il fournit une liaison avec les langages C et Java et surtout qu il est de tr s bonne facture Le contrat IDL d un r pertoire d adresses L ensemble du contrat IDL de notre application d annuaires est introduit au fur et mesure de sa construction Le r pertoire d adresses est le type d objets principalement manipul par l application voici donc sa sp cification OMG-IDL include date idl R utilisation de la sp cification du service de dates pragma prefix lifl fr C est un contrat encore d fini au LIFL - module annuaire Contrat IDL de l application r partie typedef string Nom D finition du concept nom d'une personne typedef sequence Nom DesNoms Ensemble de noms struct Personne Informations associ es une personne Nom nom - son nom string informations - donn es diverses string telephone - num ro de t l phone string email - son adresse Email string url - son adresse WWW date Date date naissance - date de naissance R utilisation de la structure Date par pr fixage du module date Le premier n est pas indispensable interface Repertoire readonly attribute string libelle exception ExisteDeja Nom nom exception Inconnu Nom nom void ajouterPersonne in Personne personne raises ExisteDeja void retirerPersonne in Nom nom raises Inconnu void modifierPersonne in Nom nom in Personne personne raises Inconnu Personne obtenirPersonne in Nom nom raises Inconnu DesNoms listerNoms typedef sequence Personne DesPersonnes Ensemble de personnes utile plus tard en C L ensemble du contrat de l application est regroup dans le module annuaire Les r pertoires sont d crits par l interface Repertoire qui fournit l attribut libelle informant sur le contenu du r pertoire et des op rations pour ajouter retirer modifier obtenir et lister les personnes contenues par celui-ci La structure Personne regroupe les caract ristiques d crivant une personne son nom des informations diverses son num ro de t l phone sa bo te lectronique son adresse WWW et sa date de naissance ici nous r utilisons la sp cification du service de dates L alias Nom permet une meilleure lisibilit du concept de nom d une personne La s quence DesNoms est n cessaire pour pouvoir retourner l ensemble des noms des personnes d un r pertoire Les exceptions ExisteDeja et Inconnu permettent de signaler les cas exceptionnels dus l ajout d une personne ayant un nom d j recens dans le r pertoire ou la recherche d une personne inconnue La projection du contrat IDL Le passage de ce contrat IDL dans des pr -compilateurs permet d obtenir les souches et les squelettes pour les langages cibles Le module annuaire est projet vers l espace de d signation C annuaire ou annuaire selon le produit CORBA utilis car la projection C d un module IDL peut se faire de deux mani res diff rentes ORBacus a choisi la seconde Le C ne fournissant pas de ramasse-miettes par d faut la projection IDL C fournit des classes C pour g rer automatiquement la lib ration de la m moire allou e par le bus CORBA noms de type ayant comme extension var Les types g n r s avec l extension ptr sont juste des d finitions de types pointeurs titre illustratif voici une version simplifi e de la projection du contrat IDL avec le pr -compilateur IDL C d ORBacus la partie implantation n est pas pr sent e car elle d pend des sp cificit s techniques de ce bus Fichier annuaire h include date h typedef char annuaire Nom Projection du typedef annuaire Nom typedef CORBA String var annuaire Nom var typedef OBStrSeq annuaire DesNoms Projection de la s quence annuaire DesNoms typedef OBSeqVar OBStrSeq annuaire DesNoms var struct annuaire Personne Projection de la structure annuaire Personne constructeur destructeur op rateur de copie annuaire Nom var nom CORBA String var informations CORBA String var telephone CORBA String var email CORBA String var url date Date date naissance typedef OBVarVar annuaire Personne annuaire Personne var class annuaire Repertoire Projection de l interface annuaire Repertoire typedef annuaire Repertoire annuaire Repertoire ptr typedef OBObjVar annuaire Repertoire annuaire Repertoire var class annuaire Repertoire virtual public CORBA Object public virtual char libelle struct ExisteDeja public CORBA UserException struct Inconnu public CORBA UserException virtual void ajouterPersonne const annuaire Personne personne virtual void retirerPersonne const char nom virtual void modifierPersonne const char nom const annuaire Personne personne virtual annuaire Personne obtenirPersonne const char nom virtual annuaire DesNoms listerNoms static annuaire Repertoire ptr narrow CORBA Object ptr fonctions sp cifiques pour CORBA ou pour l implantation ORBacus typedef OBVarSeq annuaire Personne annuaire DesPersonnes typedef OBSeqVar OBVarSeq annuaire Personne annuaire DesPersonnes var En Java le contrat est projet vers le package fr lifl annuaire car le langage Java offre la possibilit de d finir l organisation propri taire d un package Le fragment suivant illustre la projection Java de la structure IDL annuaire Personne package fr lifl annuaire final public class Personne public Personne public Personne String ob a String ob a String ob a String ob a String ob a fr lifl date Date ob a nom ob a informations ob a telephone ob a email ob a url ob a date naissance ob a public String nom public String informations public String telephone public String email public String url public fr lifl date Date date naissance Les deux sections suivantes illustrent l utilisation de la projection IDL vers les langages C et Java L implantation du r pertoire Comme on peut le constater la description OMG-IDL du type d objets Repertoire est totalement abstraite et compl tement ind pendante de tout aspect li son implantation Il est facilement imaginable d utiliser une base de donn es relationnelle ou un fichier pour conserver l tat d un r pertoire de personnes Dans cette section nous allons voir comment facilement implanter ce r pertoire en C Java et CorbaScript L implantation en C Une implantation possible du r pertoire est fournie par la classe C RepertoireImpl suivante Celle-ci doit h riter du squelette g n r par le pr -compilateur IDL C l identificateur annuaire Repertoire skel est sp cifique au bus ORBacus Elle doit alors implanter l attribut et les op rations de l interface Repertoire Pour cela elle encapsule dans les deux variables d instances le libelle et personnes l tat du r pertoire Ici la structure de donn es choisie est non persistante afin de simplifier l exemple De plus la projection C de la s quence IDL annuaire DesPersonnes nous fournit facilement une structure de stockage des personnes Importation du squelette C de l'interface IDL annuaire Repertoire include annuaire skel h l'extension skel est sp cifique la projection C d'ORBacus ORBacus utilise la concat nation de noms pour d signer les les d finitions contenues dans un module IDL e g en IDL annuaire Personne - en C annuaire Personne class RepertoireImpl public virtual annuaire Repertoire skel CORBA String var le libelle Une cha ne de caract res annuaire DesPersonnes personnes L ensemble des personnes CORBA Long rechercher const char nom Recherche de la position d une personne for CORBA ULong i i personnes length i if strcmp personnes i nom nom return i Si trouv return - Si pas trouv public RepertoireImpl const char libelle Constructeur annuaire Repertoire skel Appel du constructeur du squelette le libelle libelle Initialisation par copie implicite du libell personnes Initialisation de la s quence de personnes RepertoireImpl Destructeur virtual char libelle En C la valeur retourn e doit tre une copie c est une r gle de projection return CORBA string dup le libelle Duplique une cha ne de caract res virtual void ajouterPersonne const annuaire Personne personne CORBA Long pos rechercher personne nom if pos - throw annuaire Repertoire ExisteDeja personne nom CORBA ULong len personnes length personnes length len Ajoute une personne la fin de l ensemble personnes len personne virtual void retirerPersonne const char nom CORBA Long pos rechercher nom if pos - throw annuaire Repertoire Inconnu nom CORBA ULong len personnes length for CORBA ULong i pos i len- i Retire la personne de l ensemble personnes i personnes i personnes length len- virtual void modifierPersonne const char nom const annuaire Personne personne CORBA Long pos rechercher nom if pos - throw annuaire Repertoire Inconnu nom personnes pos personne virtual annuaire Personne obtenirPersonne const char nom CORBA Long pos rechercher nom if pos - throw annuaire Repertoire Inconnu nom En C la valeur retourn e doit tre une copie return new annuaire Personne personnes pos virtual annuaire DesNoms listerNoms CORBA ULong len personnes length annuaire DesNoms resultat new annuaire DesNoms resultat- length len for CORBA ULong i i len i resultat i personnes i nom return resultat Comme on peut le constater l implantation C d un objet CORBA doit suivre quelques r gles impos es la signature de l implantation des op rations doit tre respect e le retour d une op ration attribut doit toujours se faire par copie Le m canisme C standard de d clenchement des exceptions throw permet de provoquer les exceptions IDL Les s quences IDL sont repr sent es par des classes C offrant des op rations pour consulter modifier leur taille length et des op rateurs pour consulter modifier les l ments Toutefois m me si ces r gles sont un peu contraignantes et compliqu es au premier abord elles permettent d crire relativement simplement du code portable pour un ORB C au renommage pr s de l extension skel L implantation en Java Notre r pertoire peut tre aussi simplement implant par la classe Java RepertoireImpl Le pr -compilateur IDL Java g n re le package Java fr lifl annuaire comme projection du contrat IDL La classe RepertoireImplBase fournit alors le squelette ou la base pour implanter le r pertoire Ainsi la classe RepertoireImpl en h rite et fournit une implantation de l attribut et des op rations IDL Ici nous utilisons une table de hachage pour stocker les personnes du r pertoire Une version persistante du r pertoire aurait encapsul l utilisation des biblioth ques Java de s rialisation ou d acc s aux bases de donn es JDBC public class RepertoireImpl extends fr lifl annuaire RepertoireImplBase protected String le libelle protected java util Hashtable personnes public RepertoireImpl String le libelle this le libelle le libelle this personnes new java util Hashtable public String libelle return this le libelle public void ajouterPersonne fr lifl annuaire Personne personne throws fr lifl annuaire RepertoirePackage ExisteDeja if this personnes containsKey personne nom throw new fr lifl annuaire RepertoirePackage ExisteDeja personne nom this personnes put personne nom personne public void retirerPersonne String nom throws fr lifl annuaire RepertoirePackage Inconnu if this personnes remove nom null throw new fr lifl annuaire RepertoirePackage Inconnu nom public void modifierPersonne String nom fr lifl annuaire Personne personne throws fr lifl annuaire RepertoirePackage Inconnu if this personnes remove nom null throw new fr lifl annuaire RepertoirePackage Inconnu nom this personnes put personne nom personne public fr lifl annuaire Personne obtenirPersonne String nom throws fr lifl annuaire RepertoirePackage Inconnu fr lifl annuaire Personne resultat fr lifl annuaire Personne this personnes get nom if resultat null throw new fr lifl annuaire RepertoirePackage Inconnu nom return resultat public String listerNoms String resultat new String this personnes size int i for java util Enumeration e this personnes keys e hasMoreElements i resultat i String e nextElement return resultat Comme on peut le constater la structure de l implantation Java est totalement similaire celle en C Toutefois la liaison IDL Java est nettement plus simple utiliser principalement parce que le langage Java est moins complexe que le langage C Notez que ce code aurait pu tre plus concis en utilisant les clauses d importation du langage Java e g import fr lifl annuaire et fr lifl annuaire RepertoirePackage De plus ce code est totalement portable sur d autres implantations CORBA Java aussi bien les sources que les binaires L implantation en CorbaScript CorbaScript est un langage de scripts d di au bus CORBA Ce langage est d velopp par notre quipe de recherche au LIFL CS et il est en cours de standardisation aupr s de l OMG OMG-CSL L id e ma tresse de ce nouveau langage est de pouvoir implanter et utiliser n importe quel objet CORBA en profitant des b n fices et inconv nients d un environnement de scripts interactivit typage dynamique facilit d utilisation et d apprentissage Sa caract ristique majeure r side dans sa liaison transparente avec le syst me de typage du bus CORBA toute d finition OMG-IDL est directement accessible depuis les scripts il n y a pas de g n ration de souches ou de squelettes IDL la projection IDL CorbaScript est donc transparente pour les utilisateurs Nous expliquerons dans la section comment cela est techniquement r alis gr ce aux m canismes dynamiques du bus CORBA Comme le lecteur n est pas encore - un adepte de CorbaScript nous pr sentons plus en d tail les fonctionnalit s de ce nouveau langage CorbaScript offre un typage dynamique le type des variables n est pas explicitement pr cis le contr le du typage est r alis dynamiquement durant l ex cution De plus c est un langage orient objet afin de mieux refl ter les objets du monde CORBA Ainsi l interface annuaire Repertoire est implant e par la classe RepertoireImpl La m thode RepertoireImpl initialise les instances cr es partir de cette classe Toute m thode i e proc doit avoir un premier param tre explicite qui d signe l instance r ceptrice de l invocation e g self Les attributs d une instance sont d clar s leur premi re affectation e g self personnes et self libelle Il est toujours obligatoire de pr fixer l acc s un attribut ou l invocation d une m thode par la r f rence de l instance e g self L implantation des attributs OMG-IDL est r alis e par des m thodes de consultation le pr fixe get suivi du nom de l attribut e g get libelle ou de modification avec le pr fixe set et un param tre de plus pour la nouvelle valeur L implantation des op rations est r alis e par une m thode de m me nom et ayant un param tre r f ren ant l instance et autant de param tres que dans la signature de l op ration OMG-IDL e g ajouterPersonne class RepertoireImpl Une classe CorbaScript proc RepertoireImpl self libelle La m thode d initialisation des instances self r f rence l instance r ceptrice self libelle libelle L affectation d claration d un attribut self personnes Ici l attribut personnes est un tableau vide proc chercherPosition self nom Recherche la position dans le tableau des personnes Equivalent de la fonction C rechercher pr c dente i for p in self personnes It ration sur les l ments du tableau if p nom nom return i i i return - proc get libelle self Implantation de l attribut OMG-IDL libelle return self libelle proc ajouterPersonne self personne Implantation de l op ration OMG-IDL ajouterPersonne p self chercherPosition personne nom if p - Acc s direct aux exceptions CORBA throw annuaire Repertoire ExisteDeja personne nom self personnes append personne Ajouter la fin du tableau proc retirerPersonne self nom Pour l op ration OMG-IDL retirerPersonne p self chercherPosition nom if p - throw annuaire Repertoire Inconnu nom self personnes delete p Retirer l l ment en position p proc modifierPersonne self nom personne Pour l op ration OMG-IDL modifierPersonne p self chercherPosition nom if p - throw annuaire Repertoire Inconnu nom self personnes p personne Modifier l l ment en position p proc obtenirPersonne self nom Pour l op ration OMG-IDL obtenirPersonne p self chercherPosition nom if p - throw annuaire Repertoire Inconnu nom return self personnes p proc listerNoms self Pour l op ration OMG-IDL listerNoms resultat tableau vide for p in self personnes Parcours des personnes pr sentes resultat append p nom Ajouter leur nom au tableau return resultat Conversion automatique et implicite d un tableau en s quence OMG-IDL Comme on peut le constater ci-dessus l implantation en CorbaScript de notre r pertoire n est pas fonci rement diff rente de celles r alis es en C et Java Les diff rences sont cach es aux d veloppeurs La premi re est que l acc s aux d finitions OMG-IDL depuis CorbaScript est directe et ne n cessite aucune g n ration de souches e g annuaire Repertoire annuaire Repertoire ExisteDeja et annuaire Repertoire Incon-nu La seconde est que le script pr c dent peut tre fourni interactivement un interpr teur CorbaScript L utilisation d un r pertoire Maintenant nous allons regarder l utilisation de la souche IDL de l interface Repertoire Pour cela nous pr sentons un fragment de traitement en C en Java et en CorbaScript qui invoque l ensemble des op rations d un objet r pertoire quelconque Ce traitement affiche le libell du r pertoire ajoute une nouvelle personne dans le r pertoire modifie cet enregistrement liste le contenu du r pertoire et finalement d truit la personne enregistr e Comme vous pourrez le constater ce traitement est totalement ind pendant de l implantation et de la localisation du r pertoire on peut utiliser le traitement C sur l implantation Java ou CorbaScript ou r aliser toute autre combinaison L invocation en C En C un objet CORBA est r f renc par un pointeur sur la classe souche repr sentant son interface annuaire Repertoire L invocation d op rations OMG-IDL s exprime alors simplement par l appel de m thodes C notation - Les variables de type var g rent la lib ration automatique de la m moire c f section L initialisation d un champ string doit obligatoirement se faire par copie soit explicite CORBA string dup soit implicite en passant une cha ne constante const char Le passage de param tres en mode in se fait par valeur Le m canisme C standard de traitement des exceptions try catch permet d intercepter les exceptions IDL Importation de la souche annuaire g n r e par le pr -compilateur IDL include annuaire h void traitement annuaire Repertoire repertoire const char MOIS Janvier F vrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre D cembre CORBA String var libelle repertoire- libelle cout Libelle du r pertoire consult libelle endl annuaire Personne personne personne nom CORBA string dup Merle Philippe personne informations const char Enseignant Chercheur personne telephone const char personne email const char merle lifl fr personne url const char http www lifl fr merle personne date naissance le jour personne date naissance le mois date Mars personne date naissance l annee try repertoire- ajouterPersonne personne catch annuaire Repertoire ExisteDeja cout ATTENTION Merle a d j t ajout endl repertoire- modifierPersonne Merle Philippe personne annuaire DesNoms var noms repertoire- listerNoms for CORBA ULong i i noms- length i annuaire Personne var p repertoire- obtenirPersonne noms i cout Nom p- nom endl cout Informations p- informations endl cout T l phone p- telephone endl cout Email p- email endl cout URL p- url endl const date Date d p- date naissance cout Date de naissance d le jour MOIS d le mois d l annee endl Attention ici la gestion des exceptions est omise repertoire- retirerPersonne Merle Philippe L invocation en Java Notre traitement s exprime aussi simplement en Java avec seulement quelques diff rences Les interfaces IDL sont repr sent es par des interfaces Java fr lifl annuaire Repertoire L invocation d op rations IDL utilise la notation point e d appel de m thodes Java Les structures IDL sont repr sent es par des classes Java et doivent donc tre allou es dynamiquement Les num rations IDL sont aussi repr sent es par des classes fournissant des champs statiques pour chaque l ment de l num ration et une op ration de conversion vers un entier value La lib ration de la m moire allou e par CORBA n est pas ici un probl me car le langage Java fournit en standard un ramasse-miettes Les exceptions IDL sont g r es par l interm diaire du m canisme standard de Java try catch finally static void traitement fr lifl annuaire Repertoire repertoire throws Exception String MOIS Janvier F vrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre D cembre String libelle repertoire libelle System out println Libelle du r pertoire consult libelle fr lifl annuaire Personne personne new fr lifl annuaire Personne personne nom Merle Philippe personne informations Enseignant Chercheur personne telephone personne email merle lifl fr personne url http www lifl fr merle personne date naissance new fr lifl date Date short fr lifl date Mois Mars short try repertoire ajouterPersonne personne catch fr lifl annuaire RepertoirePackage ExisteDeja ed System out println ATTENTION Merle a d j t ajout repertoire modifierPersonne Merle Philippe personne String noms repertoire listerNoms for int i i noms length i personne repertoire obtenirPersonne noms i System out println Nom personne nom System out println Informations personne informations System out println T l phone personne telephone System out println Email personne email System out println URL personne url fr lifl date Date d personne date naissance System out println Date de naissance d le jour MOIS d le mois value d l annee repertoire retirerPersonne Merle Philippe L invocation en CorbaScript Le traitement sur le r pertoire s exprime tr s simplement en CorbaScript en invoquant les attributs et op rations de l interface annuaire Repertoire Tous les types OMG-IDL sont directement et naturellement accessibles e g annuaire Personne date Date date Mois et annuaire Repertoire ExisteDeja proc traitement repertoire Une proc dure CorbaScript Consultation de l attribut OMG-IDL libelle println Libell du r pertoire consult repertoire libelle Cr ation d une structure Personne personne annuaire Personne Merle Philippe Enseignant Chercheur merle lifl fr http www lifl fr merle date Date date Mois Mars try G rant d exceptions repertoire ajouterPersonne personne Invocation d une op ration OMG-IDL catch annuaire Repertoire ExisteDeja ed println ATTENTION Merle a d j t ajout repertoire modifierPersonne Merle Philippe personne noms repertoire listerNoms for i in range noms length- Parcourir les l ments de la s quence DesNoms personne repertoire obtenirPersonne noms i println Nom personne nom println Informations personne informations println T l phone personne telephone println Email personne email println URL personne url d personne date naissance println Date de naissance d le jour d le mois d l annee repertoire retirerPersonne Merle Philippe Une premi re conclusion Comme on vient de le voir implanter et utiliser un objet CORBA depuis un langage de programmation comme le C et Java n a rien d extraordinaire cela para t assez naturel Cette simplicit est li e au fait que les r gles de projection d IDL tentent de perturber au minimum les habitudes de programmation du langage cible en utilisant au mieux les m canismes constructions qu il offre Cela est l g rement diff rent avec CorbaScript ce langage de scripts a t sp cialement con u pour simplifier l utilisation et l implantation d objets CORBA la projection IDL CorbaScript est totalement implicite et prise en charge par l interpr teur de ce langage Retour sur le bus CORBA Avant de passer la construction des applications serveurs et clientes nous allons revenir sur le bus CORBA pour pr senter quelques unes de ces composantes savoir le module CORBA l interface Object l interface ORB et l adaptateur d objets Le module CORBA Les composantes du bus CORBA sont d crites elles aussi par l interm diaire du langage OMG-IDL Celles-ci sont regroup es dans le module IDL CORBA d fini par l OMG i e le pragma prefix omg org La projection de ce module constitue alors la biblioth que de programmation du bus CORBA depuis un langage cible Il contient en autres l ensemble des exceptions syst mes que peut lever le bus comme par exemple un probl me de communication COMM FAILURE pragma prefix omg org module CORBA L ensemble des composantes du bus CORBA exception COMM FAILURE Autres exceptions syst mes En C le contenu de ce module est accessible par le pr fixe CORBA ou CORBA selon le choix de projection fait par le produit CORBA utilis En Java ce module est repr sent par le package org omg CORBA En CorbaScript ce module est refl t par l objet CORBA Ainsi l exception syst me COMM FAILURE est accessible par CORBA COMM FAILURE ou CORBA COMM FAILURE en C org omg CORBA COM M FAILURE en Java et CORBA COMM FAILURE en CorbaScript L interface Object L interface Object contenue dans le module CORBA est implicitement h rit e par toute interface IDL les souches IDL en h ritent Cette interface d finit le concept de r f rence d objet CORBA et son implantation encapsule l adresse de l objet CORBA r f renc ou IOR Elle fournit un ensemble d op rations de manipulation de base applicables sur n importe quelle r f rence d objet CORBA Voici un fragment de sa sp cification IDL module CORBA interface Object Object duplicate Duplique une r f rence d objet CORBA void release Lib re une r f rence d objet boolean is nil Teste si une r f rence ne d note aucun objet boolean non existent Teste si un objet r f renc n existe plus boolean is equivalent in Object that Teste si r f rences d signent la m me IOR long hash in long maximum Calcule une cl de hachage boolean is a in string type identifier Teste si un objet est d un type donn D autres op rations voir la section sur les m canismes dynamiques InterfaceDef get interface Request request in string s Request create request in Context ctx in string operation in NVList arg list in NamedValue result Request create request in Context ctx in string operation in NVList arg list in NamedValue result in ExceptionList excepts in ContextList contexts L interface ORB L interface ORB mod lise le bus CORBA Elle permet de contr ler le comportement du bus de cr er les autres objets repr sentant les composantes du bus de convertir l IOR d une r f rence d objet en cha ne de caract res et vice-versa i e object to string et string to object et d obtenir les r f rences des objets notoires i e list initial services et resolve initial references De plus une op ration contenue dans le module CORBA permet d initialiser l objet ORB i e ORB init Voici une partie de sa sp cification IDL module CORBA typedef string ORBid typedef sequence string arg list ORB ORB init inout arg list argv in ORBid orb identifier Obtenir l ORB ATTENTION normalement une op ration doit tre dans une interface ici pseudo IDL interface ORB string object to string in Object obj Une r f rence d objet vers une cha ne IOR Object string to object in string str Une cha ne IOR vers une r f rence d objet typedef string ObjectId typedef sequence ObjectId ObjectIdList ObjectIdList list initial services La liste des objets notoires Exception InvalidName Obtenir un objet notoire Object resolve initial references in ObjectId identifier raises InvalidName Autres op rations Les objets notoires sont les premiers objets utiles l exploiration du bus CORBA e g le r f rentiel des interfaces InterfaceRepository et le service Nommage NameService Les r f rences de ces objets sont maintenues en interne par le bus CORBA Notez que la configuration de ce m canisme est d pendante de chaque produit CORBA cela peut tre un fichier de configuration ORBacus ou un d mon Visibroker Orbix ou bien tout autre moyen L adaptateur d objets La structure d accueil c est- -dire le serveur de l implantation d un objet CORBA fournit un espace m moire pour l tat des objets et un contexte d ex cution des op rations L adaptateur d objets est l abstraction CORBA permettant une structure d accueil de savoir g n rer et interpr ter des r f rences d objets conna tre l implantation courante associ e un objet savoir d l guer les requ tes aux objets leur implantation savoir activer une implantation pour un objet s il n en existe pas encore De plus l adaptateur d objets isole le bus des diff rentes technologies pouvant tre employ es pour l implantation de la structure d accueil Pour cela diff rents types d adaptateurs sont envisageables BOA ou Basic Object Adapter les structures d accueil sont mat rialis es par des processus syst mes OODA ou Object-Oriented Database Adapter la structure d accueil est une base de donn es orient e objet LOA ou Library Object Adapter le code d implantation des objets est stock dans des biblioth ques charg es dans l espace des applications clientes COA ou Card Object Adapter l implantation des objets est stock e dans une carte microprocesseur Cet adaptateur a t exp riment conjointement par le LIFL et la soci t Gemplus POA ou Portable Object Adapter l implantation des objets est r alis e par des objets fournis par un langage de programmation Les premi res versions de CORBA sp cifiaient uniquement le BOA Malheureusement le BOA fut sous-sp cifi entra nant ainsi des incompatibilit s entre diff rents produits CORBA L OMG a depuis d fini le nouvel adaptateur d objets POA dans la norme CORBA Pour plus d informations reportez-vous la norme CORBA et aussi la s rie d articles de Schmidt Malheureusement l heure o nous r digeons ce document un seul produit CORBA fournit le POA c est l ORB ACE TAO TAO Ainsi nous utiliserons dans ce document une partie de la sp cification du BOA fourni par ORBacus Celle-ci fournit l interface BOA offrant une op ration pour se mettre en attente des requ tes aux objets impl is ready et une op ration dans l ORB pour initialiser l adaptateur d objets BOA init Le BOA est devenu obsol te depuis CORBA remplac par le POA module CORBA interface ImplementationDef non standardis par l OMG interface BOA Se mettre en attente des requ tes aux objets void impl is ready in ImplementationDef impl interface ORB typedef sequence string arg list typedef string OAid Obtenir l adaptateur d objets BOA BOA init inout arg list argv in OAid oa identifier Un serveur CORBA peut accueillir simultan ment plusieurs implantations d objets En fait la biblioth que CORBA implantant l adaptateur d objets et li e au serveur g re un dictionnaire associant aux r f rences d objet des objets d implantation pour plus d informations sur cette structure nous vous conseillons de plonger dans les sources d un ORB - Lorsqu une requ te IIOP arrive sur le serveur celle-ci est prise en charge par la biblioth que Celle-ci recherche alors l implantation associ e la r f rence d objet contenue dans la requ te et d l gue la requ te au squelette dont h rite cette implantation Le squelette automatiquement g n r et d pendant de ce bus voir section d balle les param tres de la requ te et invoque alors l implantation de l op ration IDL Ainsi la coop ration de la biblioth que et des squelettes permet de router automatiquement la requ te IIOP vers la bonne m thode du bon objet d implantation sans aucune intervention de la part des d veloppeurs de l application Cependant l ex cution des m thodes peut tre probl matique utilisation de code non r entrant et non protection de variables globales Ces probl mes sont la charge des d veloppeurs Apr s ce retour sur quelques concepts du bus CORBA nous allons poursuivre la construction de notre application d annuaires en tudiant la construction des applications serveurs et clientes Un simple serveur de r pertoire Le sc nario g n ral d un serveur Maintenant que notre objet r pertoire est implant il est n cessaire de concevoir l application serveur offrant la structure d accueil notre objet et l environnement d ex cution des requ tes l objet Un serveur CORBA suit toujours le m me sc nario quel que soit le langage de programmation utilis il doit initialiser le bus CORBA c est- -dire cr er l objet ORB initialiser l adaptateur d objets cr er une implantation de l objet ou des implantations enregistrer ces implantations aupr s de l adaptateur d objets diffuser la r f rence de ces objets aux applications clientes se mettre en attente des requ tes aux objets Les trois exemples suivants illustrent cette sc nario en C en Java et en CorbaScript Comme nous utilisons ORBacus l adaptateur d objets est alors le BOA et l enregistrement des implantations est implicite i e il suffit de cr er les implantations La diffusion aux applications clientes de la r f rence d objet se fait simplement par affichage de l IOR de l objet sur l cran du serveur Une autre solution aurait pu tre de stocker cette IOR dans un fichier Nous verrons dans la section une approche plus g n raliste et orient e objet par l utilisation du service standard de d signation des objets CORBA Naming Service Le serveur en C Le source suivant illustre le sc nario pr c dent en C les num ros en commentaire d signent les tapes du sc nario pr c dent Importation de l'implantation C de l'interface IDL annuaire Repertoire include RepertoireImpl h int main int argc char argv char env try Initialisation du bus CORBA pour un processus serveur Cr ation des objets ORB et BOA CORBA ORB var orb CORBA ORB init argc argv CORBA BOA var boa orb - BOA init argc argv Cr ation de l'objet Repertoire annuaire Repertoire var repertoire new RepertoireImpl LIFL implicite Obtenir sous forme textuelle l'IOR de l'objet CORBA String var chaineIOR orb- object to string repertoire cout L'adresse du r pertoire est chaineIOR endl Mettre le serveur en attente des requ tes venant du bus CORBA boa - impl is ready CORBA ImplementationDef nil en cas de probl me li l'utilisation de CORBA catch CORBA SystemException cerr ERREUR CORBA SystemException provoqu e endl return Remarquez que pour l appel de l op ration CORBA ORB init et CORBA ORB BOA init les arguments sont pass s dans le format utilis couramment en C savoir argc et argv la place d une s quence de string comme cela est d finie dans la sp cification IDL du module CORBA Cette entorse est due au fait qu une projection IDL tente d tre au plus proche de l utilisation courante du langage de programmation Le serveur en Java Le code Java suivant illustre de la m me mani re le sc nario de mise en uvre d un serveur CORBA public class Serveur public static void main String args try Initialisation du bus CORBA pour un processus serveur Cr ation des objets ORB et BOA org omg CORBA ORB orb org omg CORBA ORB init args null org omg CORBA BOA boa orb BOA init args null Cr ation de l'objet Repertoire RepertoireImpl repertoire new RepertoireImpl LIFL est encore implicite Obtenir sous forme textuelle l'IOR de l'objet String chaineIOR orb object to string repertoire System out println L'adresse du r pertoire est chaineIOR Mettre le serveur en attente des requ tes venant du bus CORBA boa impl is ready null en cas de probl me li l'utilisation de CORBA catch org omg CORBA SystemException ex System err println Exception ex Notez que la remarque pr c dente sur le passage des param tres d initialisation s applique encore ici De plus l op ration d initialisation de l ORB est contenue dans la classe org omg CORBA ORB et non dans le package org omg CORBA tout simplement car un package Java ne peut pas contenir directement une m thode Java Le serveur en CorbaScript Le script suivant illustre l implantation du serveur avec CorbaScript Les tapes du sc nario pr sent en doivent tre respect es L initialisation du bus CORBA et de l adaptateur d objets et est implicitement r alis e par l interpr teur CorbaScript Comme il n y a pas de g n ration de squelette CorbaScript il est n cessaire d enregistrer explicitement une instance CorbaScript aupr s de l adaptateur d objets en indiquant quelle est son interface OMG-IDL e g CORBA ORB connect Cette op ration ajoute dynamiquement l attribut this l instance CorbaScript Cet attribut d signe la r f rence d objet CORBA associ e l implantation CorbaScript L expression this ior est une forme simplifi e pour obtenir la cha ne IOR associ e la r f rence d objet CORBA i e CORBA ORB object to string Initialisation implicite du bus CORBA de l ORB et de l adaptateur d objets et Importation de l'implantation de l'annuaire dont la classe RepertoireImpl import annuaireImpl Cr ation de l'objet Repertoire repertoire annuaireImpl RepertoireImpl LIFL L instance repertoire est l implantation CorbaScript d un objet CORBA d interface OMG-IDL annuaire Repertoire CORBA ORB connect repertoire annuaire Repertoire Obtenir sous forme textuelle l'IOR de l'objet chaine repertoire this ior Forme simplifi e de chaine CORBA ORB object to string repertoire this println L'adresse du r pertoire est chaineIOR Mettre le serveur en attente des requ tes venant du bus CORBA CORBA ORB run Une application cliente du r pertoire Le sc nario g n ral d un client Pour pouvoir utiliser notre exemple en r parti il ne reste plus qu r aliser les applications clientes des serveurs de r pertoire Le sc nario de base d une application cliente est le suivant initialiser le bus CORBA c est- -dire cr er l objet ORB obtenir les r f rences des objets utilis s par l application appliquer des traitements sur les objets obtenus Nous avons d j vu comment initialiser le bus CORBA dans la section et un exemple de traitement dans la section Il ne reste donc plus qu tudier comment obtenir les r f rences d objets La connexion aux objets Le bus CORBA offre un environnement orient objet et client serveur des applications clientes peuvent invoquer des objets g r s par des applications serveurs Pour cela l application cliente doit poss der une r f rence sur l objet serveur afin de lui appliquer des traitements Dans le monde CORBA une r f rence est une instance d une souche IDL Il faut donc que l application cliente cr e cette instance Cette op ration revient connecter l application cliente l objet serveur Cette op ration de connexion est implant e dans la plupart des produits CORBA Orbix Visibroker MICO par la m thode bind fournie par les souches IDL Cependant la m thode bind n est pas du tout d finie par la norme CORBA c est donc un ajout propri taire chaque ORB Les param tres de cette op ration sont de nature diff rente sur chaque produit impliquant la d pendance des applications vis- -vis du produit utilis Exemple C d utilisation de l op ration bind annuaire Repertoire var un repertoire annuaire Repertoire bind d pendant de l ORB Pour cette raison nous n utilisons pas cette fonctionnalit de connexion qui a l avantage d tre simple Nous allons plut t montrer le m canisme standard offert par la norme CORBA Ce m canisme repose sur le fait qu il est possible de convertir une r f rence d objet en une cha ne de caract res repr sentant l IOR de l objet et vice-versa i e les op rations object to string et string to object de l interface ORB Dans la section les serveurs affichent l IOR de leur objet l cran il suffit donc qu une application cliente r cup re cette cha ne et la convertisse localement en une r f rence d objet Exemple C de conversion d une cha ne IOR en une r f rence d objet const char une chaine contenant une IOR CORBA Object var la reference d objet orb- string to object une chaine contenant une IOR Ainsi l exemple pr c dent montre comment une application cliente peut obtenir une r f rence d objet de mani re standard gr ce une cha ne IOR Cependant l application cliente a besoin d une r f rence d objet du type IDL annuaire Repertoire et non du type CORBA Object Pour cela la norme CORBA fournit un op rateur de conversion de type d objet l op ration narrow contenue dans les souches IDL Exemple C d utilisation de l op rateur de conversion narrow Annuaire Repertoire var un repertoire annuaire Repertoire narrow la reference d objet Dans le monde CORBA l op rateur narrow doit tre utilis chaque fois que l on veut convertir une r f rence d objet O vers une r f rence d objet d un type T Cette op rateur v rifie alors que le type r el de l objet O est bien le type T ou un type h ritant de T Si le type r el de O est conforme T alors l op rateur narrow cr e localement l appelant une r f rence d objet de type T sinon elle retourne une r f rence nil L implantation de cet op rateur peut utiliser le r f rentiel des interfaces pour v rifier cette conformit ou demander l objet O s il est d un type conforme T i e invocation de l op ration is a d finie dans l interface Object et h rit e implicitement pour toute souche IDL La plupart des bus CORBA mettent aussi en place un cache local de conformit des types afin d viter d envoyer une requ te IIOP pour chaque op ration narrow effectu par les applications Dans les deux exemples suivants cette tape de connexion aux objets est num rot e a et b respectivement lors de la conversion d une cha ne IOR en r f rence d objet et lors de la conversion vers un type sp cifique de r f rence Un client en C Ici l IOR de l objet serveur est pass sur la ligne de commandes au lancement de l application cliente Ainsi celle-ci peut se connecter n importe quel objet CORBA implantant l interface annuaire Repertoire et invoquer les op rations sur le r pertoire int main int argc char argv char env try Initialisation du bus CORBA pour un processus client Cr ation de l'objet ORB CORBA ORB var orb CORBA ORB init argc argv Instanciation d'une souche C r f ren ant l'objet R pertoire CORBA Object var obj orb - string to object argv a annuaire Repertoire var repertoire annuaire Repertoire narrow obj b traitement repertoire en cas de probl me li l'utilisation de CORBA catch CORBA SystemException cerr ERREUR CORBA SystemException provoqu e endl return Un client en Java Le code suivant illustre la r alisation de l application cliente avec Java import fr lifl annuaire Simplification de la d signation des types IDL public class Client public static void main String args try Initialisation du bus CORBA pour un processus client Cr ation de l'objet ORB org omg CORBA ORB orb org omg CORBA ORB init args null Instanciation d'une souche Java r f ren ant l'objet Repertoire org omg CORBA Object objet orb string to object args a Repertoire repertoire RepertoireHelper narrow objet b traitement repertoire en cas de probl me li l'utilisation de CORBA catch Exception ex System err println Exception ex Dans la projection IDL Java l op rateur narrow de l interface Repertoire est stock dans la classe Java RepertoireHelper et non dans l interface Java Repertoire parce que tout simplement une interface Java ne peut pas contenir de code Un client en CorbaScript CorbaScript a t con u pour simplifier l utilisation interactive des objets CORBA Ainsi un script n a pas besoin d initialiser le bus CORBA i e l interpr teur le fait implicitement De plus la connexion un objet CORBA est r alis e simplement en fournissant le nom de l interface OMG-IDL et l adresse IOR de l objet Notez que comme CorbaScript est un langage typage dynamique l op ration de conversion narrow est implicitement r alis e Initialisation implicite du bus CORBA et de l ORB Instanciation d'une souche CorbaScript r f ren ant l'objet Repertoire repertoire annuaire Repertoire sys arg import Traitement Traitement traitement repertoire Quelques remarques au sujet de CorbaScript sys arg est un tableau contenant les arguments de la ligne de commande et l instruction import permet de charger un module de code contenu dans un fichier script Le module charg est alors vu comme un objet e g Traitement traitement Les services de recherche d objets Leur r le L inconv nient de l application r partie que nous venons de r aliser est que les utilisateurs sont oblig s de manipuler manuellement les IOR des r pertoires Pour masquer cette manipulation directe le bus CORBA fournit des services standards de recherche d objets offrant des fonctionnalit s similaires l annuaire t l phonique Le service Nommage Naming Service permet la recherche des objets en fonction de noms symboliques leur ayant t associ s Par exemple on recherchera l objet de nom r pertoire C est donc l quivalent des pages blanches de l annuaire t l phonique Le service Vendeur Trader Service permet la recherche des objets en fonction de leurs caract ristiques Par exemple on recherchera l objet d interface annuaire Repertoire situ sur une des machines du troisi me tage du b timent M de l universit de Lille I bref le b timent du LIFL et qui contient la liste des chercheurs C est donc l quivalent des pages jaunes Le principe de mise en uvre de ces services est le suivant L enregistrement les applications fournissant des objets enregistrent les r f rences de ceux-ci aupr s du service de recherche en leur associant soit un nom symbolique soit des caract ristiques L interrogation les applications clientes interrogent le service pour obtenir les r f rences des objets qu elles veulent invoquer Le crit re d interrogation est soit un nom symbolique soit des caract ristiques La recherche le service recherche dans l ensemble des r f rences d objet enregistr es celles qui correspondent le mieux aux crit res demand s par les applications clientes Ce document aborde seulement l utilisation du service Nommage parce qu il est tr s couramment utilis dans des applications CORBA et qu il est beaucoup plus simple d emploi que le service Vendeur Cependant ce dernier doit tre imp rativement mis en uvre lorsque les applications CORBA manipulent des crit res de recherche complexes - Le service Nommage Le service Nommage Un serveur Un serveur Un client Un client R pertoire R pertoire Contexte Contexte Bus d objets r partis CORBA sur Internet IIOP Bus d objets r partis CORBA sur Internet IIOP Le contrat IDL du service Nommage Le service Nommage module CosNaming d finit un espace de d signation symbolique des objets Cet espace est structur par un graphe de contextes de nommage interface NamingContext Chaque contexte maintient une liste d associations entre des noms symboliques et des r f rences d objet l int rieur d un contexte un nom struct NameComponent doit tre unique et d signe soit une r f rence d objet soit un autre contexte La concat nation de plusieurs noms forme alors un chemin d acc s typedef Name travers l espace de d signation symbolique Un contexte fournit des op rations pour ajouter une association entre un nom et une r f rence bind mettre jour une telle association rebind le connecter ou reconnecter un contexte bind context et rebind context rechercher la r f rence d sign e par un chemin resolve d truire une association unbind cr er un nouveau contexte ind pendant new context cr er un contexte et le connecter bind new context d truire d finitivement le contexte destroy et finalement lister son contenu list Ces op rations d clenchent selon les diff rents cas de mauvaises utilisations les exceptions NotFound CannotProceed InvalidName AlreadyBound et NotEmpty pragma prefix omg org Standardis par l OMGmodule CosNaming Le service Nommage typedef string Istring struct NameComponent Un nom d association dans un contexte Istring id Istring kind typedef sequence NameComponent Name Un chemin d acc s une suite de noms La nature d une liaison une r f rence ou un contexte enum BindingType nobject ncontext struct Binding Une liaison Name binding name Un chemin BindingType binding type Le type de la liaison typedef sequence Binding BindingList D claration avanc e pour utiliser ce type avant de le d finir compl tement interface BindingIterator interface NamingContext Un contexte de nommage enum NotFoundReason La liste des raisons d une exception NotFound missing node Un nom n existe pas not context Un nom ne d signe pas un contexte not object Un nom ne d signe pas un objet exception NotFound Signaler qu un chemin n a pas t trouv NotFoundReason why La raison Name rest of name La partie du chemin fautif exception CannotProceed Signaler une incapacit de traitement NamingContext cxt Le contexte fautif Name rest of name La partie du chemin fautif exception InvalidName Signaler qu un chemin est invalide exception AlreadyBound Signaler qu une association est d j utilis e exception NotEmpty Signaler qu un contexte n est pas vide void bind in Name n in Object obj Associer un nom une r f rence raises NotFound CannotProceed InvalidName AlreadyBound void rebind in Name n in Object obj Mettre jour une association raises NotFound CannotProceed InvalidName void bind context in Name n in NamingContext nc Connecter un autre contexte raises NotFound CannotProceed InvalidName AlreadyBound void rebind context in Name n in NamingContext nc Reconnecter un autre contexte raises NotFound CannotProceed InvalidName Object resolve in Name n Rechercher une association raises NotFound CannotProceed InvalidName void unbind in Name n D truire une association raises NotFound CannotProceed InvalidName NamingContext new context Cr er un contexte ind pendant NamingContext bind new context in Name n Cr er et lier un contexte raises NotFound AlreadyBound CannotProceed InvalidName void destroy D truire le contexte raises NotEmpty void list in unsigned long how many Lister le contenu du contexte out BindingList bl out BindingIterator bi interface BindingIterator It rateur des l ments d une consultation boolean next one out Binding b Obtenir la liaison suivante boolean next n in unsigned long how many Obtenir les n liaisons suivantes out BindingList bl void destroy D truire l it rateur L op ration list n cessite un peu d explications Elle permet d inspecter le contenu d un contexte c est- -dire ses associations Cette consultation retourne seulement les noms et la nature BindingType des r f rences d objet contenues via une liste BindingList de liaisons Binding nom nature Pour obtenir les r f rences d objet il faut invoquer l op ration resolve La consultation peut se faire par tranches successives en utilisant l it rateur bi BindingIterator retourn en mode out Cet it rateur permet d obtenir s quentiellement les liaisons suivantes soit une par une next one soit par tranche next n la fin de la consultation l it rateur doit tre d truit explicitement par l op ration destroy Exemple C de consultation d un contexte void consultation d un contexte CosNaming NamingContext nc CosNaming BindingList var bl CosNaming BindingIterator var bi nc- list bl bi Consultation des premi res liaisons afficher bl Afficher n est pas d taill e ici if CORBA is nil bi Faut-il it rer CORBA Boolean continuer CORBA TRUE while continuer continuer bi- next n bl Consultation des liaisons suivantes afficher bl bi- destroy D truire explicitement l it rateur Obtenir le service Nommage Le service Nommage permet d obtenir les r f rences d objet Mais cela ne fait que reporter le probl me d un cran car comment obtenir la r f rence du service Nommage Pour cela le bus CORBA fournit la notion d objets notoires accessibles par le biais de l op ration resolve initial references de l interface ORB Le contexte racine de l espace de d signation a pour nom NameService quel que soit le bus CORBA En C obtenir la r f rence du service Nommage CORBA Object var objRef orb- resolve initial references NameService a CosNaming NamingContext var nsRef CosNaming NamingContext narrow objRef b Ici l op rateur narrow permet de convertir la r f rence de l objet notoire NameService en une r f rence du type IDL CosNaming NamingContext En Java obtenir la r f rence du service Nommage org omg CORBA Object objRef orb resolve initial references NameService a org omg CosNaming NamingContext nsRef org omg CosNaming NamingContextHelper narrow objRef b En CorbaScript la conversion automatique des r f rences d objet simplifie le code n cessaire pour obtenir la r f rence sur le service Nommage En CorbaScript obtenir la r f rence du service Nommage nsRef CORBA ORB resolve initial references NameService partir de ce moment il est possible d invoquer les op rations du service Nommage afin de g rer l espace de d signation symbolique des objets Les deux sections suivantes illustrent comment enregistrer une r f rence d objet dans le service Nommage et comment retrouver une r f rence depuis ce service respectivement pour une application serveur et une cliente Enregistrer une r f rence d objet Une application serveur doit diffuser aux applications clientes les r f rences de ses objets comme nous l avons vu dans la section Ici l utilisation du service Nommage remplace l gamment l affichage l cran des r f rences d objet remplace la primitive object to string Pour cela il suffit d obtenir la r f rence du service Nommage de cr er un chemin valide CosNaming Name et d associer ce chemin la r f rence d objet via l op ration bind ou rebind du service Nommage La diff rence entre ces op rations vient du fait que rebind cr e ou remplace l association si celle-ci existait d j En C enregistrer l'objet dans le service Nommage CosNaming Name var nsNom new CosNaming Name nsNom- length nsNom id const char REPERTOIRE nsNom kind const char nsRef- rebind nsNom repertoire L enregistrement d une r f rence dans le service Nommage s exprime aussi simplement en C et en Java La seule diff rence notable est que la projection C d une s quence IDL est un type voir ci-dessus CosNaming Name tandis qu en Java il faut utiliser les tableaux standards voir ci-dessous NameComponent En Java enregistrer l'objet dans le service Nommage org omg CosNaming NameComponent nsNom new org omg CosNaming NameComponent nsNom new org omg CosNaming NameComponent REPERTOIRE nsRef rebind nsNom repertoire Ici CorbaScript montre encore sa simplicit car il permet de manipuler directement les types OMG-IDL En CorbaScript enregistrer l'objet dans le service Nommage nsNom CosNaming Name CosNaming NameComponent REPERTOIRE nsRef rebind nsNom repertoire this De plus CorbaScript permet simplement la cr ation conversion de valeurs OMG-IDL nsRef rebind REPERTOIRE repertoire this et Le premier tableau est converti automatiquement en une s quence CosNaming Name Le second tableau est converti automatiquement en une structure CosNaming NameComponent Rechercher une r f rence d objet Une application cliente doit obtenir les r f rences des objets qu elle d sire invoquer Soit elle utilise la primitive string to object sur une cha ne codifiant une IOR soit elle peut l gamment utiliser le service Nommage Pour cela il suffit d obtenir la r f rence de ce service cr er un chemin valide et rechercher la r f rence associ e ce chemin via l op ration resolve En C obtenir l'objet depuis le service Nommage CosNaming Name var nsNom new CosNaming Name nsNom- length nsNom id const char REPERTOIRE nsNom kind const char CORBA Object var objRef nsRef- resolve nsNom annuaire Repertoire var repertoire annuaire Repertoire narrow objRef La d finition OMG-IDL de l op ration resolve retourne un Object Aussi il est toujours n cessaire de convertir la r f rence retourn e vers le type n cessaire l application en utilisant l op ration de narrow En Java obtenir l'objet depuis le service Nommage org omg CosNaming NameComponent nsNom new org omg CosNaming NameComponent nsNom new org omg CosNaming NameComponent REPERTOIRE org omg CORBA Object objRef nsRef resolve nsNom annuaire Repertoire repertoire annuaire RepertoireHelper narrow objRef En CorbaScript cela devient trivial En CorbaScript obtenir l'objet depuis le service Nommage repertoire nsRef resolve REPERTOIRE et et En r utilisant les quelques fragments de code pr c dents nous pouvons ainsi modifier notre premi re version de l application r partie annuaire afin d viter que les utilisateurs aient manipuler directement les r f rences d objet IOR De plus notez alors que l application serveur est toujours la structure d accueil de l objet Repertoire mais elle devient aussi une application cliente du service Nommage Ainsi dans le monde CORBA un processus peut tre la fois une application cliente et serveur la notion de client et de serveur se d finit uniquement et relativement un objet CORBA Cet aspect sera encore illustr dans la section o l application cliente implante aussi un objet Une fabrique de r pertoires Dans l tat actuel l application d velopp e n est pas satisfaisante - Premi rement chaque objet Repertoire est accueilli par un serveur cela veut dire qu un seul simple objet occupe compl tement les ressources d un processus Il pourrait donc tre int ressant par conomie m moire de regrouper plusieurs r pertoires dans une m me structure d accueil Deuxi mement chaque fois que l on d sire avoir un nouveau r pertoire il est n cessaire de lancer un processus pour l accueillir Nous allons voir dans cette section comment traiter ces deux probl mes en mettant en place une fabrique de r pertoires Ce nouveau serveur accueille l ex cution plusieurs instances de r pertoires et fournit une nouvelle interface OMG-IDL permettant de cr er et de d truire les r pertoires accueillis Le nouveau contrat IDL Comme CORBA est un mod le client serveur ne fournissant pas directement la cr ation d objets distance nous allons construire notre serveur Fabrique de r pertoires Ce serveur contient simultan ment un objet Fabrique et des objets Repertoire Le contrat IDL suivant est une extension du contrat pr sent en section un module OMG-IDL peut tre tendu simplement en r ouvrant celui-ci Nous y ajoutons la nouvelle interface Fabrique permettant de cr er un nouvel objet r pertoire i e creerRepertoire ou de d truire un r pertoire pr c demment cr via cette fabrique i e detruireRepertoire Remarquez la mani re simple d exprimer en OMG-IDL le passage et le retour de r f rences d objet typ es Repertoire module annuaire interface Fabrique Repertoire creerRepertoire in string libelle void detruireRepertoire in Repertoire repertoire De mani re plus g n rale cette sp cification IDL illustre le canevas de conception ou design pattern de gestion du cycle de vie des objets CORBA La cr ation d un objet est r alis e par l invocation d une op ration d une fabrique d objets ou usine Notez que cette op ration de cr ation doit pr voir assez de param tres afin d initialiser l tat du nouvel objet La destruction d un objet est sp cifi e soit par une op ration de sa fabrique soit directement par une op ration de son interface comme par exemple l op ration destroy des interfaces CosNaming NamingContext et CosNaming BindingIterator section De plus l OMG a d j sp cifi un service g n rique de gestion du cycle de vie des objets le service Cycle de Vie module CosLifeCycle d finit l interface FactoryFinder de recherche de fabriques l interface d une fabrique g n rique GenericFactory et l interface de cycle de vie d un objet LifeCycleObject Ce service sp cifie ainsi le sc nario de gestion de la vie des objets Malheureusement l implantation de ce service n est pas encore disponible sur tous les bus CORBA L implantation de la fabrique L implantation de la fabrique de r pertoires classe FabriqueImpl est vraiment tr s simple comme nous le voyons ci-apr s en C en Java et en CorbaScript La m thode creerRepertoire cr e une instance de la classe RepertoireImpl et retourne la r f rence de cet objet CORBA La m thode detruireRepertoire d connecte la r f rence de l objet r pertoire de son objet d implantation en fait disconnect met jour le dictionnaire g r par la biblioth que CORBA L implantation C de l'interface annuaire Fabrique est la suivante Importation de l'implantation de annuaire Repertoire include RepertoireImpl h class FabriqueImpl public virtual annuaire Fabrique skel public FabriqueImpl annuaire Fabrique skel FabriqueImpl virtual annuaire Repertoire ptr creerRepertoire const char libelle RepertoireImpl repertoire new RepertoireImpl libelle En C la valeur retourn e doit tre une copie return annuaire Repertoire duplicate repertoire void detruireRepertoire annuaire Repertoire ptr repertoire une reference sur l objet orb- disconnect repertoire L implantation Java de l'interface annuaire Fabrique est la suivante public class FabriqueImpl extends fr lifl annuaire FabriqueImplBase public FabriqueImpl public fr lifl annuaire Repertoire creerRepertoire String libelle return new RepertoireImpl libelle public void detruireRepertoire fr lifl annuaire Repertoire repertoire org omg CORBA ORB init disconnect repertoire L implantation CorbaScript de l'interface annuaire Fabrique est la suivante class FabriqueImpl proc FabriqueImpl self CORBA ORB connect self annuaire Fabrique Cette instance est une Fabrique proc creerRepertoire self libelle r RepertoireImpl description Cr ation de l implantation CORBA ORB connect r annuaire Repertoire Enregistrement aupr s du bus return r this Retour de la r f rence d objet proc detruireRepertoire self repertoire CORBA ORB disconnect repertoire D connexion de l implantation Le code du serveur Fabrique de r pertoires n est pas pr sent ici car il n apporte rien par rapport celui de la section Il suffit de cr er un objet FabriqueImpl la place d un objet RepertoireImpl Une application cliente L application cliente illustre l utilisation de la fabrique de r pertoires elle initialise le bus CORBA obtient le service Nommage obtient la fabrique cr e un r pertoire et finalement l enregistre dans le service Nommage En C cela donne le code suivant Importation de la souche du service Nommage g n r e par le compilateur IDL include CosNaming h Importation de la souche annuaire g n r e par le compilateur IDL include annuaire h void main int argc char argv CORBA ORB var orb CORBA ORB init argc argv CORBA Object var objet orb- resolve initial references NameService a CosNaming NamingContext var nc CosNaming NamingContext narrow objet b CosNaming Name var nsNom new CosNaming Name nsNom- length nsNom id const char FABRIQUE nsNom kind const char objet nc- resolve nsNom a annuaire Fabrique var fabrique annuaire Fabrique narrow objet b annuaire Repertoire var repertoire fabrique- creerRepertoire LIFL nsNom id const char REPERTOIRE nc- rebind nsNom repertoire Quelques remarques sur ce code C la r -affectation d une variable de type var lib re automatiquement la ressource g r e pr c demment e g variables objet et nsNom et la cr ation d un r pertoire retourne directement une r f rence de type Repertoire ne n cessitant donc pas de la convertir pas de narrowing En Java cela donne le code suivant import org omg CORBA Importation du package CORBA import org omg CosNaming Importation du package CosNaming import fr lifl annuaire Importation du package annuaire public class Client public static void main String args throws Exception ORB orb ORB init args null Object objet orb resolve initial references NameService a NamingContext nc NamingContextHelper narrow objet b NameComponent nsNom new NameComponent nsNom new NameComponent FABRIQUE objet nc resolve nsNom a Fabrique fabrique FabriqueHelper narrow objet b Repertoire repertoire fabrique creerRepertoire LIFL nsNom new NameComponent REPERTOIRE nc rebind nsNom repertoire En CorbaScript cela donne le script suivant nc CORBA ORB resolve initial references NameService fabrique nc resolve FABRIQUE repertoire fabrique creerRepertoire LIFL nc rebind REPERTOIRE repertoire Ce dernier script illustre parfaitement la simplicit d utilisation des objets CORBA travers CorbaScript Ce langage permet aux utilisateurs d exprimer interactivement l essentiel c est- -dire leurs traitements CORBA sans se soucier des d tails techniques de mise en uvre Ainsi travers cet exemple on peut voir toute la puissance et la facilit offertes par CorbaScript pour administrer dynamiquement des objets CORBA Pour cela il suffit de conna tre les sp cifications OMG-IDL des objets utiliser et la syntaxe de ce nouveau langage La notification d une application cliente Un nouvel objectif Jusqu pr sent les applications clientes doivent aller scruter p riodiquement le serveur de r pertoires pour tre inform des changements ajout retrait ou modification d une personne Cette scrutation est r alis e selon un mode poll le client consulte intervalle r gulier le serveur pour observer ses changements d tat Cependant si la p riode est trop courte et qu il n y a pas de changement alors cela g n re des invocations de m thodes inutiles et donc du trafic r seau Si la p riode est trop longue cela entra ne des incoh rences entre l tat du serveur et la connaissance qu en a le client Ainsi pour liminer ces probl mes on utilise souvent un mode push o le serveur informe en temps r el ses clients de tout changement dit autrement le serveur notifie ses clients de ses changements L OMG a d fini deux services standards pour prendre en charge cette fonction le service Ev nement et le service Notification Cependant nous ne mettons pas en uvre ici ces services mais nous tudions plut t comment d crire ce mode push au sein du contrat IDL d une application CORBA Un nouveau contrat IDL Nous allons une fois de plus compl ter le contrat IDL de notre d application de r pertoires en ajoutant deux nouvelles interfaces OMG-IDL Ces deux interfaces d finissent un contrat de coop ration entre le serveur et ses clients Les clients doivent implanter l interface ObservateurRepertoire d finissant trois op rations afin d tre notifi de l ajout d une personne e g annoncerCreationPersonne du retrait d une personne e g annoncerDestructionPersonne et de la modification d une personne e g annoncerModificationPersonne Notez que ces op rations sont asynchrones oneway c est- -dire que le serveur n attend pas que les clients aient trait les appels d op rations Par un choix d lib r le serveur notifie ses clients uniquement en leur indiquant le type de changement et le nom de la personne sur laquel porte le changement Nous aurions bien pu notifier plus d informations comme la fiche compl te d une personne lors de sa cr ation Ici le client devra invoquer obtenirPersonne pour avoir cette information La nouvelle interface RepertoireObserve est une extension de Repertoire permettant aux clients de s enregistrer aupr s du serveur pour lui indiquer qu ils veulent tre notifi des changements Cet enregistrement se fait par l interm diaire des op rations ajouterObservateur et retirerObservateur Cette interface est implant e par le serveur de r pertoires module annuaire interface ObservateurRepertoire oneway void annoncerCreationPersonne in Nom nom oneway void annoncerDestructionPersonne in Nom nom oneway void annoncerModificationPersonne in Nom nom interface RepertoireObserve Repertoire void ajouterObservateur in ObservateurRepertoire observateur void retirerObservateur in ObservateurRepertoire observateur Types utilitaires pour l'implantation en C typedef sequence ObservateurRepertoire DesObservateursRepertoire On peut constater ici que le langage OMG-IDL permet d exprimer la partie fonctionnelle d un contrat IDL mais ne fournit aucune construction pour d crire l architecture logicielle du contrat c est- -dire quelle application implante quelle interface Cette information est exprim e dans de possibles commentaires - Les paragraphes suivants illustrent seulement quelques fragments de l implantation de ce nouveau contrat en attirant l attention du lecteur sur quels points nouveaux et importants Le code complet est disponible sur notre site WWW L implantation du r pertoire observ Au niveau du contrat IDL l interface RepertoireObserve h rite de Repertoire Par contre cette hi rarchie n est pas forc ment respect e par l implantation Ainsi l implantation RepertoireObserveImpl de l interface RepertoireObserve peut Tout implanter partir de rien la classe RepertoireObserveImpl peut fournir une r alisation pour toutes les op rations de Repertoire et de RepertoireObserve Cette solution n est pas tr s satisfaisante - Implanter par h ritage la classe RepertoireObserveImpl peut h riter de la classe RepertoireImpl Elle fournit une r alisation des op rations ajouterObservateur et retirerObservateur en g rant une structure de donn es stockant la liste des observateurs Elle doit red finir la r alisation des op rations ajouterPersonne modifierPersonne et retirerPersonne Ces red finitions r utilisent le code h rit et notifie tous les observateurs Cette solution est illustr e en C Implanter par d l gation la classe RepertoireObserveImpl peut implanter toutes les op rations L implantation de certaines op rations est d l gu e un objet RepertoireImpl Cette solution doit tre mise en uvre lorsque le langage d implantation ne fournit pas l h ritage multiple comme c est le cas pour Java Le fragment C suivant illustre l implantation RepertoireObserveImpl r alis e par h ritage de la classe RepertoireImpl et du squelette annuaire RepertoireObserve skel Cette classe ajoute une nouvelle structure de donn es pour stocker la liste des observateurs la s quence annuaire DesObservatoiresRepertoire L op ration ajouterObservateur ajoute un nouvel observateur la fin de la liste L op ration retirerObservateur recherche un observateur dans la liste et met jour celle-ci L implantation des op rations libelle obtenirNom et listerNoms est h rit e de la classe RepertoireImpl Les op rations ajouterPersonne retirerPersonne et modifierPersonne sont red finies ici seul le code d ajouterPersonne est pr sent Leur implantation suit le sc nario suivant elle appelle le code h rit puis parcours la liste des observateurs pour les notifier du changement class RepertoireObserveImpl public annuaire RepertoireObserve skel h ritage du squelette public virtual RepertoireImpl h ritage d implantation annuaire DesObservateursRepertoire observateurs La liste des observateurs notifier public RepertoireObserveImpl const char libelle Le constructeur appelle les construc- annuaire RepertoireObserve skel teurs des classes h rit es et annuaire Repertoire skel initialise la liste RepertoireImpl libelle observateurs virtual void ajouterObservateur annuaire ObservateurRepertoire ptr observateur Agrandit la liste et ajoute le nouvel observateur la fin de la liste CORBA ULong len observateurs length observateurs length len observateurs len annuaire ObservateurRepertoire duplicate observateur virtual void retirerObservateur annuaire ObservateurRepertoire ptr observateur Recherche l observateur dans la liste et tasse la liste CORBA ULong len observateurs length for CORBA ULong i i len i Test d quivalence entre r f rences d objet if observateurs i - is equivalent observateur for i len- i observateurs i annuaire ObservateurRepertoire duplicate observateurs i observateurs len- observateurs length len- return virtual void ajouterPersonne const annuaire Personne personne RepertoireImpl ajouterPersonne personne R utilise ancien code puis notifie les observateurs annuaire DesObservateursRepertoire observateursEnPanne observateursEnPanne length for CORBA ULong i i observateurs length i annuaire ObservateurRepertoire ptr o observateurs i try o- annoncerCreationPersonne personne nom Notifie un observateur catch CORBA COMM FAILURE Si n existe plus alors CORBA ULong l observateursEnPanne length le conserver dans une liste observateursEnPanne length l retirer plus tard observateursEnPanne l annuaire ObservateurRepertoire duplicate o for CORBA ULong j j observateursEnPanne length j retirerObservateur observateursEnPanne j virtual void retirerPersonne const char nom virtual void modifierPersonne const char nom const annuaire Personne personne Les implantations de libelle obtenirNom et listerNom sont h rit es Lors du parcours de la liste des observateurs il faut faire attention que les observateurs soient toujours disponibles qu ils n aient pas t arr t s brutalement que le r seau soit toujours disponible etc Pour cela il est n cessaire d intercepter les exceptions syst me lev es par le bus CORBA ici CORBA COMM FAILURE indique un probl me de communication r seau Ainsi m me si CORBA cache beaucoup d aspects de la r partition et de la communication avec les objets cela n emp che pas que programmer en contexte r parti impose de prendre en compte les probl mes de pannes L implantation Java de la classe RepertoireObserveImpl est l g rement diff rente car le langage Java n offre pas l h ritage multiple Ainsi il est impossible d h riter la fois de la classe squelette et de la classe RepertoireImpl La solution est donc d h riter du squelette et de d l guer les op rations vers l objet le repertoire Comme en C il faut g rer la liste des observateurs et assurer la notification de ceux-ci public class RepertoireObserveImpl extends fr lifl annuaire RepertoireObserveImplBase Utilisation de la d l gation car pas d'h ritage multiple protected RepertoireImpl le repertoire protected java util Vector observateurs public RepertoireObserveImpl String libelle this le repertoire new RepertoireImpl libelle Cr ation du r pertoire encapsul this observateurs new java util Vector public void ajouterObservateur fr lifl annuaire ObservateurRepertoire observateur this observateurs addElement observateur public void retirerObservateur fr lifl annuaire ObservateurRepertoire observateur this observateurs removeElement observateur public String libelle return le repertoire libelle Implantation par d l gation Les autres op rations sont implant es par d l gation vers l objet le repertoire Il faut aussi mettre en place la m canique de notification comme en C Nous ne d taillons pas ici le code des applications serveurs Ces applications doivent instancier un objet de la classe Fabrique Impl Cette classe est implant e de la m me mani re que la classe FabriqueImpl sauf qu elle cr e une instance de RepertoireObserveImpl la place d une instance de RepertoireImpl Pour plus de d tails voir le code fourni Une application cliente notifi e Le c t client du contrat de notification est facilement illustr par le script CorbaScript suivant class ObservateurRepertoireImpl L implantation d annuaire ObservateurRepertoire proc ObservateurRepertoireImpl self CORBA ORB connect self annuaire ObservateurRepertoire proc annoncerCreationPersonne self nom D pend de ce que l on veut faire - proc annoncerDestructionPersonne self nom proc annoncerModificationPersonne self nom ns CORBA ORB resolve initial references NameService Obtenir le service de nommage repertoire ns resolve UnRepertoireObservable Obtenir le r pertoire V rifier dynamiquement que c est bien un r pertoire observable if repertoire is a annuaire RepertoireObserve println Ce r pertoire n est pas observable return observateur ObservateurRepertoireImpl Cr er un observateur repertoire ajouterObservateur observateur this L enregistrer aupr s du r pertoire repertoire retirerObservateur observateur this Signaler la fin de la notification Nous ne donnons pas plus d explications sur ce script car le lecteur ne devrait pas avoir de difficult s le comprendre De moins nous l esp rons En C ou Java les traitements sont les m mes sauf qu ils sont pollu s de nombreux d tails li s l utilisation de la projection IDL vers ces langages R sum En guise de r sum cette section liste les diff rents aspects de la construction d une application r partie que nous venons de voir et apporte quelques commentaires sur le choix d un langage Construire une application r partie avec CORBA Au fil de la pr sentation nous avons abord de nombreux aspects de la construction d une application r partie avec CORBA La d finition l extension et la r utilisation par h ritage du contrat IDL L implantation d objets CORBA via les squelettes IDL La r utilisation d implantation par h ritage ou d l gation L utilisation d objets CORBA via les souches IDL Quelques interfaces IDL du bus CORBA L implantation d applications serveurs CORBA L implantation d applications clientes CORBA Les services de recherche et plus particuli rement le service Nommage Le cycle de vie des objets CORBA et le design pattern Fabrique La notification des applications clientes et le design pattern Observ Observateur M me si l exemple trait semble tr s simple il peut facilement tre adapt d autres contextes applicatifs comme par exemple toute application donnant acc s une base de donn es Pour cela il suffit de changer les concepts d crits dans le contrat IDL Par exemple en rempla ant le type Personne par Ouvrage on obtient alors une application de gestion de biblioth ques Choisir un langage d implantation La construction de notre application a t illustr e travers trois langages de programmation C Java et CorbaScript Les

Related Downloads
Explore
Post your homework questions and get free online help from our incredible volunteers
  923 People Browsing
Your Opinion
What's your favorite funny biology word?
Votes: 335

Previous poll results: Where do you get your textbooks?