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.

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
Licence pro MPCQ : Cours
Présentation de la circonscription Année 2011/2012 Jeudi 24 novembre 2011.
Additions soustractions
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
11 Bienvenue Entrez le nom du groupe ou projet ici mardi, 17 novembre 2009.
11 Welcome to Québec City! Name of your Group Tuesday, November 17, 2009.
Les numéros 70 –
Les numéros
Les identités remarquables
Le, la, les words Possessive Adjectives MINE!!. 2 My in french is mon, ma,mes... Le word/ begins with a vowel: Mon La word: Ma Les word: Mes.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Sirop de Liège « industriel »
Algorithme et structure de données
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
Correspondances en Onco-Urologie - Vol. III - n° 3 – juillet-août-septembre VESSIE Daprès James ND et al., N Engl J Med 2012;366:16:
Technologies et pédagogie actives en FGA. Plan de latelier 1.Introduction 2.Les technologies en éducation 3.iPads 4.TNI 5.Ordinateurs portables 6.Téléphones.
Nom du module Date Lieu de la formation. 2 Genèse du projet Historique, partenaires, publics Pour qui ? Pourquoi ? Qui ? Comment ? Quand ?
Enquête sur le Rapport de la Commission Bouchard-Taylor Jack Jedwab Directeur général Association détudes canadiennes 11 juin 2008.
Révision (p. 130, texte) Nombres (1-100).
La législation formation, les aides des pouvoirs publics
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
SERABEC Simulation sauvetage aérien avec un Hercule C130. Départ de St-Honoré le 4 octobre Durée de vol 3 heures. Premier vol en Hercule pour les.
La méthodologie………………………………………………………….. p3 Les résultats
Structure(djs)TéléphoneFax ADRA R049,96,03,21 CHLEF027,77,22,66 /77,49, LAGHOUAT029,90,41,08029,90,42,47 OUM EL BOUAGHI032,42,16,26032,42,45,32.
Jack Jedwab Association détudes canadiennes Le 27 septembre 2008 Sondage post-Olympique.
Jack Jedwab Directeur général Association détudes canadiennes Octobre 2011 Jack Jedwab Directeur général Association détudes canadiennes Octobre 2011 Est-ce.
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
Présentation générale
L’indicateur de développement humain
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Le drapeau canadien comme symbole de fierté nationale : une question de valeurs partagées Jack Jedwab Association détudes canadiennes 28 novembre 2012.
Le Concours de Conaissance Francais I novembre 2012.
Si le Diaporama ne s'ouvre pas en plein écran Faites F5 sur votre clavier.
Titre : Implémentation des éléments finis sous Matlab
Les nombres.
Les quartiers Villeray – La Petite-Patrie et les voisinages
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
LES NOMBRES PREMIERS ET COMPOSÉS
CLL11 : chlorambucil (CLB) versus CLB + rituximab (R)
Logiciel gratuit à télécharger à cette adresse :
Les chiffres & les nombres
RACINES CARREES Définition Développer avec la distributivité Produit 1
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Jean-Marc Léger Président Léger Marketing Léger Marketing Les élections présidentielles américaines.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Introduction au Langage C
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Les Nombres 0 – 100 en français.
Aire d’une figure par encadrement
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
Les fondements constitutionnels
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Extensible Container Model / OpenCCM Integration Demo1 exemple Questions pour l’intégration.
Le modèle de composants CORBA
Certains droits réservés pour plus d’infos, cliquer sur l’icône.
Nom:____________ Prénom: ___________
Annexe Résultats provinciaux comparés à la moyenne canadienne
La formation des maîtres et la manifestation de la compétence professionnelle à intégrer les technologies de l'information et des communications (TIC)
Transcription de la présentation:

ICAR’03 École d’été sur les Intergiciels et sur la Construction d’Applications Réparties Etude de cas d’une application construite avec CCM Philippe Merle Projet Jacquard (INRIA et LIFL)

2© 2003, P. Merle ICAR’03 L’application du dîner des philosophes Thinking Hungry Starving Eating Dead Kant Thinking Hungry Starving Eating Dead Descartes Thinking Hungry Starving Eating Dead Aristotle Fork

3© 2003, P. Merle ICAR’03 Node 2 L’application à l’exécution Node 5 Node 1 Node 3 Node 4

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

5© 2003, P. Merle ICAR’03 La conception des composants CORBA

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

7© 2003, P. Merle ICAR’03 Le dîner des philosophes notation graphique informelle Philosopher name = Kant Philosopher name = Aristotle Philosopher name = Descartes Fork Composant Interf. base Facette Réceptacle Source évén. Puit évén. Observer

