1 1 corba avec java et c++ 2004 jean-marc vanel transiciel - sogeti
TRANSCRIPT
11
Corba avec Java et C++
2004Jean-Marc Vanel
Transiciel - Sogeti
22
Contenu et déroulement
PlanPartie 1: survol
vision Corbamise en oeuvre de Corbaliaison et transport dans Corbaservices «communs»Annexe - exemple : HelloWorld
Partie 2Service 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.
33
Vision de Corba
44
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
55
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
66
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 »
77
OMA : l’architecture globale
Licences
Transactions
Persistanc
e
Propriétés
Changements
Events
Nommage Vendeur Sécurité Relations Collections Temps Externalisation
InterrogationsCyclede vie Concurrence
Services objet communs
Workflow
DataWare
IHM
Administration
Utilitaires communs
Financ
e
Télécoms
Santé
Interfacesde domaineObjetsapplicatifs
Spécifiques
Bus d’objets répartis
88
ORB
OMG :le modèle client/serveur objet
ObjetCORBA
Etat
Coded’implantation
Référenced’objet
Interfaced’objet
Requête Activation
99
Mise en oeuvre de Corba
1010
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
1111
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 depuis un référentiel d’interfaces.
mode « dynamique »
1212
CORBA : les composantes du bus
Bus de communication
Interface du bus
Interface d’invocation statique
Interface d’invocation dynamique
SII DII ORB
SSI DSI
OA
Adaptateur d’objetInterface de squelettes statiquesInterface de squelettes dynamiques
IR Référentieldes interfaces ImplR Référentiel
des implantations
1313
Liaison et transport dans Corba
1414
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 : CDRGIOP sur Internet = Internet Inter ORB Protocol (IIOP)champs « service context » (ex: standardisation ctxt
transactions, sécurité)
1515
Nommage dans Corba
Noms du domaine CorbaInteroperable Object Reference : IORidentification protocoleinterface OMG-IDL
Sous-domaine Corba/Internetadresse IP + port
1616
Emballeur GIOP
Talon client(IOR)
Interface applicative (issue de l’interface IDL)
IOR servant
Adaptateurd’objet
Mise en place d’une liaison
Emballeur GIOP
Squelette serveur
Servant applicatifInvocation
Liaison IIOP
1717
Services «communs»
1818
Les services communs (1)
Services de localisation d’objets
service de nommage (Naming)pour retrouver un objet par un nomservice de type « pages blanches »
service de courtage (Trader)pour retrouver un objet par des propriétésservice de type « pages jaunes »
1919
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
2020
Exemple : « Hello World » en Java
2121
Chaine de production de programme
Hello.idl
HelloOperations.javaHello.javaHelloHelper.javaHelloHolder.java
_HelloStub.java
CompilateurOMG-IDL / Java
HelloClient.java
HelloPOA.javaHelloPOATie.java
ClientServeur
HelloServeur.java
HelloImpl.java
2222
De l’IDL à Java
Interface OMG-IDL Hello
Interfaces Java HelloOperations, Hello
Classes Java HelloHelper, HelloHolder
<Hello.idl>interface Hello {void doHello();
};
<Hello.java>public interface HelloOperations {public void doHello();
}public interface Hello extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {}
2323
Implantation du serveur Corba
<HelloServeur.java>public class HelloServeur {public static void main(String args[]) {
// Initialisation du Bus Corba et d’un POAorg.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 nomorg.omg.CosNaming.NamingContext ns
= NamingContextHelper.narrow( orb.resolve_initial_references("NameService"));
// Creation du servant et enregistrement au serveur de nomsHelloImpl hello = new HelloImpl();ns.rebind(
new NameComponent[] { new NameComponent("HelloObj","")},hello );
// Mise en attente du serveurorb.run();
}
2424
Implantation du client Corba
<HelloClient.java>public class HelloClient {public static void main(String args[]) {
// Initialisation du Bus Corbaorg.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);// récupération du serveur de nomorg.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 distanthello.doHello();
}}
2525
Les classes générées (client et serveur)
Classe _HelloStub : implantation du talonsert à envoyer les requêtesutilisé en lieu et place de l'objet Hello dans le client
Classe HelloPOA Classe HelloPOATiereçoit et décode les requêtes reçoit et décode les requêtesimplantation par héritage implantation par délégation
<HelloImpl.java>public class HelloImpl extends HelloPOA {public HelloImpl() {}public void doHello() {System.out.println("Hello world!");
}}
2626
Corba dynamique
2727
L’invocation dynamique
Référentiel d’interfaces (IR)accessible comme objet Corbagestion 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 type-valeur (au sens de l’IR), une structure pour le résultat, des méthodes:
invokesend_deferred, get_response, poll_responsesend_oneway
2828
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