201003 OSGi
Transcript of 201003 OSGi
Zenika © 2010 1
Lyon Java User GroupLyon Java User Group
OSGi
Arnaud Cogoluègnes16/03/2010
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010
SpeakerSpeaker
• Arnaud Cogoluègnes• Consultant chez Zenika• Co-auteur :
Spring par la pratique
2nde édition
Spring Dynamic Modules in Action
Manning Editions
http://manning.com/cogoluegnes
A paraître mi 2010
acogoluegnes
Zenika © 2010 4
Objectifs de la présentationObjectifs de la présentation
• Démystifier OSGi• Quoi, quand, où, comment
• Car OSGi• Est de plus en plus présent
•cf. serveurs d'applications, ESB
• Est perçu comme complexe• Est une nébuleuse pour le néophyte
« Pourquoi je dois redémarrer Eclipse aprèsl'installation d'un plugin,OSGi c'est dynamique nan ? »
Un JUG leader anonyme
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 6
Modularité / problématique (1)Modularité / problématique (1)
• Décomposer un système en module• Bénéfices lors de l'implémentation• Bénéfices lors du déploiement
Zenika © 2010 7
Modularité / problématique (2)Modularité / problématique (2)
• Système embarqué• Fortement modulaire• ex. : besoin d'un nouveau composant
•Le rechercher•Compatible avec le système ? (dépendances, version)•L'installer à chaud
• Pas d'intervention humaine
Zenika © 2010 8
Modularité / problématique (3)Modularité / problématique (3)
• Application d'entreprise• Mise à jour des composants techniques, voire applicatifs• Découpage modulaire pour les applications d'envergure
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 10
Modularité / limitations de Java (1)Modularité / limitations de Java (1)
• Java• est un langage objet généraliste• n'a pas été orienté « modularité » dans sa conception
• Problème de visibilité, nuit à l'encapsulation• Modificateurs (private, public...) pour la POO, pas pour
découpage logique d'un système• Idem pour package
Zenika © 2010 11
Modularité / limitations de Java (2)Modularité / limitations de Java (2)
• Unité de déploiement simpliste : le JAR• Regroupement de fichier .class
• Un JAR n'est pas un module• Il n'est pas actif
Zenika © 2010 12
Modularité / limitations de Java (3)Modularité / limitations de Java (3)
• Class path par défaut a des limitations• Impossibilité de faire cohabiter plusieurs versions d'une même
classe• « Fusion » des JAR à l'exécution
•Alors que ce sont des unités de déploiement
• Coté dynamique• Difficulté pour recharger des classes à chaud
•Rien par défaut
• Déploiement à chaud limité, parfois hasardeux
Zenika © 2010 13
Modularité / effortsModularité / efforts
• Regain d'intérêt pour la modularité• Différents efforts
• JSRs (277, 291, 294)• HK2 (abstraction de OSGi)• Impala• OSGi
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 15
OSGi / présentation (modularité)OSGi / présentation (modularité)
• OSGi est un système modulaire• Diviser un système en un ensemble de modules• Règles de visibilité strictes• Résolution des dépendances d'un module• Gestion des versions
Zenika © 2010 16
OSGi / présentation (cycle de vie)OSGi / présentation (cycle de vie)
• OSGi est dynamique• Les modules peuvent être...
• Installés• Démarrés• Stoppés• Désinstallés• Mis à jour...
• … tout cela, à l'exécution
Zenika © 2010 17
OSGi / présentation (service)OSGi / présentation (service)
• OSGi est orienté service• Les modules peuvent
• Publier des services• Consommer des services
• Les services peuvent apparaître/disparaître dynamiquement• Selon l'état des modules
• Orchestration par le registre de services
Zenika © 2010 18
OSGi / une application modulariséeOSGi / une application modularisée
export package
moduledomaine
moduleDAO API
import package
moduleDAO impl
Service Registry
publie un DAO
consomme le DAO
moduleservice impl
Zenika © 2010 19
OSGi / présentationOSGi / présentation
• Le framework OSGi• 2 aspects
• Le conteneur OSGi• Les couches du modèle OSGi
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 21
OSGi / conteneurOSGi / conteneur
• Le conteneur est l'environnement d'exécution• Exécuté par la JVM• On parle aussi de plateforme OSGi
• Le conteneur OSGi gère• L'installation des modules• Leur cycle de vie• Les dépendances entre modules
•ex. : chargement des classes
• Implémentations Open Source• Eclipe Equinox• Apache Felix• Knopflerfish
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010 22
OSGi / démoOSGi / démo
• Démarrer Eclipse Equinox• Programme Java
• Utilisation de Pax Runner• Téléchargement des dépendances• Changement de conteneurs• Ajout de bibliothèques
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 24
OSGi / couche moduleOSGi / couche module
• Gère tous les aspects d'un module• Packaging
• JAR avec entrées supplémentaires MANIFEST.MF• Identification
• Nom, version...• Ce qu'un module
• Apporte en termes de packages Java• Voit en termes de packages Java
• Gère le chargement des classes pour chaque module• « wiring »
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010 25
OSGi / couche moduleOSGi / couche module
moduledomaine
moduleDAO API
Zenika © 2010 26
Serveur d'applications
Application Web
OSGi / déploiement Web « classique »OSGi / déploiement Web « classique »
WEB-INF/lib
WEB-INF/classes
WEB-INF/lib
Application Web
Hibernate3.2.6
Classes Java
WEB-INF/classes
Hibernate3.2.6
Classes Java
Zenika © 2010 27
Serveur d'applications
OSGi / librairies dans le serveurs d'app.OSGi / librairies dans le serveurs d'app.
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
Hibernate3.2.6
Zenika © 2010 28
Serveur d'applications
Application Web
OSGi / différentes versions embarquéesOSGi / différentes versions embarquées
WEB-INF/lib
WEB-INF/classes
WEB-INF/lib
Application Web
Hibernate3.3.0
Classes Java
WEB-INF/classes
Hibernate3.2.6
Classes Java
Zenika © 2010 29
Serveur d'applications
OSGi / versions incompatiblesOSGi / versions incompatibles
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
Hibernate3.2.6
Dépend de Hibernate 3.3.0Dépend de Hibernate 3.2.6
Zenika © 2010 30
Serveur d'applications
OSGi / tentative de résolutionOSGi / tentative de résolution
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
WEB-INF/lib
Application Web
Classes Java
WEB-INF/classes
Hibernate3.2.6
Hibernate3.3.0
Zenika © 2010 31
Conteneur OSGi
OSGi / Dépendances avec OSGiOSGi / Dépendances avec OSGi
WEB-INF/lib
Bundle Web
Classes Java
WEB-INF/classes
WEB-INF/lib
Bundle Web
Classes Java
WEB-INF/classes
Hibernate3.2.6
Zenika © 2010 32
Conteneur OSGi
OSGi / Cohabitation de plusieurs versions (1)OSGi / Cohabitation de plusieurs versions (1)
WEB-INF/lib
Bundle Web
Classes Java
WEB-INF/classes
WEB-INF/lib
Bundle Web
Classes Java
WEB-INF/classes
Hibernate3.2.6
Hibernate3.3.0
Zenika © 2010 33
OSGi / Cohabitation de plusieurs versions (2)OSGi / Cohabitation de plusieurs versions (2)
A1.0.0
B1.0.0
C1.2.0
D2.0.0
D3.0.0
Zenika © 2010 34
OSGi / démoOSGi / démo
• Installation de deux modules dans Equinox• Utilisation de Eclipse PDE• Analyse des packages exportés/importés
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010 35
OSGi / couche cycle de vieOSGi / couche cycle de vie
• Un bundle passe dans différents états• Le conteneur agit en conséquence
• Satisfaction des dépendances• « connection » avec les classes d'autres bundles• Expose les classes exportés• Lance des opérations
•Événements, callback
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
urit
é
Plateforme Java
OSGi
Zenika © 2010 36
OSGi / couche cycle de vieOSGi / couche cycle de vie
• Différents états d'un bundle
Résolu
Désintallé
InstalléEn cours de démarrage
Actif
En cours d’arrêt
arrê
t
dém
arra
ge
désinstallation
déin
stal
latio
n
résolution rafraichissementmis à jour
installation
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
uri
té
Plateforme Java
OSGi
Zenika © 2010 37
OSGi / démoOSGi / démo
• Ecriture d'un BundleActivator• Démarrage/arrêt du bundle• Rechargement à chaud
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
uri
té
Plateforme Java
OSGi
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
uri
té
Plateforme Java
OSGi
Zenika © 2010 38
OSGi / couche serviceOSGi / couche service
A
publie
Bconsomme
Service Registry
Introduit des dépendances entre modules - que fait B si A n'a pas encore publié le service ? - que fait B si A disparaît ?
Dynamique !A peut être mis à jour sans redémarrer BSélection/recherche des services très fine
MAIS...
Application
Système d’exploitation
Machine virtuelle Java
Cycle de vie
Services
Module
Sec
uri
té
Plateforme Java
OSGi
Zenika © 2010 39
OSGi / couche serviceOSGi / couche service
A
publie
Bconsomme
Service Registry
x
x
x
x
x
x
x
x
Zenika © 2010 40
OSGi / dm KernelOSGi / dm Kernel
Zenika © 2010 41
OSGi / dm ServerOSGi / dm Server
Zenika © 2010 42
OSGi / dm ServerOSGi / dm Server
Zenika © 2010 43
OSGi / GlassfishOSGi / Glassfish
Zenika © 2010 44
OSGi / GlassfishOSGi / Glassfish
Zenika © 2010 45
OSGi / couche serviceOSGi / couche service
• API pour intéraction avec l'environnement OSGi
• publication/consommation service, suivi des événements
• Peu envisageable
• pour un système d'envergure
• au jour le jour pour un développeur d'applications
• Frameworks avec approche déclarative
• Gestion de la publication/consommation des services
• Gestion de l'aspect dynamique
• Frameworks
• Declarative Services (standard OSGi)
• Blueprint Service (standard OSGi)
• iPOJO
• Spring Dynamic Modules
• Peaberry (Google Guice)
• Facilite une approche POJO
Zenika © 2010 46
OSGi / services déclaratifs avec Spring DMOSGi / services déclaratifs avec Spring DM
• Dans le module « accès aux données »
<bean id="clinic" class="org.springframework.petclinic.repository.jdbc.SimpleJdbcClinic" />
<osgi:service id="osgiClinic" ref="clinic" interface="org.springframework.petclinic.repository.Clinic" />
<osgi:reference id="clinic" interface="org.springframework.petclinic.repository.Clinic"/>
Bean Spring « classique »
Export du bean en tant que service OSGi
Consommation du Bean en tant que service OSGi
Devient un Bean Spring dans le module (injection de dépendances, etc.)
• Dans le module « service »
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010 48
Développement avec OSGiDéveloppement avec OSGi
• OSGi propose un modèle de programmation puissant• Mais plus complexe• Exemple avec l'aspect dynamique :
• On ne peut se contenter d'en « profiter »• Il faut le gérer (des services peuvent disparaître à tout
moment)
« Pourquoi je dois redémarrer Eclipse aprèsl'installation d'un plugin,OSGi c'est dynamique nan ? »
Un JUG leader anonyme
Zenika © 2010 49
Développement avec OSGiDéveloppement avec OSGi
• Bouleversement des habitudes de développement ?• Pas vraiment, une grande partie peut être conservée...
• Environnement de développement• Outil de build automatisé• Approche POJO• Tests d'intégration• Intégration continue
Zenika © 2010 50
Développement au jour le jourDéveloppement au jour le jour
• Modèle POJO possible• Utilisation d'un framework déclaratif• Pas de dépendances vers l'API OSGi
• Environnement de développement adapté• Eclipse PDE, SpringSource Tool Suite, IntelliJ IDEA• Mais pas obligatoire
• Une application OSGi peut être lancée de façon traditionnelle
Zenika © 2010 51
Test des applicationsTest des applications
• Tests unitaires sur des POJO• Pas de changement• Teste les fonctionnalités d'un module
• Tests d'intégration dans un conteneur léger• Lancer au sein du conteneur
• Frameworks basés sur JUnit :• Spring Dynamic Modules• Pax Exam
Zenika © 2010 52
Test d'intégration avec Pax ExamTest d'intégration avec Pax Exam
Zenika © 2010 53
Test d'intégration avec Pax ExamTest d'intégration avec Pax Exam
Zenika © 2010 54
PackagingPackaging
• Packaging• JAR standard• Mais comment enrichir le MANIFEST.MF ?
• Outils de packaging OSGi• Bnd• Bundlor
• Utilisable• En ligne de commande• Dans Eclipse• Plugin Ant• Plugin Maven
Zenika © 2010 55
Intégration continueIntégration continue
• Avec OSGi...• ...les tests automatisés utilisent des framework traditionnels• ...les outils de build populaires sont supportés
• Lancement des tests• Packaging
• L'intégration continue possible• Sans changer ses habitudes
Zenika © 2010 56
OSGi ? Attention !OSGi ? Attention !
• Savoir décomposer son système• Les équipes doivent être formées à la technologie• Utiliser des librairies compatibles OSGi
• Certaines librairies distribués en tant que bundle OSGi• Dépôts (Maven, Ivy) OSGi
• Les sujets délicats avec OSGi• Programmation Orientée Aspect• Mapping Objet/Relationnel
Zenika © 2010 57
Utiliser OSGi ?Utiliser OSGi ?
• OSGi est utilisé dans le middleware• Serveurs d'applications : Glassfish, JOnAS, Websphere...• ESB : ServiceMix, Mule, Project Fuji (Open ESB)
• Pourquoi le middleware aime OSGi• Beaucoup de librairies à gérer• Extentisibilité• Dynamique
Zenika © 2010 58
Utiliser OSGi ?Utiliser OSGi ?
• Encore peu utilisé dans les applications d'entreprises• Bénéfique pour les « gros » systèmes• La modularité est toujours bonne
• Renforcée par OSGi• Ne doit pas devenir un fardeau technologique
Zenika © 2010 59
OSGi dans l'entrepriseOSGi dans l'entreprise
• Des efforts pour intégrer OSGi avec les technologies d'entreprises
• Un aspect entreprise dans la spécification OSGi• Blueprint (RFC 124) : standardisation de Spring en OSGi• Distributed OSGi (RFC 119) : services OSGi en services Web• Transaction (RFC 98)
• Standardisation du support Web (RFC 66)• Spring Dynamic Modules propose un pont entre Spring et OSGi• Adresser des scénarios d'applications d'entreprises avec OSGi
• OSGi Enterprise Expert Group• Apache Aries• Eclipse Gemini (Oracle, SpringSource)
Zenika © 2010
AgendaAgenda
• Modularité• problématique• limitations de Java
• OSGi• présentation• conteneur• couches OSGi
• Développement OSGi• Questions/réponses
Zenika © 2010
Closing timeClosing time
MERCIDE
VOTRE ATTENTION !:-)