ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties...

102
ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle Projet Jacquard (INRIA et LIFL) http://www.lifl.fr/~merle

Transcript of ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties...

Page 1: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

ICAR’03

École d’été sur les Intergiciels etsur la Construction d’Applications Réparties

Etude de cas d’une application construite avec CCM

Philippe MerleProjet Jacquard (INRIA et LIFL)

http://www.lifl.fr/~merle

Page 2: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

2© 2003, P. Merle ICAR’03

L’application du dîner des philosophes

Thinking

HungryStarvin

gEatingDead

Kant

ThinkingHungryStarvingEatingDeadDescartes

ThinkingHungryStarvingEatingDead

Aristotle

Fork

Fork

Fork

Page 3: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

3© 2003, P. Merle ICAR’03

Node 2

L’application à l’exécution

Node 5

Node 1

Node 3 Node 4

Page 4: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

4© 2003, P. Merle ICAR’03

Plan

La conception des composants CORBA Notations : graphique, profile UML 1.x pour CCM et OMG IDL 3.0

L’utilisation des composants CORBA Projection OMG IDL 3.0 vers OMG IDL ; code client

Le développement des composants CORBA Notation OMG CIDL ; classes Java d’implantation

Le conditionnement et l’assemblage des composants CORBA Notation XML CCM ; exemples d’outils

Le déploiement, l’exécution et l’administration de l’application Démonstration sur la plate-forme OpenCCM

Conclusion

Page 5: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

5© 2003, P. Merle ICAR’03

La conception descomposants CORBA

Page 6: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

6© 2003, P. Merle ICAR’03

La conception des composants CORBA

Concevoir des composants CORBA = identifier les Types de composants et leurs ports

Interfaces et événements d’interaction (~ typage des ports)

Types de maisons de composants et leurs opérations

Types de données et exceptions utilitaires

Via une notation Graphique informelle

Profil UML 2.0 pour CCM (non existant)

Profil UML 1.x pour CCM (en cours de standardisation OMG)

OMG IDL 3.0 défini dans CORBA 3.0

Cependant une plate-forme CCM « classique » ne comprend que la notation OMG IDL 3.0

Toutefois OpenCCM compile aussi des fichiers XMI UML CCM

Page 7: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

7© 2003, P. Merle ICAR’03

Le dîner des philosophesnotation graphique informelle

Philosopher

name = Kant

Philosopher

name = Aristotle

Philosopher

name = Descartes

Fork

Fork

Fork

Composant

Interf. base

Facette

Réceptacle

Source évén.

Puit évén.

Observer

Page 8: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

8© 2003, P. Merle ICAR’03

Des outils pour la conceptiondes composants CORBA

ConcepteurComposant

Plate-forme CCM

OMG IDL 3.0

Atelier UMLRose, Poseidon, Objecteering

IDEEclipse, NetBeans

N’importe quel

éditeur de texte

XMI UML CCM

Page 9: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

9© 2003, P. Merle ICAR’03

L’atelier CadenaPlug-in Eclipse + OpenCCM

Page 10: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

10© 2003, P. Merle ICAR’03

L’atelier Objecteeringavec profil UML pour CCM

Développement LIFL dans projet RNTL ACCORD

Page 11: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

11© 2003, P. Merle ICAR’03

Le composant ForkManagernotation graphique informelle

InterfaceFork

Interfacede base

ComposantForkManager

facettethe_fork

Page 12: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

12© 2003, P. Merle ICAR’03

Le composant ForkManagernotation profil UML 1.x pour CCM

Page 13: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

13© 2003, P. Merle ICAR’03

Le composant ForkManagernotation OMG IDL 3.0

exception InUse {};

interface Fork{

void get() raises (InUse);void release();

};

// Le composant fourchette.component ForkManager{

// La facette fourchette utilisée par les philosophes.provides Fork the_fork;

};

ForkManager

Page 14: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

14© 2003, P. Merle ICAR’03

Le composant ForkManagernotation OMG IDL 3.0

exception InUse {};

interface Fork{

void get() raises (InUse);void release();

};

// Le composant fourchette.component ForkManager{

// La facette fourchette utilisée par les philosophes.provides Fork the_fork;

};

ForkManager

Page 15: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

15© 2003, P. Merle ICAR’03

Le composant ForkManagernotation OMG IDL 3.0

exception InUse {};

interface Fork{

void get() raises (InUse);void release();

};

// Le composant fourchette.component ForkManager{

// La facette fourchette utilisée par les philosophes.provides Fork the_fork;

};

ForkManager

Page 16: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

16© 2003, P. Merle ICAR’03

La maison de ForkManagerselon les 3 notations

// OMG IDL 3.0

home ForkHome manages ForkManager {};

ForkHome

ForkManager

Page 17: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

17© 2003, P. Merle ICAR’03

L’événement StatusInfonotations UML / CCM et OMG IDL 3.0

enum PhilosopherState { EATING, THINKING, HUNGRY, STARVING, DEAD};