8© 2003, P. Merle ICAR’03 Des outils pour la conception des composants CORBA Concepteur Composant Plate-forme CCM OMG IDL 3.0 Atelier UML Rose, Poseidon, Objecteering IDE Eclipse, NetBeans N’importe quel éditeur de texte XMI UML CCM

9© 2003, P. Merle ICAR’03 L’atelier Cadena Plug-in Eclipse + OpenCCM

10© 2003, P. Merle ICAR’03 L’atelier Objecteering avec profil UML pour CCM Développement LIFL dans projet RNTL ACCORD

11© 2003, P. Merle ICAR’03 Le composant ForkManager notation graphique informelle Interface Fork Interface de base Composant ForkManager facette the_fork

12© 2003, P. Merle ICAR’03 Le composant ForkManager notation profil UML 1.x pour CCM

13© 2003, P. Merle ICAR’03 Le composant ForkManager notation 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; }; Fork Manager

14© 2003, P. Merle ICAR’03 Le composant ForkManager notation 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; }; Fork Manager

15© 2003, P. Merle ICAR’03 Le composant ForkManager notation 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; }; Fork Manager

16© 2003, P. Merle ICAR’03 La maison de ForkManager selon les 3 notations // OMG IDL 3.0 home ForkHome manages ForkManager {}; ForkHome Fork Manager

17© 2003, P. Merle ICAR’03 L’événement StatusInfo notations 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 CCMOMG IDL 3.0

18© 2003, P. Merle ICAR’03 Le composant Philosopher notation graphique informelle Composant Philosopher Réceptacle Fork left Réceptacle Fork right Attribut name Source StatusInfo info

19© 2003, P. Merle ICAR’03 Le composant Philosopher notation profil UML 1.x pour CCM

20© 2003, P. Merle ICAR’03 Le composant Philosopher notation 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

21© 2003, P. Merle ICAR’03 Le composant Philosopher notation 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

22© 2003, P. Merle ICAR’03 Le composant Philosopher notation 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

23© 2003, P. Merle ICAR’03 Le composant Philosopher notation 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

24© 2003, P. Merle ICAR’03 La maison de Philosopher selon les 3 notations // OMG IDL home PhilosopherHome manages Philosopher { factory new(in string name); }; PhilosopherHome Philosopher name = XXX

25© 2003, P. Merle ICAR’03 Le composant Observer notation graphique informelle Composant Observer Interface de base eventtype StatusInfo Puit info

26© 2003, P. Merle ICAR’03 Le composant Observer notation profil UML 1.x pour CCM

