1 1 Corba avec Java et C Jean-Marc Vanel Transiciel - Sogeti
2 2 Contenu et déroulement Plan Partie 1: survol vision Corba mise en oeuvre de Corba liaison et transport dans Corba services «communs» Annexe - exemple : HelloWorld Partie 2 Service de nommage (désignation) Premier programme CORBA en C++ Etude du type « Any » Les mécanismes dynamiques de C.O.R.B.A. Synthèse sur C.O.R.B.A.
3 3 Vision de Corba
4 4 OMG : concepts-clés Permettre linteropérabilité des composants / applications par lintermédiaire dun mode de coopération unifié : lappel dobjets distants Gérer lhétérogénéité des réseaux, machines, systèmes et langages Vision utilisateur = langage pivot commun : OMG-IDL Offrir une architecture globale
5 5 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
6 6 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 dobjets, 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 »
7 7 OMA : larchitecture globale Lic enc es Tra nsa ctio ns Per sist anc e Pro pri été s Ch ang em ent s Ev ent s NommageVendeurSécuritéRelationsCollectionsTempsExternalisation Interrogations Cycle de vie Concurrence Services objet communs Wo rkf low Dat aW are IH M Ad mi nist rati on Utilitaires communs Fin anc e Tél éco ms Sa nté Interfaces de domaine Objets applicatifs Spécifiques Bus dobjets répartis
8 8 ORB OMG : le modèle client/serveur objet Objet CORBA Etat Code dimplantat ion Référen ce dobjet Interfac e dobjet Requête Activation
9 9 Mise en oeuvre de Corba
10 OMG-IDL : le langage dinterfaces 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
11 OMG-IDL : mise en oeuvre des interfaces Projection des descriptions OMG-IDL vers les langages dimplantation des clients et des serveurs (e.g., C, C++, Java, etc). mode « statique » Instanciation sous forme dobjets CORBA des descriptions OMG-IDL depuis un référentiel dinterfaces. mode « dynamique »
12 CORBA : les composantes du bus Bus de communication Interface du bus Interface dinvocation statique Interface dinvocation dynamique SIIDII ORB SSIDSI OA Adaptateur dobjet Interface de squelettes statiques Interface de squelettes dynamiques IR Référentiel des interfaces ImplR Référentiel des implantations
13 Liaison et transport dans Corba
14 Les couches de transport de CORBA GIOP : protocole dinteropérabilité entre bus de la norme CORBA 2 support à lappel 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é)
15 Nommage dans Corba Noms du domaine Corba Interoperable Object Reference : IOR identification protocole interface OMG-IDL Sous-domaine Corba/Internet adresse IP + port
16 Emballeur GIOP Talon client (IOR) Interface applicative (issue de linterface IDL) IOR servant Adaptateur dobjet Mise en place dune liaison Emballeur GIOP Squelette serveur Servant applicatif Invocation Liaison IIOP
17 Services «communs»
18 Les services communs (1) Services de localisation dobjets 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 »
19 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
20 Exemple : « Hello World » en Java
21 Chaine de production de programme Hello.idl HelloOperations.jav a Hello.java HelloHelper.java HelloHolder.java _HelloStub.java Compilateur OMG-IDL / Java HelloClient.java HelloPOA.java HelloPOATie.java Client Serveur HelloServeur.java HelloImpl.java
22 De lIDL à Java Interface OMG-IDL Hello Interfaces Java HelloOperations, Hello Classes Java HelloHelper, HelloHolder interface Hello { void doHello(); }; public interface HelloOperations { public void doHello(); } public interface Hello extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {}
23 Implantation du serveur Corba public class HelloServeur { public static void main(String args[]) { // Initialisation du Bus Corba et dun POA org.omg.CORBA.ORB orb = 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 = NamingContextHelper.narrow( orb.resolve_initial_references("NameService")); // Creation du servant et enregistrement au serveur de noms HelloImpl hello = new HelloImpl(); ns.rebind( new NameComponent[] { new NameComponent("HelloObj","")}, hello ); // Mise en attente du serveur orb.run(); }
24 Implantation du client Corba 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 nomorg.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(); }
25 Les classes générées (client et serveur) Classe _HelloStub : implantation du talon sert à envoyer les requêtes utilisé en lieu et place de l'objet Hello dans le client Classe HelloPOA Classe HelloPOATie reçoit et décode les requêtes reçoit et décode les requêtes implantation par héritage implantation par délégation public class HelloImpl extends HelloPOA { public HelloImpl() {} public void doHello() { System.out.println("Hello world!"); }
26 Corba dynamique
27 Linvocation dynamique Référentiel dinterfaces (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 dopération, une liste de couples type-valeur (au sens de lIR), une structure pour le résultat, des méthodes: invoke send_deferred, get_response, poll_response send_oneway
28 Le squelette dynamique API (DSI) de décodage de requêtes Pas dutilisation de squelettes pré-générés Utilisée pour implanter dynamiquement des objets Cas dutilisation : création de passerelles