eventtype StatusInfo { public string name; public PhilosopherState state; public unsigned long

ticks_since_last_meal; public boolean has_left_fork; public boolean has_right_fork;};

profil UML pour CCM OMG IDL 3.0

Page 18: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

18© 2003, P. Merle ICAR’03

Le composant Philosophernotation graphique informelle

ComposantPhilosopher

RéceptacleFork left

RéceptacleFork right

Attribut name

SourceStatusInfo info

Page 19: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

19© 2003, P. Merle ICAR’03

Le composant Philosophernotation profil UML 1.x pour CCM

Page 20: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

20© 2003, P. Merle ICAR’03

Le composant Philosophernotation OMG IDL 3.0

component Philosopher

{

attribute string name;

// La fourchette à gauche.

uses Fork left;

// La fouchette à droite.

uses Fork right;

// La source d’événements StatusInfo.

publishes StatusInfo info;

};

Philosopher

name = XXX

Page 21: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

21© 2003, P. Merle ICAR’03

Le composant Philosophernotation OMG IDL 3.0

component Philosopher

{

attribute string name;

// La fourchette à gauche.

uses Fork left;

// La fouchette à droite.

uses Fork right;

// La source d’événements StatusInfo.

publishes StatusInfo info;

};

Philosopher

name = XXX

Page 22: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

22© 2003, P. Merle ICAR’03

Le composant Philosophernotation OMG IDL 3.0

component Philosopher

{

attribute string name;

// La fourchette à gauche.

uses Fork left;

// La fouchette à droite.

uses Fork right;

// La source d’événements StatusInfo.

publishes StatusInfo info;

};

Philosopher

name = XXX

Page 23: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

23© 2003, P. Merle ICAR’03

Le composant Philosophernotation OMG IDL 3.0

component Philosopher

{

attribute string name;

// La fourchette à gauche.

uses Fork left;

// La fouchette à droite.

uses Fork right;

// La source d’événements StatusInfo.

publishes StatusInfo info;

};

Philosopher

name = XXX

Page 24: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

24© 2003, P. Merle ICAR’03

La maison de Philosopher selon les 3 notations

// OMG IDLhome PhilosopherHome manages Philosopher { factory new(in string name);};

PhilosopherHome

Philosopher

name = XXX

Page 25: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

25© 2003, P. Merle ICAR’03

Le composant Observernotation graphique informelle

ComposantObserver

Interfacede base

eventtypeStatusInfo

Puitinfo

Page 26: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

26© 2003, P. Merle ICAR’03

Le composant Observernotation profil UML 1.x pour CCM

Page 27: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

27© 2003, P. Merle ICAR’03

Le composant Observernotation OMG IDL 3.0

component Observer

{

// Le puit de réception de StatusInfo.

consumes StatusInfo info;

};

Observer

Page 28: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

28© 2003, P. Merle ICAR’03

Le composant Observernotation OMG IDL 3.0

component Observer

{

// Le puit de réception de StatusInfo.

consumes StatusInfo info;

};

Observer

Page 29: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

29© 2003, P. Merle ICAR’03

La maison de Observer selon les 3 notations

// OMG IDLhome ObserverHome manages Observer {};

Observer Home

Observer

Page 30: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

30© 2003, P. Merle ICAR’03

L’utilisation des composants CORBA

Page 31: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

31© 2003, P. Merle ICAR’03

L’utilisation des composants CORBA

« OMG IDL orienté composant » uniquement sucre syntaxique pour décrire les composants CORBA, projeté en OMG IDL 2.x

Chaque construction OMG IDL 3.0 a une équivalence en OMG IDL 2.x

Une seule projection spécifiée au lieu d’une par langages de programmation

Préservation des standards de projection OMG IDL 2.x langages

Les composants et maisons sont utilisés par les développeurs comme des objets CORBA étendus

Composants et maisons invoqués comme des objets CORBA

Applications clientes uniquement CORBA 2.x possible

Préservation des compétences des développeurs CORBA 2.x

Réutilisation des outils CORBA 2.x, e.g. générateurs de souches/squelettes

Page 32: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

32© 2003, P. Merle ICAR’03

Le projection OMG IDL 3.0vers OMG IDL 2.x

ConcepteurComposant

Code utilisateur

Compilateur

Code généré

OMG IDL 3.0Orienté

Composant

SoucheCliente

CompilateurOMG IDL 3.0

OMG IDL 2.xOrientéObjet

UtilisateurComposant

ApplicationCliente

Utilise

Implanté par

ORBComposant

Page 33: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

33© 2003, P. Merle ICAR’03

Les principales règles de projectionOMG IDL 3.0 vers OMG IDL

1 type de composants 1 interface héritant de Components::CCMObject

1 propriété 1 attribut

1 facette ou puits 1 opération fournissant la référence du port

1 réceptacle opérations de connexion, déconnexion et d’acquisition de la

