LOG4430 : Architecture logicielle et conception avancée Yann-Gaël Guéhéneuc Cadres de référence et plugiciels Département de génie informatique et de génie logiciel École Polytechnique de Montréal Guéhéneuc, 2013
Plan 1. Introduction 2. Un exemple de plugiciel 3. OSGi Eclipse Extensions Architecture Gestion du cycle de vie Service d enregistrement Environnement d exécution 4. Gestion du cycle de vie Gestion de besoin Architecture Implantation Test Suivi des problèmes Gestion des versions 2/18
1. Introduction Aujourd hui (et demain), les programmes Sont de plus en plus complexes Doivent être livrés de plus en plus rapidement Doivent fonctionner avec un minimum d arrêt 3/18
Introduction Les programmes nécessitent donc Une plateforme de programmation favorisant l indépendance des composants du programme Un format de livraison «standardisé» Une plateforme d exécution permettant le remplacement à chaud Les programmes doivent donc être formés de composants réutilisables et interchangeables en cours d exécution 4/18
2. Un exemple de plugiciel «Un [plugiciel] est un programme qui interagit avec un logiciel principal, appelé programme hôte, pour lui apporter de nouvelles fonctionnalités» [Wikipedia] 5/18
Un exemple de plugiciel Eclipse 6/18
Un exemple de plugiciel Extensions Points d extension Extension Registre des extensions (Extension Registry) Chargement à la demande 7/18
Un exemple de plugiciel Extensions [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png] 8/18
3. OSGi Modèle à composants complet et dynamique Complémente la machine virtuelle Java Réduit la complexité : encapsulation, interface de programmation Réutilisation : composants depuis l étagère Déploiement simplifié : gestion du cycle de vie Mises à jour dynamiques : voir ci-dessus Adaptation : les services peuvent aller et venir Transparence : composants independants [http://aneeshkumarkb.blogspot.com/] 9/18
OSGi Eclipse implemantion d OSGi Equinox [http://aneeshkumarkb.blogspot.com/] 10/18
OSGi Architecture Bundles = composants Services = publication, recherche et connexion d objets Java Life Cycle = gestion du cycle de vie des objets Module = fonctions basiques de gestion Security = gestion des aspects de sécurité Execution Environment = plateforme d exécution [http://www.osgi.org] 11/18
OSGi Services 12/18
OSGi Services d enregistrement [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png] 13/18
OSGi Services d enregistrement [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png] 14/18
OSGi Services d enregistrement public void start(bundlecontext context) { // Create the service object DbCustomerLookup lookup = new DbCustomerLookup( "jdbc:mysql:localhost/customers"); } // Create the properties to register with the service Dictionary properties = new Hashtable(); properties.put("dbname", "local"); // Register the service context.registerservice( ICustomerLookup.class.getName(), lookup, properties); public void start(bundlecontext context) { this.context = context; } public String getcustomername(long id) { ServiceReference ref = context.getservicereference( ICustomerLookup.class.getName()); if(ref!= null) { ICustomerLookup lookup = (ICustomerLookup) context.getservice(ref); if(lookup!= null) { Customer cust = lookup.findbyid(id); context.ungetservice(ref); return cust.getname(); } } } // Couldn't get name -- service not available return null; [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png] 15/18
OSGi Environnement d exécution Modèle de collaboration 16/18
4. Gestion du cycle de vie Gestion de besoin Architecture Implantation Test Suivi des problèmes Gestion des versions 17/18
Gestion du cycle de vie Problème de la traçabilité Besoins conception Besoins code Besoins tests Besoins bogues Besoins versions Code tests Code bogues Code versions 18/18