28
1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

Embed Size (px)

Citation preview

Page 1: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

11

Corba avec Java et C++

2004Jean-Marc Vanel

Transiciel - Sogeti

Page 2: 1 1 Corba avec Java et C++ 2004 Jean-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.

Page 3: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

33

Vision de Corba

Page 4: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 5: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 6: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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 »

Page 7: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 8: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

88

ORB

OMG :le modèle client/serveur objet

ObjetCORBA

Etat

Coded’implantation

Référenced’objet

Interfaced’objet

Requête Activation

Page 9: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

99

Mise en oeuvre de Corba

Page 10: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 11: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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 »

Page 12: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 13: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

1313

Liaison et transport dans Corba

Page 14: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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é)

Page 15: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

1515

Nommage dans Corba

Noms du domaine CorbaInteroperable Object Reference : IORidentification protocoleinterface OMG-IDL

Sous-domaine Corba/Internetadresse IP + port

Page 16: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 17: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

1717

Services «communs»

Page 18: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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 »

Page 19: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 20: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

2020

Exemple : « Hello World » en Java

Page 21: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 22: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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 {}

Page 23: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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();

}

Page 24: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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();

}}

Page 25: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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!");

}}

Page 26: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

2626

Corba dynamique

Page 27: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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

Page 28: 1 1 Corba avec Java et C++ 2004 Jean-Marc Vanel Transiciel - Sogeti

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