icar’03 École d’été sur les intergiciels et sur la construction d’applications réparties...
TRANSCRIPT
![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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/74.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/90.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/91.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/92.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/93.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/95.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/97.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/99.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/100.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/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: 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](https://reader036.vdocuments.mx/reader036/viewer/2022062318/551d9dcc497959293b8e4bc6/html5/thumbnails/102.jpg)
102
© 2003, P. Merle ICAR’03
Merci