La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Foutse Khomh © Guéhéneuc 2009; Khomh 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture.

Présentations similaires


Présentation au sujet: "Foutse Khomh © Guéhéneuc 2009; Khomh 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture."— Transcription de la présentation:

1 Foutse Khomh © Guéhéneuc 2009; Khomh 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture logicielle et conception avancée Cadres de référence et plugiciels

2 2/36 Plan 1. Introduction 2. Un exemple de plugiciel Eclipse Extensions 3. OSGi Architecture Gestion du cycle de vie Service denregistrement Environnement dexécution 4. Gestion du cycle de vie Gestion de besoin Architecture Implantation Test Suivi des problèmes Gestion des versions

3 3/36 1. Introduction Aujourdhui (et demain), les programmes –Sont de plus en plus complexes –Doivent être livrés de plus en plus rapidement –Doivent fonctionner avec un minimum darrêt

4 4/36 1. Introduction Les programmes nécessitent donc –Une plateforme de programmation favorisant lindépendance des composants –Un format de livraison « standardisé » –Une plateforme dexécution permettant le remplacement à chaud Les programmes doivent donc être formés de composants réutilisables et interchangeables en cours dexécution (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 7–11)

5 5/36 2. Definition: plugiciel « Un [plugiciel] est un programme qui interagit avec un logiciel principal, appelé programme hôte, pour lui apporter de nouvelles fonctionnalités » [Wikipedia] –ils ne peuvent fonctionner seuls car ils sont uniquement destinés à apporter une fonctionnalité à un ou plusieurs logiciels ; –ils sont mis au point par des personnes n'ayant pas nécessairement de relation avec les auteurs du logiciel principal.

6 6/36 2. Definition: plugiciel Lojectif derriere limplementation des plugiciels est de permettre: –Lajout des fonctionnalités sans avoir à tout reprogrammer –Permettre aux utilisateurs d'ajouter leurs propres fonctionnalités de manière indépendante Cette indépendance inclut la possibilité pour le logiciel principal d'évoluer tout en restant compatible avec les plugiciels existants ; cette condition est cependant loin d'être toujours remplie.

7 7/36 2. Chargement de plugiciel Dans les architectures statiques, la structure des plugiciel est définie avant le lancement du logiciel ( par exemple dans un fichier de configuration) Dans les architectures dynamique cest lapplication qui va elle même recenser les plugiciels présents, –Très souvent par examen de fichiers présents dans un répertoire dédié aux plugiciels. Exemple Eclipse. –Lajout et la suppression déléments dans le répertoire permet dactiver ou de désactiver les plugiciels correspondants. –Certaines applications permettent le démarrage et larrêt dun plugiciel pendant son fonctionnement. On parle alors de configuration à chaud ou hot-plug –Toutefois, ce type darchitecture devient vite complexe du fait des dépendances qui peuvent exister entre les plugiciels.

8 8/36 Un exemple de plugiciel Eclipse

9 9/36 Un exemple de plugiciel Extensions –Points dextension point d'ancrage dans plugins le provide des composants ressemble à la déclaration d'une interface, le plugiciel informe quil est ouvert à lajout de nouvelles fonctionnalités dune certaine façon mais description en XML précisant la grammaire que les meta-data des extensions doivent suivre –Extension greffon attaché à un point d'extension (déclaration de la nouvelle fonctionnalité dextension) le require des composants ressemble à une liaison entre une interface et une implémentation (description XML suivant la grammaire spécifiée par le point dextension)

10 10/36 Un exemple de plugiciel Extensions –Registre des extensions (Extension Registry) Match des points dextensions aux extensions Les plugiciel interrogent cette base pour connaître les extensions qui leurs sont proposées. –Chargement à la demande http://www-master.ufr-info-p6.jussieu.fr/2006/Ajouts/Master_esj_2006_2007/IMG/pdf/Eclipse-plugins-slides.pdf

11 11/36 Un exemple de plugiciel Extensions [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png]

12 12/36 Un exemple de plugiciel Illustration: –fonctionnement du point d'extension qui permet d'ajouter des pages de préférences dans la fenêtre des préférences d'Eclipse –Le plugiciel 'org.eclipse.ui', fourni par le framework Eclipse, définit un point d'extension nommé 'org.eclipse.ui.preferencePages'. –Le fichier 'preferencePages.exsd' contient la grammaire associée à ce point d'extension, en voici un extrait :

13 13/36 Illustration de points dextensions

14 14/36 Illustration de points dextensions –Cette grammaire définit un élément XML nommé 'page' qui possède quatre attributs : 'id', 'name', et 'class'. Pour l'attribut 'class', l'interface à implémenter est indiquée ('org.eclipse.ui.IWorkbenchPreferencePage') et dans ce cas précis une superclasse est aussi proposée ('org.eclipse.jface.preference.PreferencePage'). Les attributs 'id', 'name' et 'class' sont obligatoires.

15 15/36 Illustration de points dextensions Pour ajouter une page de préférences, un plugin doit donc définir, dans son fichier plugin.xml, une extension sur le point d'extension 'org.eclipse.ui.preferencePages, et une classe indiquée par class

