etude de cas d’une application construite avec ccm
DESCRIPTION
JACQUARD. JACQUARD. Etude de cas d’une application construite avec CCM. Philippe Merle Projet Jacquard (INRIA et LIFL) http://www.lifl.fr/~merle. Fork. Fork. Fork. L’application du dîner des philosophes. Thinking Hungry Starving Eating Dead. Thinking Hungry Starving Eating Dead. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/1.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/2.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/3.jpg)
3© 2003, P. Merle ICAR’03
Node 2
L’application à l’exécution
Node 5
Node 1
Node 3 Node 4
![Page 4: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/4.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/5.jpg)
5© 2003, P. Merle ICAR’03
La conception descomposants CORBA
![Page 6: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/6.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/7.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/8.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/9.jpg)
9© 2003, P. Merle ICAR’03
L’atelier CadenaPlug-in Eclipse + OpenCCM
![Page 10: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/10.jpg)
10© 2003, P. Merle ICAR’03
L’atelier Objecteeringavec profil UML pour CCM
Développement LIFL dans projet RNTL ACCORD
![Page 11: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/11.jpg)
11© 2003, P. Merle ICAR’03
Le composant ForkManagernotation graphique informelle
InterfaceFork
Interfacede base
ComposantForkManager
facettethe_fork
![Page 12: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/12.jpg)
12© 2003, P. Merle ICAR’03
Le composant ForkManagernotation profil UML 1.x pour CCM
![Page 13: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/13.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/14.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/15.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/16.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/17.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/18.jpg)
18© 2003, P. Merle ICAR’03
Le composant Philosophernotation graphique informelle
ComposantPhilosopher
RéceptacleFork left
RéceptacleFork right
Attribut name
SourceStatusInfo info
![Page 19: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/19.jpg)
19© 2003, P. Merle ICAR’03
Le composant Philosophernotation profil UML 1.x pour CCM
![Page 20: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/20.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/21.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/22.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/23.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/24.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/25.jpg)
25© 2003, P. Merle ICAR’03
Le composant Observernotation graphique informelle
ComposantObserver
Interfacede base
eventtypeStatusInfo
Puitinfo
![Page 26: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/26.jpg)
26© 2003, P. Merle ICAR’03
Le composant Observernotation profil UML 1.x pour CCM
![Page 27: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/27.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/28.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/29.jpg)
29© 2003, P. Merle ICAR’03
La maison de Observer selon les 3 notations
// OMG IDLhome ObserverHome manages Observer {};
Observer Home
Observer
![Page 30: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/30.jpg)
30© 2003, P. Merle ICAR’03
L’utilisation des composants CORBA
![Page 31: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/31.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/32.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/33.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/34.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/35.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/36.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/37.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/38.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/39.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/40.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/41.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/42.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/43.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/44.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/45.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/46.jpg)
46© 2003, P. Merle ICAR’03
Le développement des
composants CORBA
![Page 47: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/47.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/48.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/49.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/50.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/51.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/52.jpg)
52© 2003, P. Merle ICAR’03
La structure d’implantationdu composant Observer
ObserverHomeBase ObserverBase
ObserverImplObserverHomeImplinstancie
ObserverComposition
![Page 53: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/53.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/54.jpg)
54© 2003, P. Merle ICAR’03
SessionContext
Le composant Observer
ObserverBaseObserverImpl
CCM_Observer_Executor
CCM_StatusInfoConsumerCCM_Observer_Context
Observer
StatusInfoConsumer
SessionComponent
Observer
![Page 55: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/55.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/56.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/57.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/58.jpg)
58© 2003, P. Merle ICAR’03
La structure d’implantationdu composant Philosopher
PhilosopherHomeBase PhilosopherBase
PhilosopherImplPhilosopherHomeImplinstancie
PhilosopherComposition
![Page 59: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/59.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/60.jpg)
60© 2003, P. Merle ICAR’03
Le composant Philosopher
PhilosopherBasePhilosopherImpl
CCM_Philosopher_Executor
CCM_Philosopher_Context
Philosopher
SessionComponent
SessionContext
Philosopher
name = XXX
![Page 61: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/61.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/62.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/63.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/64.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/65.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/66.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/67.jpg)
67© 2003, P. Merle ICAR’03
La structure d’implantationdu composant Philosopher
ForkManagerHomeBase ForkManagerBase
ForkManagerImplForkHomeImpl
ForkComposition
ForkSeg
ForkSegImpl
<<CORBAInterface>>Fork
![Page 68: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/68.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/69.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/70.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/71.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/72.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/73.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/74.jpg)
74© 2003, P. Merle ICAR’03
Le conditionnement et l’assemblage des composants CORBA
![Page 75: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/75.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/76.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/77.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/78.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/79.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/80.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/81.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/82.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/83.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/84.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/85.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/86.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/87.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/88.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/89.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/90.jpg)
90© 2003, P. Merle ICAR’03
L’outil de conditionnement et d’assemblage d’OpenCCM
![Page 91: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/91.jpg)
91© 2003, P. Merle ICAR’03
L’outil d’assemblage de MicoCCM
![Page 92: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/92.jpg)
92© 2003, P. Merle ICAR’03
L’outil d’assemblage de K2
![Page 93: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/93.jpg)
93© 2003, P. Merle ICAR’03
Le plug-in Rational Rosedu projet IST COACH
CORBA Component
CCM
![Page 94: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/94.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/95.jpg)
95© 2003, P. Merle ICAR’03
Le plug-in Rational Rosedu projet IST COACH
![Page 96: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/96.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/97.jpg)
97© 2003, P. Merle ICAR’03
Le déploiement, l’exécution et l’administration de l’application
![Page 98: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/98.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/99.jpg)
99© 2003, P. Merle ICAR’03
La console d’administration OpenCCM
![Page 100: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/100.jpg)
100
© 2003, P. Merle ICAR’03
Conclusion
![Page 101: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/101.jpg)
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: Etude de cas d’une application construite avec CCM](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814477550346895db110e5/html5/thumbnails/102.jpg)
102
© 2003, P. Merle ICAR’03
Merci