SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
Lyon Java User Group




                                               OSGi


                                       Arnaud Cogoluègnes
                                               16/03/2010


Zenika © 2010                                               1
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
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
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
OSGi / couche module



       module          module
      DAO API          domaine




Zenika © 2010                    25
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
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
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
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
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
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
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
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
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
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
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
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
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
OSGi / couche service



           x                                               x
                         consomme
                                                  B
                                                                   x


                                        Service Registry
                publie




                   A                          x
                                                                       x
                                                           x   x
                                    x


Zenika © 2010                                                              39
OSGi / dm Kernel




Zenika © 2010      40
OSGi / dm Server




Zenika © 2010      41
OSGi / dm Server




Zenika © 2010      42
OSGi / Glassfish




Zenika © 2010      43
OSGi / Glassfish




Zenika © 2010      44
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
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
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
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
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
Test d'intégration avec Pax Exam




Zenika © 2010                      52
Test d'intégration avec Pax Exam




Zenika © 2010                      53
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
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
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
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
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
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
Agenda


   • Modularité
      • problématique
      • limitations de Java
   • OSGi
      • présentation
      • conteneur
      • couches OSGi
   • Développement OSGi
   • Questions/réponses




Zenika © 2010
Closing time




                     MERCI
                       DE
                VOTRE ATTENTION !
                       :-)



Zenika © 2010

Mais conteúdo relacionado

Destaque

Azure Data Aspectize
Azure Data AspectizeAzure Data Aspectize
Azure Data Aspectize
Fredy Fadel
 
Inscription des Pèlerins - JMJ Rio2013
Inscription des Pèlerins - JMJ Rio2013Inscription des Pèlerins - JMJ Rio2013
Inscription des Pèlerins - JMJ Rio2013
jmj_pt
 
Tice et lettres
Tice et lettresTice et lettres
Tice et lettres
imoiroux
 
L’exécution
L’exécutionL’exécution
L’exécution
larissa_dz
 
0.0 contenido del diplomado
0.0 contenido del diplomado0.0 contenido del diplomado
0.0 contenido del diplomado
Mario Duarte
 
Présentation mp2013 26 sept 2011
Présentation mp2013 26 sept 2011Présentation mp2013 26 sept 2011
Présentation mp2013 26 sept 2011
mjc2013
 
Los conflictos de la Globalización: Superpoblación y Pobreza
Los conflictos de la Globalización: Superpoblación y PobrezaLos conflictos de la Globalización: Superpoblación y Pobreza
Los conflictos de la Globalización: Superpoblación y Pobreza
Víctor Velezmoro-Montes
 
Essais nucléaires en polynésie
Essais nucléaires en polynésieEssais nucléaires en polynésie
Essais nucléaires en polynésie
gfonvieille
 

Destaque (20)

Suivi pollution-pm arve
Suivi pollution-pm arveSuivi pollution-pm arve
Suivi pollution-pm arve
 
Ecomouv : mise en place du dispositif de l'Eco-taxe Poids Lourds - 11/06/2013
Ecomouv : mise en place du dispositif de l'Eco-taxe Poids Lourds - 11/06/2013Ecomouv : mise en place du dispositif de l'Eco-taxe Poids Lourds - 11/06/2013
Ecomouv : mise en place du dispositif de l'Eco-taxe Poids Lourds - 11/06/2013
 
Atelier IE7 Stratégie multi canal : être efficace avec ses moyens en respecta...
Atelier IE7 Stratégie multi canal : être efficace avec ses moyens en respecta...Atelier IE7 Stratégie multi canal : être efficace avec ses moyens en respecta...
Atelier IE7 Stratégie multi canal : être efficace avec ses moyens en respecta...
 
Azure Data Aspectize
Azure Data AspectizeAzure Data Aspectize
Azure Data Aspectize
 
Le Trading Media
Le Trading MediaLe Trading Media
Le Trading Media
 
Inscription des Pèlerins - JMJ Rio2013
Inscription des Pèlerins - JMJ Rio2013Inscription des Pèlerins - JMJ Rio2013
Inscription des Pèlerins - JMJ Rio2013
 
Tice et lettres
Tice et lettresTice et lettres
Tice et lettres
 
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
 
L’exécution
L’exécutionL’exécution
L’exécution
 
Trabajo colaborativo
Trabajo colaborativoTrabajo colaborativo
Trabajo colaborativo
 
Plaquette Jura Education Tablette
Plaquette Jura Education TablettePlaquette Jura Education Tablette
Plaquette Jura Education Tablette
 
0.0 contenido del diplomado
0.0 contenido del diplomado0.0 contenido del diplomado
0.0 contenido del diplomado
 
Composants hardware du mainframe
Composants hardware du mainframeComposants hardware du mainframe
Composants hardware du mainframe
 
Présentation mp2013 26 sept 2011
Présentation mp2013 26 sept 2011Présentation mp2013 26 sept 2011
Présentation mp2013 26 sept 2011
 
Carla i Cristina G
Carla i Cristina GCarla i Cristina G
Carla i Cristina G
 