16 16/36 Illustration de points dextensions package com.eclipsetotale.tutorial.pagepreference; import org.eclipse.jface.preference.PreferencePage;... public class TutorialPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); Color jaune = parent.getDisplay().getSystemColor(SWT.COLOR_YELLOW); composite.setBackground(jaune); return composite; } public void init(IWorkbench workbench) { } } Cette sous-classe de 'org.eclipse.jface.preference.PreferencePage' a pour responsabilité la gestion du contenu spécifique à la page de préférences ajoutée.

17 17/36 3. OSGi Considérons une classe java faisant partie dune application et implémentant une fonctionnalité. –Cette classe doit donc faire partie des.jar de lapplication. –En cas de bug dans cette classe, lapplication complète doit être arrêtée afin que celui-ci soit corrigé même sil naffecte quune sous- fonctionnalité très rarement utilisée. La technologie OSGi permet de développer les fonctionnalités de façon indépendantes et de les intégrées dans lapplication sous forme de services. Ces services peuvent être reliées dynamiquement à lapplication Un service particulier pouvant être arrêté et mis à jour sans que le reste de lapplication ne soit affecté.

18 18/36 3. OSGi OSGi (Open Service Gateway Initiative) a été fondé par Ericson, IBM, Oracle et Sun 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 indépendants [http://aneeshkumarkb.blogspot.com/]

19 19/36 OSGi Architecture –Bundles = composants –Services = publication, recherche et connexion dynamique dobjets Java –Life Cycle = gestion du cycle de vie des objets (démarrage, arrêt, mises à jours, installation,…) –Module = fonctions basiques de gestion (classloading, import, export,…) –Security = gestion des aspects de sécurité –Execution Environment = plateforme dexécution [http://www.osgi.org]

20 20/36 OSGi La spécification de OSGi définit comment les bundles (composants) doivent être implémentés afin dêtre intégrés à la plateforme OSGi. Elle se structure de la manière suivante: –Un ensemble de services quun conteneur OSGi doit implémenter (Exple de conteneur: Equinox dEclipse) –Un contrat entre le conteneur et les application

21 21/36 OSGi: Exemple Etape 1: Télécharger et sauvegarder un conteneur OSGi: Equinoxe par exemple dans C:/lab Etape 2: Créer la classe HelloOSGI.java suivante: package test.osgi.helloworld; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("Hello World"); } public void stop(BundleContext context) throws Exception { System.out.println("Bye Bye"); } } Cette classe est comme une classe main usuelle, la méthode start() est le point de démarrage du bundle (composant)

22 22/36 OSGi: Exemple Etape 3: Mettre à jour le path et compiler la classe # Set classpath=%classpath%;org.eclipse.osgi_3.4.0.v20080605- 1900.jar # javac -d. HelloOSGi.java Etape 4: Créer un fichier manifeste MANIFEST.MF contenant:

23 23/36 OSGi: Exemple MANIFEST.MF Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: HelloWorld OSGi Bundle-SymbolicName: test.osgi.HelloWorld Bundle-Version: 1.0.0 Bundle-Activator: test.osgi.helloworld.HelloOSGI Import-Package: org.osgi.framework

24 24/36 OSGi: Exemple Bundle-ManifestVersion: indique que le composant suit la spécification OSGi Bundle-Name: défini le nom du composant Bundle-SymbolicName: défini un nom de référencement pour le composant (ce nom sera utilisé par les autres composants) Bundle-Version: spécifie la version du composant Bundle-Activator: spécifie le nom de la classe listener à notifier des démarrages et arrêts du composant. Import-Package: définit les packages importés.

25 25/36 OSGi: Exemple Etape 5: Créer ensuite le fichier bundle-jar # jar -cvmf MANIFEST.MF HelloOSGi.jar -C test/* Etape 6: Démarrer le conteneur OSGi: #java -jar org.eclipse.osgi_3.4.0.v20080605-1900.jar -console Le prompt osgi> saffichera. Etape 7: Installer le bundle osgi> install file:/C:/lab/HelloOSGi.jar

26 26/36 OSGi: Exemple Etape 8: Puis démarrer le bundle (composant) osgi> start file:/C:/lab/HelloOSGi.jar Vous verrez « Hello World » simprimer dans la console, votre composant est prêt!

27 27/36 OSGi Architecture (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 12–21) Eclipse implemantion dOSGi –Equinox (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 22–26)

28 28/36 OSGi Services denregistrement (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 48–50) [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png]

29 29/36 OSGi Services denregistrement [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png]

30 30/36 OSGi Services denregistrement [http://www.eclipsezone.com/articles/extensions-vs-services/images/extensions.png] 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; }

31 31/36 Cycle de vie dun bundle OSGi

32 32/36 OSGi Collaborative model (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 41–51) Component model (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 52–58) Example (cf. « Cours 5 - Cadres de reference et plugiciels (JAOO06-OSGi_Tutorial).pdf », pages 27–40)

33 33/36 4. Gestion du cycle de vie Gestion de besoin Architecture Implantation Test Suivi des problèmes Gestion des versions

34 34/36 Répertoires composants un plugiciel

35 35/36 Répertoires composants un plugiciel

36 36/36 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


Télécharger ppt "Foutse Khomh © Guéhéneuc 2009; Khomh 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture."

Présentations similaires


Annonces Google