Présentation OSGI

4 315 vues

Publié le

OSGI Open Service Gateway Initiative fondé par Ericson , IBM,et Sun modéle à composants complet et dynamique

Publié dans : Technologie, Business
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
4 315
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
166
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Présentation OSGI

  1. 1. OSGi: Open Service Gateway Initiative <ul><li>Nasreddine ABBASSI </li></ul>
  2. 2. Plan <ul><li>Introduction </li></ul><ul><li>Un exemple de plugiciel </li></ul><ul><ul><ul><li>Eclipse </li></ul></ul></ul><ul><ul><ul><li>Extensions </li></ul></ul></ul><ul><li>OSGi </li></ul><ul><ul><ul><li>Architecture </li></ul></ul></ul><ul><ul><ul><li>Gestion du cycle de vie </li></ul></ul></ul><ul><ul><ul><li>Service d’enregistrement </li></ul></ul></ul><ul><ul><ul><li>Environnement d’exécution </li></ul></ul></ul><ul><li>Gestion du cycle de vie </li></ul><ul><ul><ul><li>Gestion de besoin </li></ul></ul></ul><ul><ul><ul><li>Architecture </li></ul></ul></ul><ul><ul><ul><li>Implantation </li></ul></ul></ul><ul><ul><ul><li>Test </li></ul></ul></ul><ul><ul><ul><li>Suivi des problèmes </li></ul></ul></ul><ul><ul><ul><li>Gestion des versions </li></ul></ul></ul>
  3. 3. 1. Introduction <ul><li>Aujourd’hui (et demain), les programmes </li></ul><ul><ul><li>Sont de plus en plus complexes </li></ul></ul><ul><ul><li>Doivent être livrés de plus en plus rapidement </li></ul></ul><ul><ul><li>Doivent fonctionner avec un minimum d’arrêt </li></ul></ul>
  4. 4. 1. Introduction <ul><li>Les programmes nécessitent donc </li></ul><ul><ul><li>Une plateforme de programmation favorisant l’indépendance des composants </li></ul></ul><ul><ul><li>Un format de livraison « standardisé » </li></ul></ul><ul><ul><li>Une plateforme d’exécution permettant le remplacement à chaud </li></ul></ul><ul><li>Les programmes doivent donc être formés de composants réutilisables et interchangeables en cours d’exécution </li></ul>
  5. 5. 2. Definition: plugiciel <ul><li>« Un [plugiciel] est un programme qui interagit avec un logiciel principal, appelé programme hôte, pour lui apporter de nouvelles fonctionnalités » [Wikipedia] </li></ul><ul><ul><li>ils ne peuvent fonctionner seuls car ils sont uniquement destinés à apporter une fonctionnalité à un ou plusieurs logiciels ; </li></ul></ul><ul><ul><li>ils sont mis au point par des personnes n'ayant pas nécessairement de relation avec les auteurs du logiciel principal. </li></ul></ul>
  6. 6. 2. Definition: plugiciel <ul><li>L’ojectif derriere l’implementation des plugiciels est de permettre: </li></ul><ul><ul><li>L’ajout des fonctionnalités sans avoir à tout reprogrammer </li></ul></ul><ul><ul><li>Permettre aux utilisateurs d'ajouter leurs propres fonctionnalités de manière indépendante </li></ul></ul><ul><li>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. </li></ul>
  7. 7. 2. Chargement de plugiciel <ul><li>Dans les architectures statiques, la structure des plugiciel est définie avant le lancement du logiciel ( par exemple dans un fichier de configuration) </li></ul><ul><li>Dans les architectures dynamique c’est l’application qui va elle même recenser les plugiciels présents, </li></ul><ul><ul><li>Très souvent par examen de fichiers présents dans un répertoire dédié aux plugiciels. Exemple Eclipse. </li></ul></ul><ul><ul><li>L’ajout et la suppression d’éléments dans le répertoire permet d’activer ou de désactiver les plugiciels correspondants. </li></ul></ul><ul><ul><li>Certaines applications permettent le démarrage et l’arrêt d’un plugiciel pendant son fonctionnement. On parle alors de configuration  à chaud  ou  hot-plug </li></ul></ul><ul><ul><li>Toutefois, ce type d’architecture devient vite complexe du fait des dépendances qui peuvent exister entre les plugiciels. </li></ul></ul>
  8. 8. Un exemple de plugiciel <ul><li>Eclipse </li></ul>
  9. 9. Un exemple de plugiciel <ul><li>Extensions </li></ul><ul><ul><li>Points d’extension </li></ul></ul><ul><ul><ul><li>point d'ancrage dans plugins </li></ul></ul></ul><ul><ul><ul><li>le “provide” des composants </li></ul></ul></ul><ul><ul><ul><li>ressemble à la déclaration d'une interface, le plugiciel informe qu’il est ouvert à l’ajout de nouvelles fonctionnalités d’une certaine façon </li></ul></ul></ul><ul><ul><ul><li>mais description en XML précisant la grammaire que les meta-data des extensions doivent suivre </li></ul></ul></ul><ul><ul><li>Extension </li></ul></ul><ul><ul><ul><li>greffon attaché à un point d'extension (déclaration de la nouvelle fonctionnalité d’extension) </li></ul></ul></ul><ul><ul><ul><li>le “require” des composants </li></ul></ul></ul><ul><ul><ul><li>ressemble à une liaison entre une interface et une implémentation (description XML suivant la grammaire spécifiée par le point d’extension) </li></ul></ul></ul>
  10. 10. Un exemple de plugiciel <ul><li>Extensions </li></ul><ul><ul><li>Registre des extensions ( Extension Registry ) </li></ul></ul><ul><ul><ul><li>Match des points d’extensions aux extensions </li></ul></ul></ul><ul><ul><ul><li>Les plugiciel interrogent cette base pour connaître les extensions qui leurs sont proposées. </li></ul></ul></ul><ul><ul><li>Chargement à la demande </li></ul></ul>http://www-master.ufr-info-p6.jussieu.fr/2006/Ajouts/Master_esj_2006_2007/IMG/pdf/Eclipse-plugins-slides.pdf
  11. 11. 3. OSGi <ul><li>Considérons une classe java faisant partie d’une application et implémentant une fonctionnalité. </li></ul><ul><ul><li>Cette classe doit donc faire partie des .jar de l’application. </li></ul></ul><ul><ul><li>En cas de bug dans cette classe, l’application complète doit être arrêtée afin que celui-ci soit corrigé même s’il n’affecte qu’une sous-fonctionnalité très rarement utilisée. </li></ul></ul><ul><li>La technologie OSGi permet de développer les fonctionnalités de façon indépendantes et de les intégrées dans l’application sous forme de services. </li></ul><ul><li>Ces services peuvent être reliées dynamiquement à l’application </li></ul><ul><li>Un service particulier pouvant être arrêté et mis à jour sans que le reste de l’application ne soit affecté. </li></ul>
  12. 12. 3. OSGi <ul><li>OSGi (Open Service Gateway Initiative) a é t é fond é par Ericson, IBM, Oracle et Sun </li></ul><ul><li>Modèle à composants complet et dynamique </li></ul><ul><ul><li>Complémente la machine virtuelle Java </li></ul></ul><ul><ul><li>Réduit la complexité : encapsulation, interface de programmation </li></ul></ul><ul><ul><li>Réutilisation : composants depuis l’étagère </li></ul></ul><ul><ul><li>Déploiement simplifié : gestion du cycle de vie </li></ul></ul><ul><ul><li>Mises à jour dynamiques : voir ci-dessus </li></ul></ul><ul><ul><li>Adaptation : les services peuvent aller et venir </li></ul></ul><ul><ul><li>Transparence : composants indépendants </li></ul></ul>[http://aneeshkumarkb.blogspot.com/]
  13. 13. OSGi <ul><li>Architecture </li></ul><ul><ul><li>Bundles = composants </li></ul></ul><ul><ul><li>Services = publication, recherche et connexion dynamique d’objets Java </li></ul></ul><ul><ul><li>Life Cycle = gestion du cycle de vie des objets (démarrage, arrêt, mises à jours, installation,…) </li></ul></ul><ul><ul><li>Module = fonctions basiques de gestion (classloading, import, export,…) </li></ul></ul><ul><ul><li>Security = gestion des aspects de sécurité </li></ul></ul><ul><ul><li>Execution Environment = plateforme d’exécution </li></ul></ul>[http://www.osgi.org]
  14. 14. OSGi <ul><li>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: </li></ul><ul><ul><li>Un ensemble de services qu’un conteneur OSGi doit implémenter (Exple de conteneur: Equinox d’Eclipse) </li></ul></ul><ul><ul><li>Un contrat entre le conteneur et les application </li></ul></ul>
  15. 15. OSGi dans une application domotique
  16. 16. OSGi dans une application domotique
  17. 17. OSGi dans une application domotique
  18. 18. OSGi dans une application domotique
  19. 19. OSGi: Exemple <ul><li>Etape 1: Télécharger et sauvegarder un conteneur OSGi: Equinoxe par exemple dans C:/lab </li></ul><ul><li>Etape 2: Créer la classe HelloOSGI.java suivante: </li></ul><ul><li>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(&quot;Hello World&quot;); } public void stop (BundleContext context) throws Exception { System.out.println(&quot;Bye Bye&quot;); } } </li></ul><ul><li>Cette classe est comme une classe main usuelle, la méthode start() est le point de démarrage du bundle (composant) </li></ul>
  20. 20. OSGi: Exemple <ul><li>Etape 3 : Mettre à jour le path et compiler la classe </li></ul><ul><li># Set classpath=%classpath%;org.eclipse.osgi_3.4.0.v20080605-1900.jar </li></ul><ul><li># javac -d . HelloOSGi.java </li></ul><ul><li>Etape 4 : Créer un fichier manifeste MANIFEST.MF contenant: </li></ul>
  21. 21. OSGi: Exemple <ul><li>MANIFEST.MF </li></ul><ul><li>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 </li></ul>
  22. 22. OSGi: Exemple <ul><li>Bundle-ManifestVersion: indique que le composant suit la spécification OSGi </li></ul><ul><li>Bundle-Name: défini le nom du composant </li></ul><ul><li>Bundle-SymbolicName: défini un nom de référencement pour le composant (ce nom sera utilisé par les autres composants) </li></ul><ul><li>Bundle-Version: spécifie la version du composant </li></ul><ul><li>Bundle-Activator: spécifie le nom de la classe listener à notifier des démarrages et arrêts du composant. </li></ul><ul><li>Import-Package: définit les packages importés. </li></ul>
  23. 23. OSGi: Exemple <ul><li>Etape 5 : Créer ensuite le fichier bundle-jar # jar -cvmf MANIFEST.MF HelloOSGi.jar -C test/* </li></ul><ul><li>Etape 6 : Démarrer le conteneur OSGi: </li></ul><ul><li>#java -jar org.eclipse.osgi_3.4.0.v20080605-1900.jar -console </li></ul><ul><li>Le prompt osgi> s’affichera. </li></ul><ul><li>Etape 7 : Installer le bundle </li></ul><ul><li>osgi> install file:/C:/lab/HelloOSGi.jar </li></ul>
  24. 24. OSGi: Exemple <ul><li>Etape 8 : Puis démarrer le bundle (composant) </li></ul><ul><li>osgi> start file:/C:/lab/HelloOSGi.jar </li></ul><ul><li>Vous verrez « Hello World » s’imprimer dans la console, votre composant est prêt!  </li></ul>
  25. 25. Cycle de vie d’un bundle OSGi
  26. 26. 4. Gestion du cycle de vie <ul><li>Gestion de besoin </li></ul><ul><li>Architecture </li></ul><ul><li>Implantation </li></ul><ul><li>Test </li></ul><ul><li>Suivi des problèmes </li></ul><ul><li>Gestion des versions </li></ul>
  27. 27. Gestion du cycle de vie <ul><li>Problème de la traçabilité </li></ul><ul><ul><li>Besoins – conception </li></ul></ul><ul><ul><li>Besoins – code </li></ul></ul><ul><ul><li>Besoins – tests </li></ul></ul><ul><ul><li>Besoins – bogues </li></ul></ul><ul><ul><li>Besoins – versions </li></ul></ul><ul><ul><li>Code – tests </li></ul></ul><ul><ul><li>Code – bogues </li></ul></ul><ul><ul><li>Code – versions </li></ul></ul>

×