Los conflictos de la Globalización: Superpoblación y Pobreza
Los conflictos de la Globalización: Superpoblación y PobrezaLos conflictos de la Globalización: Superpoblación y Pobreza
Los conflictos de la Globalización: Superpoblación y Pobreza
 
Essais nucléaires en polynésie
Essais nucléaires en polynésieEssais nucléaires en polynésie
Essais nucléaires en polynésie
 
Le colibri des_matins_clairs
Le colibri des_matins_clairsLe colibri des_matins_clairs
Le colibri des_matins_clairs
 
SISTEMAS DE PARED PARA PLASMA
SISTEMAS DE PARED PARA PLASMASISTEMAS DE PARED PARA PLASMA
SISTEMAS DE PARED PARA PLASMA
 
Fórmulas para persuadir con tu página web
Fórmulas para persuadir con tu página webFórmulas para persuadir con tu página web
Fórmulas para persuadir con tu página web
 

Semelhante a 201003 OSGi

Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
Cyrille Le Clerc
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
OW2
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
Catherine Nuel
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
Guillaume Laforge
 
JUS 2011 - SALOME Roadmap 2012-2013
JUS 2011 - SALOME Roadmap 2012-2013JUS 2011 - SALOME Roadmap 2012-2013
JUS 2011 - SALOME Roadmap 2012-2013
OpenCascade
 

Semelhante a 201003 OSGi (20)

#1 Introduction
#1 Introduction#1 Introduction
#1 Introduction
 
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
cours_SOA_AO+FB_en_informatique_SOA_.pdf
cours_SOA_AO+FB_en_informatique_SOA_.pdfcours_SOA_AO+FB_en_informatique_SOA_.pdf
cours_SOA_AO+FB_en_informatique_SOA_.pdf
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
 
JavaFX et le JDK9
JavaFX et le JDK9JavaFX et le JDK9
JavaFX et le JDK9
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
 
Développement d'une forge logicielle avec OSGi
Développement d'une forge logicielle avec OSGiDéveloppement d'une forge logicielle avec OSGi
Développement d'une forge logicielle avec OSGi
 
Java EE, un ami qui vous veut du bien
Java EE, un ami qui vous veut du bienJava EE, un ami qui vous veut du bien
Java EE, un ami qui vous veut du bien
 
Le nouveau portail
Le nouveau portailLe nouveau portail
Le nouveau portail
 
L'offre Java As A Service Oracle
L'offre Java As A Service OracleL'offre Java As A Service Oracle
L'offre Java As A Service Oracle
 
Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiComposants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGi
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
 
Gradle_ToulouseJUG
Gradle_ToulouseJUGGradle_ToulouseJUG
Gradle_ToulouseJUG
 
Javaoop
JavaoopJavaoop
Javaoop
 
OpenDS - Open Source Java LDAP server
OpenDS - Open Source Java LDAP serverOpenDS - Open Source Java LDAP server
OpenDS - Open Source Java LDAP server
 
JUS 2011 - SALOME Roadmap 2012-2013
JUS 2011 - SALOME Roadmap 2012-2013JUS 2011 - SALOME Roadmap 2012-2013
JUS 2011 - SALOME Roadmap 2012-2013
 
Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9Du développement à la livraison avec JavaFX et le JDK9
Du développement à la livraison avec JavaFX et le JDK9
 
gradle_lavajug
gradle_lavajuggradle_lavajug
gradle_lavajug
 

Mais de lyonjug

201303 - Golo
201303 - Golo201303 - Golo
201303 - Golo
lyonjug
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
lyonjug
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
lyonjug
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4j
lyonjug
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQL
lyonjug
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guava
lyonjug
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojure
lyonjug
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draï
lyonjug
 

Mais de lyonjug (20)

DIY: Analyse statique en Java
DIY: Analyse statique en JavaDIY: Analyse statique en Java
DIY: Analyse statique en Java
 
Lightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - AnsibleLightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - Ansible
 
Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015
 
Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016
 
Presentation jug novembre2015
Presentation jug novembre2015Presentation jug novembre2015
Presentation jug novembre2015
 
201502 - Integration Testing
201502 - Integration Testing201502 - Integration Testing
201502 - Integration Testing
 
201311 - Middleware
201311 - Middleware201311 - Middleware
201311 - Middleware
 
201303 - Golo
201303 - Golo201303 - Golo
201303 - Golo
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4j
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQL
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guava
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojure
 
Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)
 
Spring Batch Workshop
Spring Batch WorkshopSpring Batch Workshop
Spring Batch Workshop
 
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
 
GlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitéGlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilité
 
Développement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha LaboureyDéveloppement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha Labourey
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draï
 

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
  • 40. OSGi / dm Kernel Zenika © 2010 40
  • 41. OSGi / dm Server Zenika © 2010 41
  • 42. OSGi / dm Server Zenika © 2010 42
  • 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
  • 52. Test d'intégration avec Pax Exam Zenika © 2010 52
  • 53. Test d'intégration avec Pax Exam Zenika © 2010 53
  • 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