Introduction à Corba Réunion Cube – 24/10/2003 P. Déchamboux (FTR&D DTL/ASR) Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire implique, de la part de ce dernier, la reconnaissance du caractère confidentiel de son contenu et l'engagement de n'en faire aucune reproduction, aucune transmission à des tiers, aucune divulgation et aucune utilisation commerciale sans l'accord préalable écrit de France Télécom R&D France Télécom R&D 1 Contenu et déroulement Références http://www.omg.org/ http://corbaweb.lifl.fr/CORBA_des_concepts_a_la_pratique/ http://www.cs.wustl.edu/~schmidt/corba.html Plan vision Corba mise en oeuvre de Corba liaison et transport dans Corba services « systèmes » et canevas de Corba Annexe exemple : HelloWorld France Télécom R&D 2 Vision de Corba France Télécom R&D 3 OMG : concepts-clés Permettre l’interopérabilité des composants / applications par l’intermédiaire d’un mode de coopération unifié : l’appel d’objets distants Gérer l’hétérogénéité des réseaux, machines, systèmes et langages Vision utilisateur = langage pivot commun : OMG-IDL Offrir une architecture globale France Télécom R&D 4 OMG : les objectifs techniques Liaison avec tous les langages Transparence des invocations Invocation statique et dynamique Système auto-descriptif Activation automatique Interopérabilité entre bus France Télécom R&D 5 OMG : vision globale Common Object Request Broker Architecture CORBA appel de méthode réparti transparent passages de paramètres : in, out, in/out types de paramètres : types de base (entiers, string, etc), références d’objets, objets par valeur un bus à objets répartis (ORB) transport des requêtes, activation des objets des services de base (CORBAservices) des utilitaires communs (CORBAfacilities) des interfaces de domaines = objets métiers « interopérabilité sémantique » France Télécom R&D 6 OMA : l’architecture globale Interfaces de domaine Objets applicatifs Utilitaires communs Workflow Télécoms Spécifiques Santé Finance DataWare Administration IHM Bus d’objets répartis Nommage Vendeur Interrogations Sécurité Cycle de vie Relations Collections Temps Transactions Propriétés Persistance Licences Externalisation Events Changements Concurrence Services objet communs France Télécom R&D 7 OMG : le modèle client/serveur objet Référence d’objet Interface d’objet France Télécom R&D Code d’implantation Requête Objet CORBA Activation Etat ORB 8 Mise en oeuvre de Corba France Télécom R&D 9 OMG-IDL : le langage d’interfaces Rôle du langage décrire les interfaces des objets langage pivot entre applications générer des squelettes de programme dans les langages de programmation des applications France Télécom R&D 10 OMG-IDL : mise en oeuvre des interfaces Projection des descriptions OMG-IDL vers les langages d’implantation des clients et des serveurs (e.g., C, C++, Java, etc). mode « statique » Instanciation sous forme d’objets CORBA des descriptions OMG-IDL dans un référentiel d’interfaces. mode « dynamique » France Télécom R&D 11 CORBA : les composantes du bus Interface du bus Adaptateur d’objet Interface d’invocation statique Interface de squelettes statiques Interface d’invocation dynamique Interface de squelettes dynamiques SSI SII DII ORB Bus de communication IR France Télécom R&D Référentiel des interfaces ImplR DSI OA Référentiel des implantations 12 Liaison et transport dans Corba France Télécom R&D 13 Les couches de transport de CORBA GIOP : protocole d’interopérabilité entre bus de la norme CORBA 2 support à l’appel de méthode (enveloppe = REQUEST, REPLY, etc) encodage des données : CDR GIOP sur Internet = Internet Inter ORB Protocol (IIOP) champs « service context » (ex: standardisation ctxt transactions, sécurité) France Télécom R&D 14 Nommage dans Corba Noms du domaine Corba Interoperable Object Reference : IOR identification protocole interface OMG-IDL Sous-domaine Corba/Internet adresse IP + port clé de format libre (dépendant de l’adaptateur d’objet) identificateur d’adaptateur d’objet clé de format libre (dépendant de l’adaptateur d’objet) France Télécom R&D 15 Mise en place d’une liaison Invocation Servant applicatif Interface applicative (issue de l’interface IDL) Talon client (IOR) Emballeur GIOP IOR servant Adaptateur d’objet Squelette serveur Emballeur GIOP Liaison IIOP France Télécom R&D 16 Services « systèmes » et canevas de Corba France Télécom R&D 17 Les services communs (1) Services de localisation d’objets service de nommage (Naming) pour retrouver un objet par un nom service de type « pages blanches » service de courtage (Trader) pour retrouver un objet par des propriétés service de type « pages jaunes » France Télécom R&D 18 Les services communs (2) Services de communications asynchrones Events, Notification, Messaging Services de sûreté de fonctionnement Security, Transactions, Concurrence Services concernant la vie des objets Life Cycle, Property, Relationship, Externalization, Persistent Object, Query, Collection, Versionning, Time, Licencing France Télécom R&D 19 Exemple : « Hello World » en Java France Télécom R&D 20 Chaine de production de programme Hello.idl Compilateur OMG-IDL / Java _StubForHello.java HelloClient.java HelloOperations.java Hello.java HelloHelper.java HelloHolder.java HelloPOA.java HelloPOATie.java HelloImpl.java HelloServeur.java Client France Télécom R&D Serveur 21 De l’IDL à Java Interface OMG-IDL Hello <Hello.idl> interface Hello { void doHello(); }; Interface Java HelloOperations, Hello <Hello.java> public interface HelloOperations { public void doHello(); } public interface Hello extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {} Classes Java HelloHelper, HelloHolder France Télécom R&D 22 Implantation du serveur Corba <HelloServeur.java> public class HelloServeur { public static void main(String args[]) { // Initialisation du Bus Corba et d’un POA org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); org.omg.PortableServer.POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); // récupération du serveur de nom org.omg.CosNaming.NamingContext ns = org.omg.CosNaming. NamingContextHelper.narrow( orb.resolve_initial_references("NameService")); // Creation du servant et enregistrement au serveur de noms HelloImpl hello = new HelloImpl(); ns.rebind( new org.omg.CosNaming.NameComponent[] {new NameComponent("HelloObj","")}, hello); // Mise en attente du serveur orb.run(); } France Télécom R&D 23 Implantation du client Corba <HelloClient.java> public class HelloClient { public static void main(String args[]) { // Initialisation du Bus Corba org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); // récupération du serveur de nom org.omg.CosNaming.NamingContext ns = org.omg.CosNaming. NamingContextHelper.narrow( orb.resolve_initial_references("NameService")); // Récupération de la souche depuis le serveur de nom org.omg.CORBA.Object obj_ref = ns.resolve(new org.omg.CosNaming.NameComponent[] {new NameComponent("HelloObj","")}); Hello hello = HelloHelper.narrow(obj_ref); // Invocation de l'objet distant hello.doHello(); } } France Télécom R&D 24 Les classes générées (client et serveur) Classe _StubForHello : implantation du talon sert à envoyer les requêtes utilisé en lieu et place de l'objet Hello dans le client Classe HelloPOA reçoit et décode les requêtes implantation par héritage Classe HelloPOATie reçoit et décode les requêtes implantation par délégation <HelloImpl.java> public class HelloImpl extends HelloPOA { public HelloImpl() {} public void doHello() { System.out.println("Hello world!"); } } France Télécom R&D 25 Corba dynamique France Télécom R&D 26 L’invocation dynamique Référentiel d’interfaces (IR) accessible comme objet Corba gestion de méta-objets Corba (ModuleDef, InterfaceDef, OperationDef, AttributeDef, TypedefDef, …) API (DII) de construction de requêtes Un objet Request = un nom d’opération, une liste de couples valeur - type (au sens de l’IR) et une structure pour le résultat invoke send_deferred + get_response, poll_response send_oneway France Télécom R&D 27 Le squelette dynamique API (DSI) de décodage de requêtes Pas d’utilisation de squelettes pré-générés Utilisée pour implanter dynamiquement des objets Cas d’utilisation : création de passerelles France Télécom R&D 28