27© 2003, P. Merle ICAR’03 Le composant Observer notation OMG IDL 3.0 component Observer { // Le puit de réception de StatusInfo. consumes StatusInfo info; }; Observer

28© 2003, P. Merle ICAR’03 Le composant Observer notation OMG IDL 3.0 component Observer { // Le puit de réception de StatusInfo. consumes StatusInfo info; }; Observer

29© 2003, P. Merle ICAR’03 La maison de Observer selon les 3 notations // OMG IDL home ObserverHome manages Observer {}; Observer Home Observer

30© 2003, P. Merle ICAR’03 L’utilisation des composants CORBA

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

32© 2003, P. Merle ICAR’03 Le projection OMG IDL 3.0 vers OMG IDL 2.x Concepteur Composant Code utilisateur Compilateur Code généré OMG IDL 3.0 Orienté Composant Souche Cliente Compilateur OMG IDL 3.0 OMG IDL 2.x Orienté Objet Utilisateur Composant Application Cliente Utilise Implanté par ORB Composant

33© 2003, P. Merle ICAR’03 Les principales règles de projection OMG 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

34© 2003, P. Merle ICAR’03 La projection OMG IDL du composant ForkManager component ForkManager { provides Fork the_fork; }; interface ForkManager : ::Components::CCMObject { Fork provide_the_fork(); }; Traduit en Fork Manager

35© 2003, P. Merle ICAR’03 ForkHome La projection OMG IDL de la maison ForkHome home ForkHome manages ForkManager {}; interface ForkHomeExplicit : ::Components::CCMHome {}; interface ForkHomeImplicit : ::Components::KeylessCCMHome { ForkManager create(); }; interface ForkHome : ForkHomeExplicit, ForkHomeImplicit {}; Fork Manager Traduit en

36© 2003, P. Merle ICAR’03 La projection OMG IDL de l’événement StatusInfo eventtype StatusInfo {... }; valuetype StatusInfo : ::Components::EventBase {... }; interface StatusInfoConsumer : ::Components::EventConsumerBase { void push_StatusInfo(in StatusInfo the_StatusInfo); }; Traduit en

37© 2003, P. Merle ICAR’03 La projection OMG IDL du composant Observer component Observer { consumes StatusInfo info; }; interface Observer : ::Components::CCMObject { StatusInfoConsumer get_consumer_info(); }; Observer Traduit en

38© 2003, P. Merle ICAR’03 Observer Home La projection OMG IDL de la maison ObserverHome home ObserverHome manages Observer {}; interface ObserverHomeExplicit : ::Components::CCMHome {}; interface ObserverHomeImplicit : ::Components::KeylessCCMHome { Observer create(); }; interface ObserverHome : ObserverHomeExplicit, ObserverHomeImplicit {}; Observer Traduit en

39© 2003, P. Merle ICAR’03 La projection OMG IDL du 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

40© 2003, P. Merle ICAR’03 La projection OMG IDL du 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

41© 2003, P. Merle ICAR’03 La projection OMG IDL de la maison PhilosopherHome home PhilosopherHome manages 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

42© 2003, P. Merle ICAR’03 Le modèle de programmation des 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

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

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

45© 2003, P. Merle ICAR’03 La navigation et l’introspection des 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 uprovide_facet, get_[all|named]_facets, same_component uconnect, disconnect, get_connections, get_[all|named]_receptacles uget_consumer, get_[all|named]_consumers usubscribe, unsubscribe, [dis]connect_consumer, get_[all|named]_[emitters|publishers] uget_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

46© 2003, P. Merle ICAR’03 Le développement des composants CORBA

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é

48© 2003, P. Merle ICAR’03 La compilation OMG CIDL Concepteur Composant OMG IDL 3.0 Local Server-side OMG IDL Code Composant Conteneur Composant Développeur Composant hérité Code utilisateur Compilateur Code généré OMG CIDL Concepteur Composition Squelette Composant Implanté partiellement délègue Compilateur OMG CIDL include import

49© 2003, P. Merle ICAR’03 L’implantation Java des 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

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

51© 2003, P. Merle ICAR’03 La composition OMG CIDL pour composant Observer composition session ObserverComposition { home executor ObserverHomeBase { implements DiningPhilosophers::ObserverHome; manages ObserverBase; };

52© 2003, P. Merle ICAR’03 La structure d’implantation du composant Observer ObserverHomeBaseObserverBase ObserverImplObserverHomeImpl instancie ObserverComposition

53© 2003, P. Merle ICAR’03 L’implantation Java de 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(); } }

54© 2003, P. Merle ICAR’03 SessionContext Le composant Observer ObserverBase ObserverImpl CCM_Observer_Executor CCM_StatusInfoConsumer CCM_Observer_Context Observer StatusInfoConsumer SessionComponent Observer

55© 2003, P. Merle ICAR’03 L’implantation Java du 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

56© 2003, P. Merle ICAR’03 L’implantation Java du 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

57© 2003, P. Merle ICAR’03 La composition OMG CIDL pour composant Philosopher composition session PhilosopherComposition { home executor PhilosopherHomeBase { implements DiningPhilosophers::PhilosopherHome; manages PhilosopherBase; };

58© 2003, P. Merle ICAR’03 La structure d’implantation du composant Philosopher PhilosopherHomeBasePhilosopherBase PhilosopherImplPhilosopherHomeImpl instancie PhilosopherComposition

59© 2003, P. Merle ICAR’03 L’implantation Java de 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(); } }

60© 2003, P. Merle ICAR’03 Le composant Philosopher PhilosopherBase PhilosopherImpl CCM_Philosopher_Executor CCM_Philosopher_Context Philosopher SessionComponent SessionContext Philosopher name = XXX

61© 2003, P. Merle ICAR’03 Les interfaces de l’exécuteur Philosopher 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

62© 2003, P. Merle ICAR’03 L’implantation Java du 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

63© 2003, P. Merle ICAR’03 L’implantation Java du 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

64© 2003, P. Merle ICAR’03 L’implantation Java du 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

65© 2003, P. Merle ICAR’03 L’implantation Java du 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

66© 2003, P. Merle ICAR’03 La composition OMG CIDL pour composant ForkManager composition session ForkComposition { home executor ForkManagerHomeBase { implements DiningPhilosophers::ForkHome; manages ForkManagerBase { segment ForkSeg { provides facet the_fork; } };

67© 2003, P. Merle ICAR’03 La structure d’implantation du composant Philosopher ForkManagerHomeBaseForkManagerBaseForkManagerImplForkHomeImpl ForkComposition ForkSegForkSegImpl > Fork

68© 2003, P. Merle ICAR’03 L’implantation Java de 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(); } }

69© 2003, P. Merle ICAR’03 Le composant ForkManager ForkManagerImpl CCM_ForkManager_Executor CCM_ForkManager_Context ForkManager Fork SessionComponent ForkSegImpl CCM_Fork Fork Manager SessionContext

70© 2003, P. Merle ICAR’03 L’implantation Java du 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. } Fork Manager