(ou des) référence(s) associée(s)

1 source opérations de (dé)souscription aux événements produits

1 type de maisons 3 interfaces 1 pour opérations explicites du concepteur

+ héritage de Components::CCMHome 1 pour opérations implicites générées 1 héritant des 2 interfaces précédentes

1 type d’événements 1 type de valeurs + 1 interface Consumer héritant de Components::EventBase héritant de Components::EventConsumerBase

Page 34: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

34© 2003, P. Merle ICAR’03

La projection OMG IDLdu composant ForkManager

component ForkManager

{

provides Fork the_fork;

};

interface ForkManager :

::Components::CCMObject

{

Fork provide_the_fork();

};

Traduit en

ForkManager

Page 35: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

35© 2003, P. Merle ICAR’03

ForkHome

La projection OMG IDLde la maison ForkHome

home ForkHome

manages ForkManager {};

interface ForkHomeExplicit :

::Components::CCMHome {};

interface ForkHomeImplicit :

::Components::KeylessCCMHome {

ForkManager create();

};

interface ForkHome :

ForkHomeExplicit,

ForkHomeImplicit {};

ForkManager

Traduit en

Page 36: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

36© 2003, P. Merle ICAR’03

La projection OMG IDLde l’événement StatusInfo

eventtype StatusInfo { . . . };

valuetype StatusInfo : ::Components::EventBase { . . . };

interface StatusInfoConsumer : ::Components::EventConsumerBase { void push_StatusInfo(in StatusInfo the_StatusInfo);};

Traduit en

Page 37: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

37© 2003, P. Merle ICAR’03

La projection OMG IDLdu composant Observer

component Observer {

consumes StatusInfo info;

};

interface Observer :

::Components::CCMObject {

StatusInfoConsumer get_consumer_info();

};

Observer

Traduit en

Page 38: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

38© 2003, P. Merle ICAR’03

Observer Home

La projection OMG IDLde la maison ObserverHome

home ObserverHome manages Observer {};

interface ObserverHomeExplicit : ::Components::CCMHome {};interface ObserverHomeImplicit : ::Components::KeylessCCMHome {

Observer create();};

interface ObserverHome : ObserverHomeExplicit, ObserverHomeImplicit {};

ObserverTraduit en

Page 39: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

39© 2003, P. Merle ICAR’03

La projection OMG IDLdu composant Philosopher

component Philosopher {attribute string name;uses Fork left;uses Fork right;publishes StatusInfo info;

};

interface Philosopher : ::Components::CCMObject { attribute string name;

.../...

Philosopher

name = XXX

Traduit en

Page 40: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

40© 2003, P. Merle ICAR’03

La projection OMG IDLdu composant Philosopher

void connect_left(in Fork cnx) raises(…); Fork disconnect_left() raises(…); Fork get_connection_left();

void connect_right(in Fork cnx) raises (…); Fork disconnect_right() raises (…); Fork get_connection_right();

Components::Cookie subscribe_info( in StatusInfoConsumer consumer) raises(…);

StatusInfoConsumer unsubscribe_info( in Components::Cookie ck) raises(…);};

Traduit en

Philosopher

name = XXX

Page 41: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

41© 2003, P. Merle ICAR’03

La projection OMG IDLde la maison PhilosopherHome

home PhilosopherHomemanages Philosopher {

factory new(in string name);};

interface PhilosopherHomeExplicit : ::Components::CCMHome {

Philosopher new(in string name);};interface PhilosopherHomeImplicit : ::Components::KeylessCCMHome {

Philosopher create();};

interface PhilosopherHome : PhilosopherHomeExplicit, PhilosopherHomeImplicit {};

PhilosopherHome

Philosopher

name = XXX

Traduit en

Page 42: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

42© 2003, P. Merle ICAR’03

Le modèle de programmationdes clients

Deux canevas de conception Factory – Recherche une maison et l’utilise pour créer de nouvelles

instances de composant

Finder – Recherche instances de composant existantes via le service de Nommage, de Courtage ou via les opérations de recherche des maisons

Optionnellement démarcation des transactions begin, commit et rollback

Peut établir les crédits de sécurité

Invoque les opérations des instances de composant Celles définies par la projection vers OMG IDL

Client ne sait pas nécessairement qui interagit avec des composants

Page 43: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

43© 2003, P. Merle ICAR’03

L’utilisation de composants CORBA via OMG IDLscript

# Obtenir le service de recherche de maisons de composants.chf = CORBA.ORB.resolve_initial_references (“ComponentHomeFinder”)

# Rechercher une maison selon son type.forkHome = chf.find_home_by_type(ForkHome.id())

# Créer un composant fourchette.forkManager = forkHome.create()

# Obtenir la facette fourchette.fork = forkManager.provide_the_fork()

# Utiliser la facette fourchette.fork.get(). . . . . . .

fork.release()

Page 44: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

44© 2003, P. Merle ICAR’03

L’interconnexion de composants CORBA avec OMG IDLscript

