CORBA Common Object Request Broker Architecture Christophe Bouthier
CORBA Common Object Request Broker Architecture Christophe Bouthier LORIA D’après le cours de Karim Baina
Plan • • • Architecture CORBA Le langage IDL CORBA en Java : Java. IDL Le service de nommage CORBA en C++ : Mico Corba Christophe Bouthier Karim Baina LORIA 2
CORBA Architecture Corba Christophe Bouthier Karim Baina LORIA 3
Contexte • Applications distribuées • Objets répartis • Autres technos : RPC COM+ RMI . NET Corba Christophe Bouthier Karim Baina LORIA 4
Principe simplifié Client Serveur Objet Middleware Corba Christophe Bouthier Karim Baina LORIA 5
Object Management Group (OMG) • • Crée en 1989 But non lucratif Plus de 850 membres (Sun, IBM, Microsoft, . . . ) Crée et maintient les spécifications CORBA UML • http: //www. omg. org Corba Christophe Bouthier Karim Baina LORIA 6
Architecture de CORBA Serveur Client Objet Java Objet C++ Skeleton Stub ORB Corba Christophe Bouthier Karim Baina LORIA IIOP Object Adapter ORB 7
Composants • Stub : partie cliente • Skeleton : partie serveur générés automatiquement • Object Adapter : enregistrement des objets • ORB : passage de message • IIOP : Internet Inter ORB Protocol Corba Christophe Bouthier Karim Baina LORIA 8
Objet CORBA Serveur Objet CORBA Interoperable Object Reference Interface IDL Corba Christophe Bouthier Karim Baina LORIA Implémentation C++/Java Servant 9
Exemple d’IOR IOR: 00000001049444 c 3 a 5472697669616 c 3 a 312 e 300000100000007 c 00010200 0000000 d 3135322 e 38312 e 342 e 313130000004800 0000025 abacab 3131303033383632313336005 f 526 f 6 f 74504 f 410000 cafebabe 3 bd 5 b 8780000001000000010000002 c 000000100000004000100200001010900010100050100010109000000020001010005010001 Corba Christophe Bouthier Karim Baina LORIA 10
Interface Definition Langage (IDL) • • Description des interfaces Indépendant du langage d’implémentation Indépendant de la plate forme client Indépendant de la plate forme serveur • Ressemble beaucoup au C++ Corba Christophe Bouthier Karim Baina LORIA 11
Exemple module example { interface mon. Example { void methode 1(); long methode 2(); void methode 3(in long param, out long result); }; }; Corba Christophe Bouthier Karim Baina LORIA 12
Stub (souche) • Code client • Interface entre objet et ORB • Traduit les invocations sur l’objet serveur > marshalling • Traduit les messages en valeurs de retour unmarshalling Corba Christophe Bouthier Karim Baina LORIA 13
Skeleton (squelette) • Code serveur • Interface entre implémentation et ORB • Traduit les invocations client vers l’implémentation > unmarshalling • Traduit la valeur de retour en message vers client > marshalling Corba Christophe Bouthier Karim Baina LORIA 14
Object Request Broker (ORB) • Transporte les messages entre les objets • Relie les stubs aux skeletons correspondants vice versa • Bus à objets • Communications inter ORBs : et GIOP (General Inter ORB Protocol) IIOP (Internet Inter ORB Protocol) (GIOP on TCP/IP) Corba Christophe Bouthier Karim Baina LORIA 15
Object Adapter (OA) • • • Enregistre et gère les implémentations Activation et désactivation des objets Invocation des méthodes Authentification du client / contrôle d’accès Différents types : BOA – Basic Object Adapter POA – Portable Object Adapter Corba Christophe Bouthier Karim Baina LORIA 16
Architecture de CORBA Serveur Client Objet C++ IDL Objet Java Skeleton Stub ORB Corba Christophe Bouthier Karim Baina LORIA IIOP Object Adapter ORB 17
Création d’une application CORBA • • 1 – Définir l’interface IDL 2 – Compiler l’interface IDL 3 – Créer l’implémentation de l’interface IDL 4 – Créer le serveur : > publication de l’objet CORBA • 5 – Créer le client : > appel de l’objet CORBA Corba Christophe Bouthier Karim Baina LORIA 18
CORBA IDL Corba Christophe Bouthier Karim Baina LORIA 19
Exemple module example { interface mon. Example { void methode 1(); long methode 2(); void methode 3(in long param, out long result); }; }; Corba Christophe Bouthier Karim Baina LORIA 20
Module mon. Module { … }; • espace de nom C++ : namespace Java : package Corba Christophe Bouthier Karim Baina LORIA 21
Interface interface mon. Interface { … }; • Classe C++ : class Java : interface Corba Christophe Bouthier Karim Baina LORIA 22
Méthode void methode(in long param, out long result); • Méthodes : comme en C++ et Java, sauf in out inout : paramètre utilisé en entrée (lu, non modifié) : paramètre utilisé en sortie (non lu, modifié) : paramètre utilisé en entrée et en sortie (lu et modifié) Corba Christophe Bouthier Karim Baina LORIA 23
Syntaxe • Commentaire : comme C++ et Java // : jusqu’à la fin de la ligne /* … */ : bloc de commentaire • • Préprocesseurs : #define, #include, #ifdef, #endif Alias : typedef Possibilité de définir des attributs Constantes : const Corba Christophe Bouthier Karim Baina LORIA 24
Types primitifs • • void short long float double boolean Corba Christophe Bouthier Karim Baina LORIA 25
Types complexes • string • struct • enum • union • any Corba Christophe Bouthier Karim Baina LORIA 26
Héritage • Héritage multiple • Surcharge et redéfinition interdites • • interface A { …}; interface B : A { … }; interface C : A { … }; interface D : B, C { … }; Corba Christophe Bouthier Karim Baina LORIA A B C D 27
CORBA Java. IDL Corba Christophe Bouthier Karim Baina LORIA 28
Java. IDL • ORB CORBA en Java de Sun • Inclu au JDK • idlj : compilateur idl vers java Syntaxe : idlj fall <fichier. idl> • orbd : ORB et serveur de nom indépendant Syntaxe : orbd ORBInitial. Port <port> ORBInitial. Host localhost Corba Christophe Bouthier Karim Baina LORIA 29
Implémentation • Fichier Mon. Object. IDL : interface Mon. Objet { … }; • Classe qui implémente le contrat IDL Doit dériver de Mon. Objet. POA est généré par le compilateur IDL • Lancement client ou serveur : java <serveur/client> ORBInitial. Port <port> ORBInitial. Host localhost Corba Christophe Bouthier Karim Baina LORIA 30
Serveur / 1 • Initialiser l’ORB : Méthode statique init(args, null) de la classe ORB retourne un objet ORB • Objet CORBA : org. omg. CORBA. Object Ne pas confondre avec java. lang. Object Retourné par différentes méthodes Cast avec méthode statique narrow de la classe Mon. Type. Helper Corba Christophe Bouthier Karim Baina LORIA 31
Serveur / 2 • Utilisation d’un POA : Méthode resolve_initial_references("Root. POA") de l’objet ORB Retourne un objet CORBA à caster en objet POA Puis méthode the_POAManager(). activate() de l’objet POA • Enregistrer le servant : Méthode servant_to_reference(servant) de l’objet POA retourne un objet CORBA • Lancement de l’ORB (à la fin) : Méthode run de l’objet ORB Corba Christophe Bouthier Karim Baina LORIA 32
Client • Initialiser l’ORB : Méthode statique init(args, null) de la classe ORB retourne un objet ORB • Récuperer un objet CORBA depuis son IOR : Méthode string_to_object(IOR) de l’objet ORB Retourne un objet CORBA Cast dans son vrai type avec la méthode statique narrow de la classe Mon. Objet. Helper est généré par le compilateur IDL Corba Christophe Bouthier Karim Baina LORIA 33
CORBA Service de nommage Corba Christophe Bouthier Karim Baina LORIA 34
Services CORBA • • Service de cycle de vie Service d’événements Service de concurrence Service de transaction Service de persistance Service d’interrogation Service de collection Corba Christophe Bouthier Karim Baina LORIA 35
Services de recherche d’objets • Service de nommage (Naming) Recherche d’objet par nom pages blanches • Service vendeur (Trader) Recherche d’objet par propriété pages jaunes Corba Christophe Bouthier Karim Baina LORIA 36
Besoin du Naming • Référence d’un objet : IOR Fichier partagé, … • Service à la DNS : Service accessible par le bus ORB Service standard entre ORBs Un nom spécifique < > un objet corba Gère les contextes de nom Corba Christophe Bouthier Karim Baina LORIA 37
Utilisation du Naming • Module Cos. Naming • Interface Naming. Context • Nouvelle interface Naming. Context. Ext Création d’une association : bind, rebind Résoudre une association : resolve Détruire une association : unbind • Programme indépendant à lancer avant : orbd Corba Christophe Bouthier Karim Baina LORIA 38
Obtenir le Naming • Naming = objet CORBA Défini en IDL Associé au nom « Name. Service » • Racine de l’arbre de référence : Méthode resolve_initial_references de l’ORB Conversion en Naming. Context ou Naming. Context. Ext • Possibilité de spécifier où cher les initial_references Corba Christophe Bouthier Karim Baina LORIA 39
Naming dans Java. IDL : coté serveur • Lancer orbd avant • Récupérer le Naming : orb. resolve_initial_references("Name. Service") retourne un objet CORBA Puis cast avec Naming. Context. Ext. Helper. narrow(obj) • Créer une association (objet Naming. Context. Ext) : to_name("NOM") retourne un cheming sous forme de Name. Component[] Puis enregistrement avec rebind(chemin, obj) Corba Christophe Bouthier Karim Baina LORIA 40
Naming dans Java. IDL : coté client • Même initialisation/récupération : orb. resolve_initial_references("Name. Service") retourne un objet CORBA Puis cast avec Naming. Context. Ext. Helper. narrow(obj) • Récupération de l’objet CORBA à partir du nom : ns. resolve(ns. to_name("NOM")) retourne un objet CORBA Puis cast avec Mon. Objet. Helper. narrow(obj) Corba Christophe Bouthier Karim Baina LORIA 41
CORBA Mico Corba Christophe Bouthier Karim Baina LORIA 42
Mico Is COrba • ORB CORBA en C++ • Open source et libre (GPL) • Multi plateforme : Linux/Unix Windows • • Visual C++ Cygwin Mac. OS X Pocket PC Corba Christophe Bouthier Karim Baina LORIA 43
Client • idl : compilateur idl vers C++ Syntaxe : idl <fichier. idl> Génère mon. Objet. cc • Compilation : Compiler mon. Objet. cc en mon. Objet. o Lier avec mon. Objet. o, mico 2. 3. 5, micocoss 2. 3. 5, dl, m • Indiquer où trouver le Naming : <client> -ORBDefault. Init. Ref corbaloc: : localhost: <port> Corba Christophe Bouthier Karim Baina LORIA 44
Code client / 1 • Initialisation ORB : Namespace CORBA Fonction ORB_init(argc, argv, "mico local orb") retourne un objet ORB_var • Name Service : Namespace Cos. Naming resolve_initial_references("Name. Service") de l’objet ORB retourne un objet CORBA (CORBA: : Object_var) Cast avec méthode de classe _narrow(obj) de la classe Naming. Context. Ext Corba Christophe Bouthier Karim Baina LORIA 45
Code client / 2 • Naming (suite) Cast retourne un objet Naming. Context. Ext_var • Récuperation d’un objet par le Naming : Méthode resolve_str("Nom") de l’objet Naming. Context. Ext_var Retourne un objet CORBA Cast avec la méthode de classe _narrow(obj) de la classe Mon. Objet Retourne un objet Mon. Objet_var Corba Christophe Bouthier Karim Baina LORIA 46
Conclusion • • • Solution non propriétaire Standard Libre choix de l’implémentation et du langage Solution fonctionnelle d’interopérabilité Plusieurs implémentations libres et open source • Mais : un peu « usine à gaz » … Corba Christophe Bouthier Karim Baina LORIA 47
- Slides: 47