Mais conteúdo relacionado
Semelhante a 201003 OSGi (20)
201003 OSGi
- 1. Lyon Java User Group
OSGi
Arnaud Cogoluègnes
16/03/2010
Zenika © 2010 1
- 2. Agenda
• Modularité
• problématique
• limitations de Java
• OSGi
• présentation
• conteneur
• couches OSGi
• Développement OSGi
• Questions/réponses
Zenika © 2010
- 3. Speaker
• Arnaud Cogoluègnes
• Consultant chez Zenika
• Co-auteur :
Spring par la pratique Spring Dynamic Modules in Action
2nde édition Manning Editions
http://manning.com/cogoluegnes
A paraître mi 2010
acogoluegnes
Zenika © 2010
- 4. Objectifs 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ès
l'installation d'un plugin,
OSGi c'est dynamique nan ? »
Un JUG leader anonyme
Zenika © 2010 4
- 5. Agenda
• 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)
• Décomposer un système en module
• Bénéfices lors de l'implémentation
• Bénéfices lors du déploiement
Zenika © 2010 6
- 7. 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 7
- 8. Modularité / problématique (3)
• Application d'entreprise
• Mise à jour des composants techniques, voire applicatifs
• Découpage modulaire pour les applications d'envergure
Zenika © 2010 8
- 9. Agenda
• 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)
• 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 10
- 11. 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 11
- 12. 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 12
- 13. Modularité / efforts
• Regain d'intérêt pour la modularité
• Différents efforts
• JSRs (277, 291, 294)
• HK2 (abstraction de OSGi)
• Impala
• OSGi
Zenika © 2010 13
- 14. Agenda
• 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 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 15
- 16. 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 16
- 17. 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 17
- 18. OSGi / une application modularisée
module
service impl
consomme le DAO
Service Registry
publie un DAO
module
DAO impl
module
domaine
export package
module import package
DAO API
Zenika © 2010 18
- 19. OSGi / présentation
• Le framework OSGi
• 2 aspects
• Le conteneur OSGi
• Les couches du modèle OSGi
Application
Services
Securité
Cycle de vie
Module OSGi
Plateforme Java
Machine virtuelle Java
Système d’exploitation
Zenika © 2010 19
- 20. Agenda
• Modularité
• problématique
• limitations de Java
• OSGi
• présentation
• conteneur
• couches OSGi
• Développement OSGi
• Questions/réponses
Zenika © 2010
- 21. OSGi / conteneur
Application
Services
Securité
• Le conteneur est l'environnement d'exécution Cycle de vie
Module
• Exécuté par la JVM Machine virtuelle Java
Système d’exploitation
• 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
Zenika © 2010 21
- 22. OSGi / démo
Application
Services
Securité
• Démarrer Eclipse Equinox Cycle de vie
Module
• Programme Java Machine virtuelle Java
Système d’exploitation
• Utilisation de Pax Runner
• Téléchargement des dépendances
• Changement de conteneurs
• Ajout de bibliothèques
Zenika © 2010 22
- 23. Agenda
• Modularité
• problématique
• limitations de Java
• OSGi
• présentation
• conteneur
• couches OSGi
• Développement OSGi
• Questions/réponses
Zenika © 2010
- 24. OSGi / couche module
Application
Services
Securité
• Gère tous les aspects d'un module Cycle de vie
Module
• Packaging Machine virtuelle Java
Système d’exploitation
• 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 »
Zenika © 2010 24
- 25. OSGi / couche module
module module
DAO API domaine
Zenika © 2010 25
- 26. OSGi / déploiement Web « classique »
Serveur d'applications
Application Web Application Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate Hibernate
3.2.6 3.2.6
Zenika © 2010 26
- 27. OSGi / librairies dans le serveurs d'app.
Serveur d'applications
Application Web Application Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate
3.2.6
Zenika © 2010 27
- 28. OSGi / différentes versions embarquées
Serveur d'applications
Application Web Application Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate Hibernate
3.2.6 3.3.0
Zenika © 2010 28
- 29. OSGi / versions incompatibles
Serveur d'applications
Application Web Application Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Dépend de Hibernate 3.2.6 Dépend de Hibernate 3.3.0
Hibernate
3.2.6
Zenika © 2010 29
- 30. OSGi / tentative de résolution
Serveur d'applications
Application Web Application Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate
3.3.0
Hibernate
3.2.6
Zenika © 2010 30
- 31. OSGi / Dépendances avec OSGi
Conteneur OSGi
Bundle Web Bundle Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate
3.2.6
Zenika © 2010 31
- 32. OSGi / Cohabitation de plusieurs versions (1)
Conteneur OSGi
Bundle Web Bundle Web
WEB-INF/classes WEB-INF/classes
Classes Java Classes Java
WEB-INF/lib WEB-INF/lib
Hibernate Hibernate
3.2.6 3.3.0
Zenika © 2010 32
- 33. OSGi / Cohabitation de plusieurs versions (2)
B D
1.0.0 2.0.0
A
1.0.0
C D
1.2.0 3.0.0
Zenika © 2010 33
- 34. OSGi / démo
Application
Services
Securité
• Installation de deux modules dans Equinox Cycle de vie
Module O
• Utilisation de Eclipse PDE Machine virtuelle Java P
Système d’exploitation
• Analyse des packages exportés/importés
Zenika © 2010 34
- 35. OSGi / couche cycle de vie
Application
Services
Securité
• Un bundle passe dans différents états Cycle de vie
Module O
• Le conteneur agit en conséquence Machine virtuelle Java P
Système d’exploitation
• Satisfaction des dépendances
• « connection » avec les classes d'autres bundles
• Expose les classes exportés
• Lance des opérations
•Événements, callback
Zenika © 2010 35
- 36. OSGi / couche cycle de vie
Application
Services
Securité
• Différents états d'un bundle Cycle de vie
Module
Machine virtuelle Java
Système d’exploitation
installation
En cours de
Installé
démarrage
démarrage
rafraichissement
résolution
mis à jour
déinstallation
Résolu Actif
arrêt
désinstallation
Désintallé En cours d’arrêt
Zenika © 2010 36
- 37. OSGi / démo
Application
Services
Securité
• Ecriture d'un BundleActivator Cycle de vie
Module
• Démarrage/arrêt du bundle Machine virtuelle Java
Système d’exploitation
• Rechargement à chaud
Zenika © 2010 37
- 38. OSGi / couche service
Application
Services
Securité
Cycle de vie
Module
Machine virtuelle Java
consomme
B Système d’exploitation
Service Registry
publie Dynamique !
A peut être mis à jour sans redémarrer B
Sélection/recherche des services très fine
A
MAIS...
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 ?
Zenika © 2010 38
- 39. OSGi / couche service
x x
consomme
B
x
Service Registry
publie
A x
x
x x
x
Zenika © 2010 39
- 45. OSGi / 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 45
- 46. OSGi / services déclaratifs avec Spring DM
Bean Spring « classique »
• 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" />
Export du bean en tant Consommation du Bean
que service OSGi en tant que service OSGi
• Dans le module « service »
<osgi:reference id="clinic"
interface="org.springframework.petclinic.repository.Clinic"/>
Devient un Bean Spring
dans le module (injection
de dépendances, etc.)
Zenika © 2010 46
- 47. Agenda
• Modularité
• problématique
• limitations de Java
• OSGi
• présentation
• conteneur
• couches OSGi
• Développement OSGi
• Questions/réponses
Zenika © 2010
- 48. Dé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ès
l'installation d'un plugin,
OSGi c'est dynamique nan ? »
Un JUG leader anonyme
Zenika © 2010 48
- 49. Dé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 49
- 50. Dé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 50
- 51. Test 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 51
- 54. Packaging
• 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 54
- 55. Inté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 55
- 56. 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 56
- 57. 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 57
- 58. 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 58
- 59. OSGi 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 59
- 60. Agenda
• Modularité
• problématique
• limitations de Java
• OSGi
• présentation
• conteneur
• couches OSGi
• Développement OSGi
• Questions/réponses
Zenika © 2010
- 61. Closing time
MERCI
DE
VOTRE ATTENTION !
:-)
Zenika © 2010