# Obtenir les composants CORBA à interconnecter.

kant = Philosopher(“corbaname:…”)observer = Observer(“corbaname:…”)

# Connecter les composants kant et observer.ck = kant.subscribe_info(observer.get_consumer_info()). . . . . .

# Déconnecter les composants kant et observer.

kant.unsubscribe_info(ck)

Observer

Philosopher

name = Kant

Page 45: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

45© 2003, P. Merle ICAR’03

La navigation et l’introspectiondes composants CORBA

Navigation d’une facette vers le composant via opération CORBA::Object::get_component() Retourne la référence de base du composant ou nil si pas une facette

Navigation du composant vers les facettes et puits via les opérations introduites lors de la projection vers OMG IDL

Opérations génériques de navigation, de contrôle et d’introspection fournies par l’interface CCMObject provide_facet, get_[all|named]_facets, same_component connect, disconnect, get_connections, get_[all|

named]_receptacles get_consumer, get_[all|named]_consumers subscribe, unsubscribe, [dis]connect_consumer, get_[all|

named]_[emitters|publishers] get_all_ports, get_ccm_home, get_component_def, get_ccm_home,

get_primary_key

Au cœur de l’interconnexion des composants au déploiement et de l’administration des composants à l’exécution

Page 46: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

46© 2003, P. Merle ICAR’03

Le développement des

composants CORBA

Page 47: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

47© 2003, P. Merle ICAR’03

Le développement des composants CORBA

Décrire la structure d’implantation des composants Via OMG Component Implementation Definition Language (CIDL)

Compositions, segments et états persistants

Compiler les descriptions OMG CIDL Génération du code conteneur + squelette exécuteur

Implanter les composants et les maisons Héritage du code généré

Règles de programmation à respecter

Compiler le code utilisateur + le code généré

Page 48: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

48© 2003, P. Merle ICAR’03

La compilation OMG CIDL

ConcepteurComposant

OMG IDL3.0

LocalServer-sideOMG IDL

CodeComposant

ConteneurComposant

DéveloppeurComposant

hérité

Code utilisateur

Compilateur

Code généré

OMG CIDL

ConcepteurComposition

SqueletteComposant

Implantépartiellement

délègue

CompilateurOMG CIDL

includeimport

Page 49: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

49© 2003, P. Merle ICAR’03

L’implantation Javades composants

Héritage des squelettes OMG CIDL générés 1 classe par maison implantant

Opérations métiers explicites du concepteur 1 méthode de fabrique des implantations des segments 1 méthode statique point d’entrée pour le déploiement

1 classe par composant implantant Opérations métiers des facettes supportées 1 opération de réception des événements pour chaque puit supporté Surcharge des opérations de l’interface SessionComponent ou

EntityComponent

1 classe par segment implantant Opérations métiers des facettes supportées 1 opération de réception des événements pour chaque puit supporté

2 classes par événement Implantation concrète et fabrique

Page 50: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

50© 2003, P. Merle ICAR’03

L’interface SessionComponent

module Components { local interface EnterpriseComponent { void configuration_complete() raises(InvalidConfiguration); }; local interface SessionComponent : EnterpriseComponent { void set_session_context(in SessionContext ctx) raises(CCMException); void ccm_activate() raises(CCMException); void ccm_passivate() raises(CCMException); void ccm_remove() raises(CCMException);};};

Page 51: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

51© 2003, P. Merle ICAR’03

La composition OMG CIDLpour composant Observer

composition session ObserverComposition

{

home executor ObserverHomeBase

{

implements DiningPhilosophers::ObserverHome;

manages ObserverBase;

};

};

Page 52: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

52© 2003, P. Merle ICAR’03

La structure d’implantationdu composant Observer

ObserverHomeBase ObserverBase

ObserverImplObserverHomeImplinstancie

ObserverComposition

Page 53: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

53© 2003, P. Merle ICAR’03

L’implantation Javade la maison ObserverHome

