Upload
corine-hardouin
View
106
Download
3
Embed Size (px)
Citation preview
CORBA :des concepts à la pratique
J-M. Geib, P. Merle, C. Gransart,
LIFL1998
Au sommaire
Mise en pratique d’un bus CORBA ORBacus de OOC
Réalisation d’une application CORBA un gestionnaire de répertoires d’adresses
En C++, Java et CorbaScript un peu de pub pour CorbaScript
CorbaScript
Un nouveau langage de scripts dédié à CORBA
Interprété et typage dynamiqueOrienté objet et « tout est objet »
Utilisant les mécanismes dynamiques de CORBA : DII, DSI, IFR Java : JNI
Conçu au LIFL et soumis à l’OMG
Les étapes de la construction de l’application CORBA
La définition du contrat IDL
L’implantation des objets CORBA
La création de serveurs et de clients
L’utilisation du service Nommage
La création d’objets CORBA
La notification des clients
Une application client/serveur
Bus d’objets répartis CORBA sur Internet (IIOP)
Client Java Serveur C++
Repertoire
Traitement
Contrat IDL
Le contrat IDL initial
Réutiliser des spécifications IDL : dateRegrouper des définitions communes : annuaireDéfinir les concepts manipulés : Nom, PersonneDéfinir les données échangées : DesNomsDéfinir l’interface des objets : Repertoire
des opérations : ajouterPersonne des exceptions : ExisteDeja des attributs (paires d’opérations) : libelle
Définir des types pour l’implantation : DesPersonnes
L’implantation C++ du répertoire
Hérite de la classe squelette en ORBacus/C++, annuaire_Repertoire_skel
Définit la structure interne le libellé et la liste des personnes
Implante les attributs et opérations respecter les signatures définies par le squelette les exceptions sont levées classiquement
Dupliquer les données à garder et les retours gestion mémoire complexe
L’invocation Java du répertoire
A travers les souches IDL package fr.lifl.annuaire
Invocations comme si en local notation classique d’appel de méthodes passage par valeur pour le mode in tout est objet (Personne, Date, Mois)
Gestion naturelle des exceptions
L’invocation en CorbaScript
Langage simple à utiliser Tout est objet et typage dynamique
Accès direct aux définitions OMG-IDL désignation CorbaScript = nom IDL via le référentiel des interfaces
Invocation dynamique pas de génération de souches masquant la complexité du mécanisme DII
Un serveur CORBA
1. Initialiser le bus CORBA obtenir l’objet ORB
2. Initialiser l’adaptateur d’objets obtenir le BOA ou POA
3. Créer les implantations d’objets4. Enregistrer les implantations par l’adaptateur
implicite en C++ et Java ou explicite en CorbaScript
5. Diffuser leurs références afficher une chaîne codifiant l’IOR
6. Attendre des requêtes venant du bus
Un client CORBA
1. Initialiser le bus (objet ORB)
2. Créer les souches des objets à utiliser2.a. obtenir les références d’objet (IOR)2.b. convertir vers les types nécessaires narrow contrôle le typage à travers le réseau
3. Réaliser les traitements
Rem. : éviter l’opérateur bind (2.a + 2.b) spécifique à chaque produit donc non portable
Un client CorbaScript
Langage dédié à CORBA masque l’initialisation du bus
C’est vraiment simple :-) création des souches
Script saisi en interactif ! test d’implantations administration d’objets existants
L’exécution sur le bus CORBA
Bus d’objets répartis CORBA sur Internet (IIOP)
Client Java Serveur C++
Repertoire
Traitement
IOR
Diffusion de l’IOR non gérée par le bus
Les services de recherche d’objets CORBA
Services Nommage et/ou Vendeur
Bus d’objets répartis CORBA sur Internet (IIOP)
Serveur C++Client Java
Repertoire
Traitement
IOR
Service derecherched’objets
IOR
Le service Nommage
Espace de désignation symbolique : CosNaming association nom - référence d’objet graphes de répertoires : NamingContext chemin d’accès : Name
Opérations principales ajouter une association : bind, rebind, ... résoudre une association : resolve détruire une association : unbind lister le contenu : list détruire le contexte : destroy
Obtenir la référence du service Nommage
Comment retrouver la référence de ce service ?
C’est un « objet notoire » du bus CORBA de nom NameService fixé par configuration du produit utilisé
Quelque soit le langage, le scénario esta. opération CORBA::ORB::resolve_initial_referencesb. conversion en CosNaming::NamingContext
En CorbaScript, l’opérateur narrow est implicite
Utilisations du service Nommage
Enregistrer une référence diffusion par un serveur de ses références d’objet (2) création d’un chemin (3) opération bind ou rebind
Rechercher une référence (2) création d’un chemin valide (3) opération resolve (4) conversion vers le type nécessaire
A noter la simplicité avec CorbaScript
Le cycle de vie des objets
Problème actuellement, 1 répertoire = 1 serveur pas de création/destruction d’objets à distance seulement invocation d’opérations
Solution notion de fabrique d’objets exprimée en OMG-IDL
C’est un canevas de conception voir aussi le service LifeCycle
L’implantation de la fabrique
FabriqueRepertoireRepertoire
RepertoireRepertoire
creerRepertoire
L’implantation de la fabrique
FabriqueRepertoireRepertoire
RepertoireRepertoire
detruireRepertoire
Une application d’administration de la fabrique
Création d’un nouveau répertoire et mise à disposition par le service Nommage 1. Initialiser le bus CORBA 2. Obtenir le service Nommage (NS) 3. Obtenir la fabrique depuis le NS 4. Créer un répertoire 5. Enregistrer le répertoire dans le NS
A noter la simplicité avec CorbaScript le script peut être saisi interactivement
La notification des clients
Bus d’objets répartis CORBA sur Internet (IIOP)
Client Serveur
Repertoire
Traitement
Service Evénements ou canevas de conception
modificationnotification
consultation
Un canevas de conception pour la notification des clients
Design Pattern « Observé - Observateur »
Côté application notifiée (Observateur) 1 interface à implanter : ObservateurRepertoire 1 opération par type d’événement oneway pour communication asynchrone
Côté serveur notifiant (Observé) 1 interface pour enregistrer les observateurs héritage d’interfaces OMG-IDL
L’implantation du répertoire observé
Utilisation du squelette OMG-IDLRéutilisation de l’implantation existante
par héritage ou délégation
Gestion de la liste des observateursRedéfinition des opérations impliquant une
notification réutilisation du code existant notification des observateurs prise en charge des pannes !
Une application cliente notifiée
Une application cliente peut implanter des objets souvent objets client = objets « callback » CORBA n’est pas strictement client/serveur
Le scénario de l’observation obtenir l’objet observable créer l’objet observateur abonner l’observateur auprès de l’observé … traiter les notifications ... mettre fin à l’abonnement
Bilan sur l’application
Construire des applications CORBAc’est tout de même simple mais il faut respecter la structure des applications se plier aux règles de projection/programmation
Pour obtenir la portabilité du code l’interopérabilité entre implantations
L’application présentée peut facilement être adaptée à d’autres contextes
Et après ?Plusieurs serveurs/fabriques mais …Pas d’activation automatique des serveurs
configuration du référentiel des implantations
Pas d’objets persistantsPas de sûreté de fonctionnement
sécurité, tolérance aux pannes, transactions …
Utiliser les services CORBA fournis :-)Pas de configuration/reconfiguration
placement/déplacement des serveurs et des objets
Voir les langages de description d’architecture
Conclusion
CORBA : ça marche et c’est simpleChoisir son langage d’implantation
C++ : complexe et moins portable Java : portable et plus lent CorbaScript : encore plus convivial
Choisir son bus 1 bus = 1 bibliothèque mixer les bus : c’est possible
Rendez-vous à la démonstration !
Disponibilité de CorbaScript
Bus CORBA: ORBacus <URL:http://www.ooc.com> MICO
<URL:http://www.vsb.cs.uni-frankfurt.de/~mico/> A venir Visibroker, OAK, …
Environnements systèmes : Sun Solaris, Linux, SGI IRIX, HP-UX, AIX, W95/NT … A venir JDK 1.1.x et 1.2
Gratuit avec les sources C++
URL : http://corbaweb.lifl.fr/CorbaScript