71© 2003, P. Merle ICAR’03 L’implantation Java du 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; } } Fork Manager

72© 2003, P. Merle ICAR’03 L’implantation Java de 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); } }

73© 2003, P. Merle ICAR’03 L’implantation Java de 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); }

74© 2003, P. Merle ICAR’03 Le conditionnement et l’assemblage des composants CORBA

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

76© 2003, P. Merle ICAR’03 Des outils de conditionnement et d’assemblage des composants CORBA Conditionneur / Assembleur Composant Plate-forme CCM CCM XML + ZIP Atelier UML Rose, Poseidon, Objecteering Outil IHM MicoCCM, K2, OpenCCM N’importe quel éditeur de texte

77© 2003, P. Merle ICAR’03 Software Package Descriptor pour Composant Observer CORBA Component Observer Philippe Merle INRIA The CCM dining philosophers example

78© 2003, P. Merle ICAR’03 Software Package Descriptor pour Composant Observer...

79© 2003, P. Merle ICAR’03 Software Package Descriptor pour Composant Observer ObserverHomeImpl.create_home...

80© 2003, P. Merle ICAR’03 Software Package Descriptor pour Composant Observer OpenORB <valuetypefactory repid="IDL:DiningPhilosophers/StatusInfo:1.0" valueentrypoint="DiningPhilosophers.StatusInfoDefaultFactory.create" factoryentrypoint="DiningPhilosophers.StatusInfoDefaultFactory"> <fileinarchive name="DiningPhilosophers/StatusInfoDefaultFactory.class"/>

81© 2003, P. Merle ICAR’03 CORBA Component Descriptor pour Composant Philosopher 3.0 <componentrepid repid= "IDL:DiningPhilosophers/Philosopher:1.0"/> <homerepid repid= "IDL:DiningPhilosophers/PhilosopherHome:1.0"/> <security rightsfamily="CORBA“ rightscombinator="secanyrights" />

82© 2003, P. Merle ICAR’03 CORBA Component Descriptor pour Composant Philosopher <homefeatures name="PhilosopherHome" repid="IDL:DiningPhilosophers/PhilosopherHome:1.0"/> <componentfeatures name="Philosopher" repid="IDL:DiningPhilosophers/Philosopher:1.0"> <uses usesname="right" repid="IDL:DiningPhilosophers/Fork:1.0" /> <uses usesname="left" repid="IDL:DiningPhilosophers/Fork:1.0" /> <publishes emitsname="info" eventtype="StatusInfo">

83© 2003, P. Merle ICAR’03 Property File pour Philosopher Kant Philosopher name Kant Unknown

84© 2003, P. Merle ICAR’03 L’assemblage des composants du dîner des philosophes Philosopher name = Kant Philosopher name = Aristotle Philosopher name = Descartes Fork Composant Interf. base Facette Réceptacle Source évén. Puit évén. Observer

85© 2003, P. Merle ICAR’03 Component Assembly Descriptor pour dîner des philosophes Dinner assembly descriptor

86© 2003, P. Merle ICAR’03 Component Assembly Descriptor pour dîner des philosophes

87© 2003, P. Merle ICAR’03 Component Assembly Descriptor pour dîner des philosophes

88© 2003, P. Merle ICAR’03 Component Assembly Descriptor pour dîner des philosophes left the_fork Philosopher name = Kant Fork

89© 2003, P. Merle ICAR’03 Component Assembly Descriptor pour dîner des philosophes info info Philosopher name = Kant Observer

90© 2003, P. Merle ICAR’03 L’outil de conditionnement et d’assemblage d’OpenCCM

91© 2003, P. Merle ICAR’03 L’outil d’assemblage de MicoCCM

92© 2003, P. Merle ICAR’03 L’outil d’assemblage de K2

93© 2003, P. Merle ICAR’03 Le plug-in Rational Rose du projet IST COACH

94© 2003, P. Merle ICAR’03 Le plug-in Rational Rose du projet IST COACH

95© 2003, P. Merle ICAR’03 Le plug-in Rational Rose du projet IST COACH

96© 2003, P. Merle ICAR’03 Le plug-in Rational Rose du projet IST COACH

97© 2003, P. Merle ICAR’03 Le déploiement, l’exécution et l’administration de l’application

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éployer le dîner des philosophes avec OpenCCM

99© 2003, P. Merle ICAR’03 La console d’administration OpenCCM

100© 2003, P. Merle ICAR’03 Conclusion

101© 2003, P. Merle ICAR’03 Conclusion Pas si compliqué si correctement expliqué (?) Pas parfait mais puissant Bonne source d’inspiration pour faire mieux ;-)

102© 2003, P. Merle ICAR’03 Merci