public class ObserverHomeImpl extends ObserverComposition.ObserverHomeBase{ // Le constructeur. public ObserverHomeImpl() {}

// La fabrique des implantations de segments. public org.omg.Components.ExecutorSegmentBase create_executor_segment(int segid) { return new ObserverImpl(); }

// Le point d’entrée pour le déploiement. public static org.omg.Components.HomeExecutorBase create_home() { return new ObserverHomeImpl(); }}

Page 54: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

54© 2003, P. Merle ICAR’03

SessionContext

Le composant Observer

ObserverBaseObserverImpl

CCM_Observer_Executor

CCM_StatusInfoConsumerCCM_Observer_Context

Observer

StatusInfoConsumer

SessionComponent

Observer

Page 55: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

55© 2003, P. Merle ICAR’03

L’implantation Javadu composant Observer (1/2)

public class ObserverImpl extends ObserverComposition.ObserverBase{ // Attributs internes pour IHM.

// Le constructeur. public ObserverImpl() { ... }

// Pour interface CCM_StatusInfo_Consumer. public void push(StatusInfo event) { ... Mise à jour IHM ... }../..

Observer

Page 56: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

56© 2003, P. Merle ICAR’03

L’implantation Javadu composant Observer (2/2)

// Surcharge des opérations SessionComponent.

public void ccm_activate() throws org.omg.Components.CCMException { ... Afficher IHM ... }

public void ccm_passivate() throws org.omg.Components.CCMException { ... Cacher IHM ... }

public void ccm_remove () throws org.omg.Components.CCMException { ... Libérer les ressources IHM ... }}

Observer

Page 57: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

57© 2003, P. Merle ICAR’03

La composition OMG CIDLpour composant Philosopher

composition session PhilosopherComposition

{

home executor PhilosopherHomeBase

{

implements DiningPhilosophers::PhilosopherHome;

manages PhilosopherBase;

};

};

Page 58: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

58© 2003, P. Merle ICAR’03

La structure d’implantationdu composant Philosopher

PhilosopherHomeBase PhilosopherBase

PhilosopherImplPhilosopherHomeImplinstancie

PhilosopherComposition

Page 59: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

59© 2003, P. Merle ICAR’03

L’implantation Javade la maison PhilosopherHome

public class PhilosopherHomeImpl extends PhilosopherComposition.PhilosopherHomeBase{ // Le constructeur. public PhilosopherHomeImpl() {}

// Pour CCM_PhilosopherHome public org.omg.Components.EnterpriseComponent _new(String name) { return new PhilosopherImpl(name); }

// Fabrique des implantations de segments. public org.omg.Components.ExecutorSegmentBase create_executor_segment(int segid) { return new PhilosopherImpl(null); }

// Le point d'entrée pour le déploiement. public static org.omg.Components.HomeExecutorBase create_home() { return new PhilosopherHomeImpl(); }}

Page 60: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

60© 2003, P. Merle ICAR’03

Le composant Philosopher

PhilosopherBasePhilosopherImpl

CCM_Philosopher_Executor

CCM_Philosopher_Context

Philosopher

SessionComponent

SessionContext

Philosopher

name = XXX

Page 61: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

61© 2003, P. Merle ICAR’03

Les interfaces de l’exécuteurPhilosopher

local interface CCM_Philosopher_Executor : ::Components::EnterpriseComponent{ attribute string name;};local interface CCM_Philosopher_Context : ::Components::CCMContext{ // Obtenir la fourchette gauche actuellement connectée. Fork get_connection_left();

// Obtenir la fourchette droite actuellement connectée. Fork get_connection_right();

// Envoyer un événement à tous les puits connectés. void push_info(in StatusInfo ev);};

Philosopher

name = XXX

Page 62: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

62© 2003, P. Merle ICAR’03

L’implantation Javadu composant Philosopher (1/4)

public class PhilosopherImpl extends PhilosopherComposition.PhilosopherBase implements java.lang.Runnable{ // Attribut pour stocker le nom du philosophe. private String name_;

// Le constructeur. public PhilosopherImpl(String name) {name_=name;}

// Pour interface CCM_Philosopher_Executor. public String name() { return name_; } public void name(String n) { name_ = n; }

../..

Philosopher

name = XXX

Page 63: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

63© 2003, P. Merle ICAR’03

L’implantation Javadu composant Philosopher (2/4)

// Surcharge des opérations EnterpriseComponent.

public void configuration_complete() throws org.omg.Components.InvalidConfiguration { // Vérifier si la configuration est correcte. if( (name_ == null) || (get_context().get_connection_left()==null) || (get_context().get_connection_right()==null)) { throw new

org.omg.Components.InvalidConfiguration(); } }

Philosopher

name = XXX

Page 64: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

64© 2003, P. Merle ICAR’03

L’implantation Javadu composant Philosopher (3/4)

// Surcharge des opérations SessionComponent.

// L'activité associée au philosophe. private java.lang.Thread comportement_;

public void ccm_activate() throws org.omg.Components.CCMException { comportement_ = new Thread(this); comportement_.start(); }

public void ccm_remove() throws org.omg.Components.CCMException { comportement_.stop(); }

Philosopher

name = XXX

Page 65: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

65© 2003, P. Merle ICAR’03

L’implantation Javadu composant Philosopher (4/4)

// Le comportement du philosophe. public void run() { ... // Envoyer son état aux observateurs. get_context().push_info(new StatusInfoImpl(...)); ... // Prendre les fourchettes. get_context().get_connection_left().get(); get_context().get_connection_right().get(); ... // Rendre les fourchettes. get_context().get_connection_left().release(); get_context().get_connection_right().release(); ...} }

Philosopher

name = XXX

Page 66: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

66© 2003, P. Merle ICAR’03

La composition OMG CIDLpour composant ForkManager

composition session ForkComposition{ home executor ForkManagerHomeBase { implements DiningPhilosophers::ForkHome; manages ForkManagerBase { segment ForkSeg { provides facet the_fork; } }; };};

Page 67: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

67© 2003, P. Merle ICAR’03

La structure d’implantationdu composant Philosopher

ForkManagerHomeBase ForkManagerBase

ForkManagerImplForkHomeImpl

ForkComposition

ForkSeg

ForkSegImpl

<<CORBAInterface>>Fork

Page 68: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

68© 2003, P. Merle ICAR’03

L’implantation Javade la maison ForkHome

public class ForkHomeImpl extends ForkComposition.ForkManagerHomeBase{ // La fabrique d'implantation des segments. public org.omg.Components.ExecutorSegmentBase create_executor_segment(int segid) { switch (segid) { case 0: return new ForkManagerImpl(); case ForkSegImpl._segment_id_value: return new ForkSegImpl(); } }

// Le point d'entrée pour le déploiement. public static org.omg.Components.HomeExecutorBase create_home() { return new ForkHomeImpl(); }}

Page 69: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

69© 2003, P. Merle ICAR’03

Le composant ForkManager

ForkManagerImpl

CCM_ForkManager_Executor

CCM_ForkManager_Context

ForkManager

Fork

SessionComponent

ForkSegImplCCM_Fork

ForkManager

SessionContext

Page 70: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

70© 2003, P. Merle ICAR’03

L’implantation Javadu composant ForkManager (1/2)

public class ForkManagerImpl extends ForkComposition.ForkManagerBase{ // Le constructeur. public ForkManagerImpl() {}

// Surcharge des opérations SessionComponent. // e.g. ccm_activate, ccm_passivate, ccm_remove.}

ForkManager

Page 71: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

71© 2003, P. Merle ICAR’03

L’implantation Javadu composant ForkManager (2/2)

public class ForkSegImpl extends ForkComposition.ForkSeg{ private boolean disponible_ = true;

// Prendre la fourchette. public void get() throws InUse { if(!disponible_) throw new InUse(); disponible_ = false; }

// Rendre la fourchette. public void release() { disponible_ = true; }}

ForkManager

Page 72: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

72© 2003, P. Merle ICAR’03

L’implantation Javade l’événement StatusInfo (1/2)

public class StatusInfoImpl extends StatusInfo{ public StatusInfoImpl(PhilosopherState s, String n, int ticks, boolean left_fork, boolean right_fork) { state = s; name = n; ticks_since_last_meal = ticks; has_left_fork = left_fork; has_right_fork = right_fork; } public StatusInfoImpl() { this(PhilosopherState.DEAD, "", 0, false, false); }}

Page 73: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

73© 2003, P. Merle ICAR’03

L’implantation Javade l’événement StatusInfo (2/2)

public class StatusInfoFactory

implements org.omg.CORBA.portable.ValueFactory

{

// Lecture depuis un flux CORBA.

public java.io.Serializable

read_value(org.omg.CORBA_2_3.portable.InputStream in)

{

java.io.Serializable v = new StatusInfoImpl();

return in.read_value(v);

}

}

Page 74: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

74© 2003, P. Merle ICAR’03

Le conditionnement et l’assemblage des composants CORBA

Page 75: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

75© 2003, P. Merle ICAR’03

Le conditionnement et l’assemblage des composants CORBA

Construire des archives ZIP De composants contenant

XML Component Software Descriptor (.csd) XML CORBA Component Descriptors (.ccd) XML Component Property Files (.cpf) Fichiers OMG IDL + code binaires

D’assemblage contenant XML Component Assembly Descriptor (.cad) Archives de composants XML Component Property Files (.cpf)

Besoin d’outils de conditionnement et d’assemblage pour CCM Diverses approches et outils existent

Combinaison de différents outils possible

Page 76: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

76© 2003, P. Merle ICAR’03

Des outils de conditionnement et d’assemblage des composants CORBA

Conditionneur / AssembleurComposant

Plate-forme CCM

CCM XML + ZIP

Atelier UMLRose, Poseidon, Objecteering

Outil IHMMicoCCM, K2, OpenCCM

N’importe quel

éditeur de texte

Page 77: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

77© 2003, P. Merle ICAR’03

Software Package Descriptorpour Composant Observer

<?xml version="1.0"?>

<!DOCTYPE softpkg SYSTEM "softpkg.dtd">

<softpkg name="Observer" version="1,0,0,0">

<pkgtype>CORBA Component</pkgtype>

<title>Observer</title>

<author>

<name>Philippe Merle</name>

<company>INRIA</company>

<webpage href="http://www.inria.fr"/>

</author>

<description>The CCM dining philosophers example</description>

Page 78: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

78© 2003, P. Merle ICAR’03

Software Package Descriptorpour Composant Observer

<license href= "http://www.objectweb.org/license.html"/>

<idl id="IDL:DiningPhilosophers/Observer:1.0">

<link href="http://www.objectweb.org/philo.idl"/>

</idl>

<descriptor type="CORBA Component">

<fileinarchive name="observer.ccd"/>

</descriptor>

<propertyfile>

<fileinarchive name="observer.cpf"/>

</propertyfile>

<implementation> . . . </implementation>

</softpkg>

Page 79: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

79© 2003, P. Merle ICAR’03

Software Package Descriptorpour Composant Observer

<implementation id="Observer_impl">

<os name="WinNT" version="4,0,0,0"/>

<os name="Linux" version="2,2,17,0"/>

<processor name="x86"/>

<compiler name="JDK"/>

<programminglanguage name="Java"/>

<code type="Java class">

<fileinarchive name="ObserverHomeImpl.class"/>

<entrypoint>ObserverHomeImpl.create_home</entrypoint>

</code>

<runtime name="Java VM" version="1,2,2,0"/>

<runtime name="Java VM" version="1,3,0,0"/>

<dependency>...</dependency>

</implementation>

Page 80: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

80© 2003, P. Merle ICAR’03

Software Package Descriptorpour Composant Observer

<dependency type="ORB" action="assert"> <name>OpenORB</name> </dependency>

<dependency type="Java Class" action="install"> <valuetypefactory repid="IDL:DiningPhilosophers/StatusInfo:1.0"

valueentrypoint="DiningPhilosophers.StatusInfoDefaultFactory.create"

factoryentrypoint="DiningPhilosophers.StatusInfoDefaultFactory">

<fileinarchive name="DiningPhilosophers/StatusInfoDefaultFactory.class"/>

</valuetypefactory> </dependency>

Page 81: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

81© 2003, P. Merle ICAR’03

CORBA Component Descriptorpour Composant Philosopher

<?xml version="1.0"?><!DOCTYPE corbacomponent SYSTEM "corbacomponent.dtd">

<corbacomponent> <corbaversion>3.0</corbaversion> <componentrepid repid= "IDL:DiningPhilosophers/Philosopher:1.0"/> <homerepid repid= "IDL:DiningPhilosophers/PhilosopherHome:1.0"/> <componentkind> <process><servant lifetime="container" /></process> </componentkind> <security rightsfamily="CORBA“ rightscombinator="secanyrights" /> <threading policy="multithread" /> <configurationcomplete set="true" />

Page 82: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

82© 2003, P. Merle ICAR’03

CORBA Component Descriptorpour Composant Philosopher

<homefeatures name="PhilosopherHome" repid="IDL:DiningPhilosophers/PhilosopherHome:1.0"/> <componentfeatures name="Philosopher" repid="IDL:DiningPhilosophers/Philosopher:1.0"> <ports> <uses usesname="right" repid="IDL:DiningPhilosophers/Fork:1.0" /> <uses usesname="left" repid="IDL:DiningPhilosophers/Fork:1.0" /> <publishes emitsname="info" eventtype="StatusInfo"> <eventpolicy policy="normal" /> </publishes> </ports> </componentfeatures>

<interface name="Fork" repid="IDL:DiningPhilosophers/Fork:1.0"/>

Page 83: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

83© 2003, P. Merle ICAR’03

Property File pour Philosopher Kant

<?xml version="1.0"?>

<!DOCTYPE properties SYSTEM "properties.dtd">

<properties>

<simple name="name" type="string">

<description>Philosopher name</description>

<value>Kant</value>

<defaultvalue>Unknown</defaultvalue>

</simple>

</properties>

Page 84: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

84© 2003, P. Merle ICAR’03

L’assemblage des composantsdu dîner des philosophes

Philosopher

name = Kant

Philosopher

name = Aristotle

Philosopher

name = Descartes

Fork

Fork

Fork

Composant

Interf. base

Facette

Réceptacle

Source évén.

Puit évén.

Observer

Page 85: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

85© 2003, P. Merle ICAR’03

Component Assembly Descriptorpour dîner des philosophes

<?xml version="1.0"?><!DOCTYPE componentassembly SYSTEM

"componentassembly.dtd"><componentassembly id="demophilo"> <description>Dinner assembly descriptor</description> <componentfiles> <componentfile id="PhilosopherComponent"> <fileinarchive name="philosopher.csd"/> </componentfile> <componentfile id="ObserverComponent"> <fileinarchive name="observer.csd"/> </componentfile> <componentfile id="ForkManagerComponent"> <fileinarchive name="forkmanager.csd"/> </componentfile> </componentfiles>

Page 86: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

86© 2003, P. Merle ICAR’03

Component Assembly Descriptorpour dîner des philosophes

<partitioning>

<homeplacement id="ObserverHome">

<componentfileref idref="ObserverComponent"/>

<componentinstantiation id="Freud"/>

<registerwithnaming name="Dinner/ObserverComponent"/>

</homeplacement>

<homeplacement id="ForkHome">

<componentfileref idref="ForkManagerComponent"/>

<componentinstantiation id="ForkManager1"/>

<componentinstantiation id="ForkManager2"/>

<componentinstantiation id="ForkManager3"/>

<registerwithhomefinder name="ForkHome"/>

</homeplacement>

Page 87: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

87© 2003, P. Merle ICAR’03

Component Assembly Descriptorpour dîner des philosophes

<homeplacement id="PhilosopherHome"> <componentfileref idref="PhilosopherComponent"/>

<componentinstantiation id="Kant"> <componentproperties><fileinarchive name="Kant.cpf"/> </componentproperties></componentinstantiation>

<componentinstantiation id="Descartes"> <componentproperties><fileinarchive name="Descartes.cpf"/> </componentproperties></componentinstantiation>

<componentinstantiation id="Aristotle"> <componentproperties><fileinarchive name="Aristotle.cpf"/> </componentproperties></componentinstantiation>

</homeplacement></partitioning>

Page 88: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

88© 2003, P. Merle ICAR’03

Component Assembly Descriptorpour dîner des philosophes

<connections>

<connectinterface>

<usesport>

<usesidentifier>left</usesidentifier>

<componentinstantiationref idref="Kant"/>

</usesport>

<providesport>

<providesidentifier>the_fork</providesidentifier>

<componentinstantiationref idref="ForkManager1"/>

</providesport>

</connectinterface>

Philosopher

name = Kant

Fork

Page 89: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

89© 2003, P. Merle ICAR’03

Component Assembly Descriptorpour dîner des philosophes

<connectevent>

<publishesport>

<publishesidentifier>info</publishesidentifier>

<componentinstantiationref idref="Kant"/>

</publishesport>

<consumesport>

<consumesidentifier>info</consumesidentifier>

<componentinstantiationref idref="Freud"/>

</consumesport>

</connectevent>

Philosopher

name = Kant Observer

Page 90: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

90© 2003, P. Merle ICAR’03

L’outil de conditionnement et d’assemblage d’OpenCCM

Page 91: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

91© 2003, P. Merle ICAR’03

L’outil d’assemblage de MicoCCM

Page 92: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

92© 2003, P. Merle ICAR’03

L’outil d’assemblage de K2

Page 93: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

93© 2003, P. Merle ICAR’03

Le plug-in Rational Rosedu projet IST COACH

CORBA Component

CCM

Page 94: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

94© 2003, P. Merle ICAR’03

Le plug-in Rational Rosedu projet IST COACH

Philosophers_3

<<CORBAAssembly>>

o1 : Observer

philosopher_home : PhilosopherHome

p1 : Philosopher

i1 : Fork i6 : Fork

observerHome_plcmnt : ObserverHome

f3 : Cutlery

f1 : Cut lery

i2 : Fork

p2 : Philosopher

i5 : Fork

philosopher3 : Philosopher

i4 : Forki3 : Fork f2 : Cutlery

cutlery_home : CutleryHome

philosopher_state1 : PhilosopherState

philosopher_state2 : PhilosopherState

philosopher_s tat e3 : PhilosopherStat e

r1: right l1 : left

philosopher_st ate : philosopher_sta tef1 : fork f6 : fork

philosopher_state : philosopher_st...

philosopher_state : philosopher_st... philosopher_state : philosopher_st...

f2 : fork

l2 : left

philosopher_state : philosopher_st...

f5 : fork

r3 : right

philosopher_state : philosopher_st...l3 : leftr2 : right

f3 : fork f4 : fork

Page 95: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

95© 2003, P. Merle ICAR’03

Le plug-in Rational Rosedu projet IST COACH

Page 96: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

96© 2003, P. Merle ICAR’03

Le plug-in Rational Rosedu projet IST COACH

Fraunhofer Fokus

PLATIN

CORBA Component

Philosopher_S Philosopher_W

Philosopher_W

The Dining Philosopher Example

http://www.fokus.fraunhofer.de http://www.fokus.fraunhofer.de

Page 97: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

97© 2003, P. Merle ICAR’03

Le déploiement, l’exécution et l’administration de l’application

Page 98: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

98© 2003, P. Merle ICAR’03

Le déploiement, l’exécution et l’administration de l’application

Déploiement automatisé Lancement via un outil de déploiement

Exécution automatisée Lancement de démons à faire manuellement

1 domaine 1 CORBA Naming Service 1 CCM Assembly Factory

1 machine 1 CCM Server Activator 1 CCM Component Installation

Administration de l’application Des programmes clients ad hoc à l’application

Utilisation d’une console générique

Déployerle dîner desphilosophes

avecOpenCCM

Page 99: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

99© 2003, P. Merle ICAR’03

La console d’administration OpenCCM

Page 100: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

100

© 2003, P. Merle ICAR’03

Conclusion

Page 101: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

101

© 2003, P. Merle ICAR’03

Conclusion

Pas si compliqué si correctement expliqué (?)

Pas parfait mais puissant

Bonne source d’inspiration pour faire mieux ;-)

Page 102: ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle.

102

© 2003, P. Merle ICAR’03

Merci