58
- 1 - © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis CORBA : suite - Les services communs - Les composantes du bus

© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

Embed Size (px)

Citation preview

Page 1: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 1 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

CORBA : suite

- Les services communs

- Les composantes du bus

Page 2: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 2 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Services communs CORBA

Page 3: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 3 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Les services communs CORBA

Service de recherche d’objets : pour retrouver un objet Nommage (Naming) : par un nom : service de « pages blanches »Vendeur (Trader) : par des propriétés: service de « pages jaunes

Services concernant la vie des objets : Life Cycle, Property, Relationship, Externalization, Persistent Object, Query, Collection, Versionning, Time, Licencing

Services de sûreté de fonctionnement : Security, Transactions, Concurrence

Services de communications asynchrones: Events, Notification, Messaging

III. CorbaServices

Page 4: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 4 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Le contrat IDL du service Nommagemodule CosNaming { typedef string Istring; struct NameComponent {. string id; string kind; }; typedef sequence<NameComponent> Name; // Un chemin d’accès = une suite de noms.

interface NamingContext { // Un contexte. enum NotFoundReason { missing_node, not_context, not_object }; exception NotFound {NotFoundReason why; Name rest_of_name;}; exception CannotProceed {NamingContext cxt; Name rest_of_name;}; exception InvalidName { }; exception AlreadyBound { }; exception NotEmpty { };

void bind(in Name n, in Object obj) // Associer un nom à une référence.raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

Object resolve (in Name n) raises(NotFound, CannotProceed, InvalidName);

// Autres opérations : // rebind bind_context rebind_context unbind};};

III. CorbaServices

// new_context bind_new_context// destroy list

Le contrat IDL du service Nommage

Page 5: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 5 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Comment retrouver la référence du service de nommage ?

C’est un « objet notoire » du bus CORBA de nom NameService

Quelque soit le langage, le scénario esta. opération CORBA::ORB::resolve_initial_referencesb. conversion en CosNaming::NamingContext

// En C++, obtenir la référence du service Nommage.

CORBA_Object_var contextObj = orb->resolve_initial_references ("NameService");

CosNaming::NamingContext_var context = CosNaming::NamingContext::_narrow(contextObj);

III. CorbaServices

Page 6: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 7 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Obtenir le service de Nommage en Java

import org.omg.CosNaming.*;...//retrouver la référence de l ’objet notoire « NameService »org.omg.CORBA.Object objRef = null;try { objRef = orb.resolve_initial_references ("NameService");} catch( org.omg.CORBA.ORBPackage.InvalidName e ) { outils.ARRET ("Le service initial NameService est inconnu");}

//la convertir en une référence à un objet //de type CosNaming::NamingContext NamingContext nsRef = NamingContextHelper.narrow(objRef);if ( nsRef == null ) { outils.ARRET ("Le service initial 'NameService' n'est pas

un objet CosNaming::NamingContext");

Page 7: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 8 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Notion de chemin d’accès

Page 8: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 9 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Créer un nom/chemin en Java

import org.omg.CosNaming.*; //créer un chemin simpleNameComponent[] nsNom = new NameComponent [1];nsNom[0] = new NameComponent(  "grilleA ", "");

//créer un chemin composéNameComponent[] nsNom = new NameComponent [2];nsNom[0] = new NameComponent( "appli", "");nsNom[1] = new NameComponent(    "grille ", "");

Page 9: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 10 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Enregistrer un objet

• Opération pour publier un Objet– en général, opération réalisée par le serveur

• Scénario Type1. Créer un objet2. Construire un chemin d ’accès (Name)3. Appeler l ’opération « bind » ou « rebind » avec le chemin et la référence de l ’objet

void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound);

Page 10: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 11 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Enregistrer un objet en Java

//créer un chemin

NameComponent[] nsNom = new NameComponent [1];

nsNom[0] = new NameComponent("MONOBJET","");

//enregistrer l ’objet

try {

nsRef.bind (nsNom, uneRefObjet);} catch (org.omg.CosNaming.NamingContextPackage.NotFound enf) {

. . .

} catch(org.omg.CosNaming.NamingContextPackage.AlreadyBound eab){

. . .

} catch(org.omg.CosNaming.NamingContextPackage.CannotProceed

ecp){

. . .

} catch(org.omg.CosNaming.NamingContextPackage.InvalidName ein) {

. . .

Page 11: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 12 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Retrouver un objet

• Opération réalisée par un client ou un serveur

• Scénario type :

– construire un chemin d’accès (Name)

– appeler l’opération « resolve » avec le chemin

– convertir la référence obtenue dans le bon type

Object resolve (in Name n)

raises (NotFound, CannotProceed, InvalidName)

Page 12: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 13 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Retrouver un objet en Java

//créer un cheminNameComponent[] nsNom = new NameComponent [1];nsNom[0] = new NameComponent("MONOBJET",""); //retrouver l ’objetorg.omg.CORBA.Object objRef = null;try {objRef = nsRef.resolve (nsNom);} catch (org.omg.CosNaming.NamingContextPackage.NotFound enf) {. . .} catch(org.omg.CosNaming.NamingContextPackage.CannotProceed ecp){. . .} catch (org.omg.CosNaming.NamingContextPackage.InvalidName ein) {. . .} //convertir la référenceGrille uneRefObjet = GrilleHelper.narrow (objRef);

Page 13: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 14 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Le service de notification d'événements

La plupart des requêtes CORBA se traduisent par l’exécution synchrone d’une opération (le client connaît la référence de l’objet auquel la requête s’adresse et le client ainsi que l’objet doivent être tous deux actifs) et sinon?

Le service d'Evénements ou Event service permet de découpler la communication entre objets.

Mode de communication découplé : lorsque le client et l’objet ne se connaissent pas; lorsque le client et l’objet ne sont pas actifs simultanément.

III. CorbaServices

Page 14: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 15 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Communication événementielleprincipes de fonctionnement

• concepts de base : événements, réactions (traitements associés à l’occurrence d’un événement)

• principe d’attachement : association dynamique entre un nom d’événement et une réaction

• communication anonyme : indépendance entre l’émetteur et les “consommateurs” d’un événement

Page 15: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 16 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Un canal d’évènements

Producteur

Producteur

Consommateur

Consommateur

Consommateur

Consommateur

Canal

Flot des évènements

III. CorbaServices

Page 16: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 17 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Un canal d’évènements : notification

Producteur

Producteur

Consommateur

Consommateur

Consommateur

Consommateur

Canal

Producteur actif / Consommateur réactifLe canal diffuse les évènements

Push

Push

PushSupplierPushConsumer

void push(in any data) raises(Disconnected);

III. CorbaServices

Page 17: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 18 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Un canal d’évènements : demande

Producteur

Producteur

Consommateur

Consommateur

Consommateur

Consommateur

Canal

Producteur réactif / Consommateur actifLe canal procure les évènements

Pull()

Pull()

demandePullSupplier {

//demande de production d’un événement

any pull() raises(Disconnected);

// présence d’un événement

any try_pull(out boolean has_event) raises(Disconnected);

III. CorbaServices

Page 18: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 19 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Un canal d’évènements : file d’évènements

Producteur

Producteur

Consommateur

Consommateur

Consommateur

Consommateur

Canal

Producteur actif / Consommateur actifLe canal gère des files d’évènements

Push()

Pull()

III. CorbaServices

Page 19: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 20 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Un canal d’évènements : collecte d’évènements

Producteur

Producteur

Consommateur

Consommateur

Consommateur

Consommateur

Canal

Producteur réactif / Consommateur réactifLe canal est une entité active voire intelligente

Pull()

Push()

III. CorbaServices

Page 20: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 21 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Le service de Transaction

Le service de Transaction permet d’assurer la consistance des traitements en respectant les propriétés ACID (Atomicité, Consistance, Isolation et durabilité) des transactions.

Il permet :

de commencer et de terminer une transaction; de contrôler la propagation d’une transaction;

d’associer plusieurs objets répartis à une seule et même transaction; de coordonner la terminaison d’une transaction (2 phase commit).

III. CorbaServices

Page 21: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 22 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Composantes du bus

Page 22: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 23 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Noyau de communication

Interface d’Invocation Statique

Interface d’Invocation Dynamique

Interface du bus

SII DII ORB

SSI DSI

OA

Interface de Squelettes Statiques

Interface de Squelettes Dynamiques

Adaptateur d’objet

IR Référentieldes interfaces ImplR Référentiel

des implantations

CORBA : les composantes du bus

Page 23: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 24 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

pré-compilateur

fichierIDL

Client Implémentation d’objet

DII Stubclient

InterfaceORB

Référentieldes interfaces

Rint

Référentieldes implémentations

Rimp

noyau de l ’Object Request Broker (ORB)

SSI DSI

SII

Adaptateur d’Objet

Architecture générale

Interface de l ’adaptateur

Page 24: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 25 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

• Projection des descriptions OMG-IDL vers les langages d’implantation des clients et serveurs.

– mode « statique »

• Instanciation sous forme d’objets CORBA des descriptions OMG-IDL dans un référentiel des interfaces commun.

– mode « dynamique »

OMG-IDL : compilation

Page 25: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 26 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

• Les clients et serveurs implantent des descriptions OMG-IDL communes, statiquement précisées dans la phase de compilation/projection du source IDL.

III. Corbamode statiqueCORBA : le mode statique

Contrat IDL

Bus CORBA SqueletteIDL

StubIDL

Fournisseurd ’objets

Clientd ’objets

• Les souches générées encapsulent l’utilisation du bus, l’activation et la distribution des composants et l’hétérogénéité de l’architecture.

Page 26: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 27 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

ORB serveur

POA

Architecture CORBA

ORB client

Objetd’implantation

Référenced’objet(IOR)

Interfaced’objet

Requête

Activation

Objet Corba

réseau

POA

id

Requête

Page 27: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 28 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Fichiers générés

• Interfaces :– Gestionnaire

– GestionnaireOperations

• Classes utilitaires :– GestionnaireHelper : conversion de type, insertion dans un Any, extraction, obtenir le TypeCode

– GestionnaireHolder : gestion du passage des paramètres en mode inout/out

• Stub : _GestionnaireStub

– envoie de requêtes

– invisible par le programmeur

– instancié automatiquement par GestionnaireHelper (narrow)

• Skeleton : GestionnairePOA

– reçoit et décode des requêtes

– doit être héritée par l’implantation

Page 28: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 29 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Hiérarchie en Java

org.omg.CORBA.portableObjectImpl<<Abstraite>>

_GestionnaireStub

étend

<<abstract>>

GestionnairePOA

org.omg.PortableServer.Servant

<<Interface>>

GestionnaireOperations

Implémente<<Interface>>

Gestionnaire

étend

Gestionnaire_Impl<<Interface>>

Org.omg.CORBA.Object

étend

Standard

À implémenter

Généré

étend

étend

Page 29: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 30 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

La projection client

FichierOMG-IDL

Cl_a Cl_b Cl_cstubsCompilationvers client

ex : IDL/C++

Référence d’objet

Requête

vers le bus

III. Corbamode statique

Page 30: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 32 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Extrait d’un stub

public String say_hello(String _ob_a0) { … if(!this._is_local()) { org.omg.CORBA.portable.OutputStream out = null; org.omg.CORBA.portable.InputStream in = null; try { out = _request(“say_hello", true); out.write_string(_ob_a0); in = _invoke(out); String _ob_r = in.read_string(); return _ob_r; }

Page 31: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 33 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

La projection serveur

FichierOMG-IDL

Impl_a Impl_b Impl_csquelettes

Compilationvers serveur

ex : IDL/JavaCl_a Cl_b Cl_c

Obj

Requête du bus

III. Corbamode statique

Page 32: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 35 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Extrait d’un squelette (HelloServicePOA)(I)

public org.omg.CORBA.portable.OutputStream invoke( String opName, org.omg.CORBA.portable.InputStream in,

org.omg.CORBA.portable.ResponseHandler handler) { final String[] _ob_names ={ "getClone", "hello"}; … switch(_ob_index) { case 0: // getClone return _OB_op_getClone(in, handler);

case 1: // hello return _OB_op_hello(in, handler); } throw new org.omg.CORBA.BAD_OPERATION(); }

Page 33: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 36 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Extrait d’un squelette (HelloServicePOA)(II)

private org.omg.CORBA.portable.OutputStream _OB_op_getClone(org.omg.CORBA.portable.InputStream in, org.omg.CORBA.portable.ResponseHandler

handler) { org.omg.CORBA.portable.OutputStream out = null; String _ob_a0 = in.read_string(); HelloService _ob_r = getClone(_ob_a0); out = handler.createReply(); HelloServiceHelper.write(out, _ob_r); return out; }

Page 34: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 37 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Noyau de communication

Interface d’Invocation Statique

Interface d’Invocation Dynamique

Interface du bus

SII DII ORB

SSI DSI

OA

Interface de Squelettes Statiques

Interface de Squelettes Dynamiques

Adaptateur d’objet

IR Référentieldes interfaces ImplR Référentiel

des implantations

CORBA : les composantes du bus - Invocations Dynamiques-

Page 35: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 39 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Permet la création dynamique de requêtes API (DII) sans passer par des souches pré-générées;

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

invokesend_deferred + get_response, poll_responsesend_oneway

wait

invoke

get_response

send-deferredsend_oneWay

Interface d'invocation dynamique (1)III. Corba

mode dynamique

Page 36: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 40 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Interface d'invocation dynamique (2)

Utilisation du référentiel des interfaces pour récupérer les informations relatives aux interfaces IDL;

Avantages :- les interfaces peuvent être découvertes dynamiquement;

- code client générique indépendant d'une interface IDL;.

III. Corbamode

dynamique

Page 37: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 42 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Interface de squelette dynamique

• Analogue au DII mais du côté serveur.

• Permet de délivrer une requête à un objet implémentation qui est inconnu lors de la phase de compilation

• Interprète une requête et ses paramètres.

• Utiliser pour créer des ponts entre des ORBs de vendeurs différents.

• Utiliser pour intégrer des applications existantes (legacy application). Les applications peuvent ne pas être conformes aux standard CORBA et peuvent également ne pas être OO.

4. CorbaComposants

Page 38: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 43 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Noyau de communication

Interface d’Invocation Statique

Interface d’Invocation Dynamique

Interface du bus

SII DII ORB

SSI DSI

OA

Interface de Squelettes Statiques

Interface de Squelettes Dynamiques

Adaptateur d’objet

IR Référentieldes interfaces ImplR Référentiel

des implantations

CORBA : les composantes du bus

Page 39: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 44 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Référentiel d’interfaces

Maintient les informations sur les types, les interfaces etc.....;

Un graphe d ’objets « concepts » d ’IDL : ModuleDef, InterfaceDef, OPerationDef, ..

Par navigation dans ce graphe ou à partir d’une référence d’objet, on peut retrouver le contenu d’une interface, la signature d’une opération, …

Informations pour une interface :• son module• son nom• ses attributs• ses opérations (nom, nom et types des paramètres,

exceptions, contexte)• ses héritages

III. CorbaRéférentiels

Page 40: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 47 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Object Adapter : fonctions

Fonctions des Adaptateurs d’objets:

1- Enregistrement des objets implémentation.

2- Génération et interprétation des références d'objets.

3- Activation et désactivation des objets implémentation.

4- Invocation des méthodes à travers les squelettes ou le DSI.

5- Participation à la sécurité

Intermédiaire entre le bus et les implantations possibles des objets

Proxy

Servant

POA

III. CorbaAdaptateur

Page 41: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 48 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Portable Object Adapter

Interfaces IDL définies dans le module PortableServer

• POA : Interface principale côté serveur-quels servants sont instanciés? -Activation/désactivation, -destruction des servants-Création de références, …

• POAManager-Contrôle du flot des requêtes vers plusieurs POAs

• Servantnative Servant;

• POA Policies (7 interfaces)

III. CorbaAdaptateur

Page 42: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 50 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

POA

« Pont entre les requêtes arrivant et les objets d’implémentation leur correspondant »

Un POA gère les relations entre les références d’objets, les identificateurs et les servants

Un serveur peut contenir plusieurs POAs

Un POA gère plusieurs servants, tous avec une même politique déterminée par ses « policies » (immuables).

Le RootPOA a un ensemble fixé de Policies, il est toujours présent.

Un servant est associé à un unique POA.

III. CorbaAdaptateur

Page 43: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 51 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

POA manager

• Associé à un POA lors de la création de ce dernier (il ne peut pas être changé)

Les états possibles d’un POA manager :

• Active : routage normale des requêtes

• Holding : Requêtes stockées

• Discarding : Requêtes rejetées avec TRANSIENT

• Inactive : Requêtes rejetées ; les clients peuvent être redirigés vers un serveur différent pour ré-essayer.

ORB POAPOA

ManagerRequête

Servants

Application serveurdispatch

III. CorbaAdaptateur

Page 44: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 53 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

POA Policies

Chaque POA a un ensemble de politiques.Lorsqu'un nouveau POA est créé, on peut utiliser les valeurs par défaut ou

les fixer selon les besoins.Un POA n'hérite pas des politiques de son père.

• LifespanPolicy (références transitoires ou persistantes)

• IdAssignmentPolicy (gestion de la clef)

• IdUniquenessPolicy (association servant et objets d’implémentation)

• ImplicitActivationPolicy (activation automatique ou non des servants)

• RequestProcessingPolicy (gestion ID-to-servant)

• ServantRetentionPolicy (gestion mémoire des servants)

• ThreadPolicy

III. CorbaAdaptateur

Page 45: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 55 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Root POA Policies

Life Span Policy TRANSIENT ( PERSISTANT)

ID Assignment Policy SYSTEM_ID ( USER_ID)

ID Uniqueness Policy UNIQUE_ID ( MULTIPLE_ID)

Servant Retention Policy RETAIN ( PERSISTANT)

Request Processing Policy USE_ACTIVE_OBJECT_MAP_ONLY ( USE_SERVANT_MANAGER )

Implicit Activation Policy IMPLICIT_ACTIVATION

Thread Policy ORB_CTRL_MODEL

III. CorbaAdaptateur

Page 46: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 58 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Interopérabilité

Capacité pour un ORB A d'invoquer une opération définieen IDL sur un objet résidant sur un ORB B.L'ORB A et B étant des implémentations de CORBA différentes.

III. CorbaInteropérabilité

Page 47: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 59 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Interopérabilité d’applications avec CORBA

Environnement X

Interopérabilité An A1 ...

Environnement Y

Bn B1 ...

Deux problèmes :1- communication d’applications distribuées au sein d’un même environnement;2- interopérabilité d’applications distribuées entre environnements hétérogènes.

Problème 1

Problème 2Communication

Problème 1

Communication

III. Corba

Page 48: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 60 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Environnement X

??...

ORB 1.2 vendeur x

Environnement Y

ORB 1.2 vendeur y

CORBA 1.2 permet de :

• résoudre le problème de communication d’applications distribuées au sein d’un même environnement;

A1

IDL

Binding

An

IDL

Binding

... B1

IDL

Binding

Bn

IDL

Binding

Problème 1 résolu

CommunicationProblème 1 résolu

CommunicationProblème 2

Portabilité d’applications avec CORBA1.2III. Corba

Interopérabilité

Page 49: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 61 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

CORBA 2.0 permet de résoudre le problème d’interopérabilité d’applications distribuées entre des environnements hétérogènes grâce au protocole de communication commun

GIOP (General Inter ORB Protocol).

Environnement X

...

ORB 2.0 vendeur x

Environnement Y

ORB 2.0 vendeur y

A1

IDL

Binding

An

IDL

Binding

... B1

IDL

Binding

Bn

IDL

Binding

GIOP

Interopérabilité

Problème 2 résolu

Interopérabilité d’application avec CORBA 2.0

III. CorbaInteropérabilité

Page 50: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 62 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

GIOP et IIOP

GIOP (General Inter-ORB Protocol) spécifie un ensemble de formats pour les messages ainsi qu'une représentation commune des données échangées entre les ORBs. La représentation des données communes est basée sur la spécification CDR (Common Data Representation).

IIOP (Internet Inter-ORB Protocol) est l'implémentation du protocole GIOP basé sur TCP/IP.

III. CorbaInteropérabilité

Page 51: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 63 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

IOR

IOR (Interoperable Object Reference) interface OMG IDL : repository IDadresse + port IPclé de format libre (identifie le POA et l’objet dans le POA)Spécifique à l’ORBpossède une forme externe diffusable

chaîne IOR : IOR: ….

III. Corba

Page 52: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 64 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Une suite de spécifications• Intégration de Java et l’Internet

– Passage par valeur (Corba 2.3)– Java to IDL : Interopérabilité des objets RMI(2.3) (RMI-IIOP)

– (Firewall specification) Mid-2001

– Interopérabilité et service de nommage (2.4)

• Amélioration de la qualité de service

– Asynchronous Messaging (2.4 fin 2000)

– Corba minimum pour les systèmes embarqués

– Temps réel,

• Modèle de composants, langage de script

CORBA 3.0III. Corba

Page 53: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 65 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

CORBA …

• Pas d’approche standard du déploiement – (connexion entre IMR et serveurs non standardisé) – Quels services sont disponibles sur le site de déploiement ?

• Pas de support des idioms de développement des serveurs CORBA– Comment « bootstrapper » les références? (naming, trader, …)– Mise en place de factories gérant le cycle de vie…

• Difficulté pour l’extension des fonctionnalités des objets.– Nécessité d’une construction par composition plutôt que par héritage

• Pas de gestion automatique du cycle de vie des objets.– Qui gère l’activation des objets? Pas de standard IMR…

Page 54: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 66 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

COMPOSANTS, besoins

• Des unités interchangeables– Spécification de ce qui est offert

– Spécification de ce qui est nécessaire

• Déploiement standardisé semi-automatique

• Génération de code pour la mise en œuvre de certains « services » (D.P.) (Factory, persistance, sécurité, …)

COTS, Tests, Fichier d’assemblage, ADL, …

Page 55: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 67 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

CORBA Component Model (CCM)

• Modèle de composants côté serveur, il étend le modèle Objet CORBA– Extensions IDLs (CIDL) , I.R. et ORB– Modèles : Services offerts, requis, puits, sources– Interfaces multiples d’un même composant

• Modèle de containeur– Proche des EJB et COM – Services offerts au client : Évènements, Transactions, Sécurité, persistance

• Modèle de « packaging » et déploiement

• Non limité à Java ou Windows : langage indépendant

Page 56: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 68 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

En cours, … MDA

Over the past decade or more, companies have endured a succession of middleware platforms.

Jon Siegel, OMG Director of Technology Transfer

I think the requirements for business software will continue to evolve faster than the technology solutions and that business developers will continue to have "programming"

jobs for the rest of my career.

Carol Burt, 2AB, Inc., and OMG Architecture Board Member

Page 57: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 69 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Références

Client/Server Programming with Java and CORBA - R. Orfali, D. Harkey John Wiley Sons 1997.

CORBA, ActiveX et Java Beans - J. M. Chauvet Eyrolles 1997.

Architecture J2EE, Architecture J2EE, Khin Chhoung LAO, Cnam.

Éléments fondamentaux des systèmes distribués, Karim Khelifi

Distributed Computing and Client-Server Systems, Prentice Hall - Amjad Umar .

Client/Server Computing - Byte Special Report, avril 95.

Systèmes d ’exploitation - Systèmes centralisés - Systèmes distribués, Prentice Hall - Andrew Tanenbaum, 1994

Enterprise JavaBeans Specifications JavaSoft (http://www.javasoft.com/ejb)

CORBA Specifications: Object Management Group (http://www.omg.org)

http://www.ooc.com/ob/training_download.html

Page 58: © 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis - 1 - CORBA : suite - Les services communs - Les composantes du bus

- 70 -© 2008, Mireille Fornarino, E.P.U. Nice-Sophia Antipolis

Références

Composants CORBA : http://umeet.uninet.edu/conferencias/acsdsevilla/ccm

CORBA Junction: IDL for CORBA 3.0, Extending the relationship between interfaces, http://www-106.ibm.com/developerworks/components/

Client-Serveur, Etude de cas: CORBA – OMG Portable Object Adapter; C. Toinard, ENSERB-3 ième année Informatique

Intégration des Systèmes Clients/Serveurs, André Freyssinet, HTTP://dyade.inrialpes.fr/~freyssin

Cours Technologie Internet: Modèles de programmation Jarle HULAAShttp://cui.unige.ch/tios/co rs/TechInternet.html

Model Driven Architecture by Richard Soley and the OMG Staff Strategy Group

Object Management Group, White Paper

Draft 3.2 – November 27, 2000