SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
14 octobre 2008




                                                                                                            www.parisjug.org




                                                                                                                                                                           www.parisjug.org




Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
14 octobre 2008




                                                         OSGI



Cyrille Le Clerc
Nicolas Griso

                                            www.parisjug.org
Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
La modularité

  Caractéristiques d’un module ?

     Expose un contrat versionné

     Masque ses détails d’implémentation

     Décrit ses dépendances




                           www.xebia.fr / blog.xebia.fr   3
Pourquoi la modularité ?

     Limites du monolithique
      Windows Vista (50 M SLOC) est le dernier OS monolithique de Microsoft


     Réutilisation et émergence de stacks
      Middleware Java
         Serveur JavaEE, ESB/BPM, portail, télécoms,
         Consolidation de marché
         Maturité des briques et API de base


     « One size does NOT fit all ! »
      Profiles Java EE 6




                                    www.xebia.fr / blog.xebia.fr              4
La modularité en Java
L’existant
           Les jars
           Les classloaders hiérarchiques
           Maven 2
Le futur
           Java Module System
           OSGi




                                       www.xebia.fr / blog.xebia.fr
La modularité en Java
L’existant : les jars

   Module de base : le Jar

         Concept de build sans réalité au runtime

         Pas de gestion de version
           Une seule version d’un jar peut être chargée


         Pas d’intermédiaire de visibilité entre protected et public

         Pas de description des dépendances



                     Java s’est jusqu’à présent peu soucié du concept de module




                                            www.xebia.fr / blog.xebia.fr          6
La modularité en Java
L’existant : les classloaders hiérarchiques

      Les classloaders sont hiérarchiques et héritent de la
       visibilité du parent

      Visibilité globale dans un classloader

      Impossibilité de charger plusieurs version d’une classe
       dans un classloader

      Les packages ne sont pas contraints au runtime
       Deux classes d’un package peuvent provenir de jars différents




                                  www.xebia.fr / blog.xebia.fr         7
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                              rt.jar
          JVM Classloader                                               jce-provider.jar

                                                                       servlet-api-2.5.jar

     Servlet Engine ClassLoader                                       catalina-6.0.16.jar
                                                                    tomcat-dbcp-6.0.16.jar


                                                                      my-service-1.0.jar
                                                                       my-model-1.0.jar
       Web App ClassLoader
                                                                    hibernate-core-3.3.0.jar

                                                                          jdom-1.0.jar

                                  Web Application Classique
                                     www.xebia.fr / blog.xebia.fr                              8
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                               rt.jar
          JVM Classloader                                                jce-provider.jar

                                                                        servlet-api-2.5.jar

     Servlet Engine ClassLoader                                        catalina-6.0.16.jar
                                                                     tomcat-dbcp-6.0.16.jar



                                                 c
                                            a ve                       my-service-1.0.jar
                                       c ile AS
                                   iffi oss
                                  D B
                                      J                                 my-model-1.0.jar
       Web App ClassLoader
                                                                     hibernate-core-3.3.0.jar

                                                                           jdom-1.0.jar

                                      www.xebia.fr / blog.xebia.fr                              9
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                              rt.jar
          JVM Classloader                                               jce-provider.jar

                                                                       servlet-api-2.5.jar

     Servlet Engine ClassLoader                                       catalina-6.0.16.jar
                                                                    tomcat-dbcp-6.0.16.jar




                                                c
                                            a ve                      my-service-1.0.jar
                                       c ile here
                                   iffi bsp
                                  D e                                  my-model-1.0.jar
       Web App ClassLoader          W
                                                                    hibernate-core-3.3.0.jar

                                                                          jdom-1.0.jar

                                     www.xebia.fr / blog.xebia.fr                              10
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                             rt.jar
          JVM Classloader                                              jce-provider.jar

                                                                      servlet-api-2.5.jar

     Servlet Engine ClassLoader               g                      catalina-6.0.16.jar
                                        a gin
                                     ack at
                                   ep omc
                                  R T
                                                                   tomcat-dbcp-6.0.16.jar




                                                                     my-service-1.0.jar
                                                                      my-model-1.0.jar
       Web App ClassLoader
                                                                   hibernate-core-3.3.0.jar

                                                                         jdom-1.0.jar

                                    www.xebia.fr / blog.xebia.fr                              11
La modularité en Java
L’existant : les classloaders hiérarchiques

    JVM Classloader


     Servlet Engine                                                    Spring-2.5.jar
      ClassLoader

                                  my-service-1.0.jar
                                                                        Impossible
       Web App
                                  my-model-1.0.jar
      ClassLoader
                                      cxf-2.1.jar
                                                                      Spring-2.0.jar


                      Il est aujourd’hui impossible de charger deux versions
                      d’un même jar dans une web app !




                                       www.xebia.fr / blog.xebia.fr                     12
La modularité en Java
L’existant : maven 2

     Maven 2
      Versionnage des jar
      Description des dépendances
       <project xmlns=quot;http://maven.apache.org/POM/4.0.0quot;
       xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot;
       xsi:schemaLocation=quot;http://maven.apache.org/POM/4.0.0
       http://maven.apache.org/maven-v4_0_0.xsdquot;>
          <modelVersion>4.0.0</modelVersion>
          <name>My Service</name>
          <groupId>com.mycompany</groupId>                        version
          <artifactId>my-service</artifactId>
          <packaging>jar</packaging>
          <version>1.0</version>
          <dependencies>                                             dépendances
             <dependency>
                <groupId>com.mycompany</groupId>
                <artifactId>my-backend</artifactId>
                <version>1.0</version>
             </dependency>
           </dependencies>
       </project>




                                   www.xebia.fr / blog.xebia.fr                    13
La modularité en Java
L’existant : maven 2

           Les limitations
                 Dépendances explicites seulement au build (pas runtime)

                 Pas de visibilité bundle


           Les défis
                 Qualité des méta-données

                 Dépendances transitives

                 Conflits de versions

                 Dépendances par nom de bundle vs. par package



                                www.xebia.fr / blog.xebia.fr                14
La modularité en Java
Le futur : JSR 291 : Dynamic Component Support for Java SE

      OSGi rejoint le JCP

      OSGi
          Unité de travail : le bundle
          Gère la visibilité des bundles et leur dépendances, leur versionning
          Dynamique (cycle de vie des bundles géré au runtime)
          Orienté service
            »   Les bundles publient des services dynamiquement
            »   Recherche de services
            »   Bind
            »   Cycle de vie des services lié aux bundles qui les supportent




                                        www.xebia.fr / blog.xebia.fr              15
La modularité en Java
Le futur : JSR 277 – Java Module System

      Associé à JSR 294 - super packages

      Utilisation des annotations Java 5 pour décrire les
       dépendances et les version

   @Version(quot;1.0quot;)
   @ImportModules({
        @ImportModule(name=quot;com.mycompany.mybackendquot;, version=quot;1.0+quot;)
     })
   super package com.mycompany.myservice {
        export com.mycompany.myservice.*;
   }



                       Vive opposition des partisans d’OSGI



                               www.xebia.fr / blog.xebia.fr             16
OSGi Alliance
L’histoire
Le fonctionnement
OSGi Alliance et le JCP




                          www.xebia.fr / blog.xebia.fr
OSGi Alliance
L’histoire

      Consortium créé en 1999

      Objectifs initiaux : Java dans le monde embarqué (domotique,
       automobile, telco, etc)


      Membres : EDF, Siemens, BMW, Ericsson, Nokia, Motorola,
       Sprint, IBM, SpringSource, Sun, etc

      Date clefs
            »   1999 : l’embarqué et networked devices, la domotique, l’automobile
            »   2003 : les télécommunications
            »   2004 : virage open source (Eclipse)
            »   2006 : server side Java
      Besoin d’être léger et dynamique dès l’origine
            Besoin d’isolation des composants fournis par différents éditeurs


                                        www.xebia.fr / blog.xebia.fr                 18
OSGi Alliance
Le fonctionnement

      Les experts group
          Core platform EG
          Vehicle EG
          Mobile EG
          Entreprise EG
          Residential EG
      Entreprise Expert Group
          Gestion de la scalabilité (multi-conteneur, multi-processeurs)
          Ouverture à d’autres languages
          Distribué (SCA)
          Intégration à JavaEE
          Modèle de composants (Spring DM)




                                     www.xebia.fr / blog.xebia.fr           19
OSGi Alliance
OSGi et le JCP

      1999 : JSR 8 – OSGi specification => retirée en 1999

      2006 : JSR 291- Dynamic Component Support for JavaTM
       SE
          Spec Lead : IBM
          Craintes que le JCP n’ai qu’un rôle de validation du travail de l’OSGi
           Alliance
          Craintes du chevauchement avec JSR 277 – Java Module System


      2008 : Sun embauche Richard Hall (Apache Felix) =>
       intégration d’OSGi dans Glassfish




                                     www.xebia.fr / blog.xebia.fr                   20
OSGi Alliance
OSGi et le JCP

   Une communauté plus fermée que le JCP ?
                                  OSGi Alliance                     JCP
   Direction                      Partagée                          Exclusive Sun

   Membres                        Principalement des entreprises    Variés : entreprises,
                                                                    universitaires, individuels


   Spécifications release         Public                            Public

   Spécifications drafts          Membres payants                   Public

   TCK                            Membres payants                   Membres payants + OSS


   Reference Impl                 Membres payants                   Public

   Débats                         Confidentiels                     De plus en plus publics



               OSGi Alliance Full Membership : 20 k$/an
                                     www.xebia.fr / blog.xebia.fr                                 21
La plateforme OSGI
        Les bundles
        Le réseau de classloader




                               www.xebia.fr / blog.xebia.fr
La plateforme
Les bundles                                                     Les
                                                                    c
                                                                 du ontra
                                                                    Ma inte
                                                                      nife s
      Unité de déploiement sur la plateforme                             st
      Un simple jar
           Plus quelques entrées dans META-INF/MANIFEST.MF
      Peut être utilisé hors contexte OSGi

                                                                Description du bundle
   Déclaration des
    dépendances
   niveau package




  Déclaration des
    packages
     exportés




                                 www.xebia.fr / blog.xebia.fr                           23
La plateforme
Les bundles



      Le versionning
          major.minor.micro.qualifier
            » 3.4.0.v20080603-2000
          [version, version]
          (version, version)
          [version, version)




                                    www.xebia.fr / blog.xebia.fr   24
La Plateforme
Le réseau de ClassLoaders




   gui-grand-public-1.9
                               domaine-metier-1.3
    web-services-1.7                                           dao&cache-1.1
                               domaine-metier-1.2
    web-services-1.6




                                              Audit&logs-1.0


                  Exemple de graphe de modules


                             www.xebia.fr / blog.xebia.fr                      25
La Plateforme
Le réseau de Class Loaders


                                     Classloader                           domaine-metier-1.2
       web-services-1.6                 filtrant

        MANIFEST                                                             Audit&logs-1.0
        Import-package …

                                                                              MANIFEST
                                                                              Export-package : …


 Import−Package: demo.audit;version=1.0.0
                                                                 Export−Package: demo.audit;version=1.0.0




                                                           Seulement les classes de
                                                                demo.audit



                                            www.xebia.fr / blog.xebia.fr                                    26
La plateforme
Le conteneur


      Environnement d’exécution des bundles

      Standalone ou embarqué

      Gère le cycle de vie des bundles




                             www.xebia.fr / blog.xebia.fr   27
La plateforme
Le cycle de vie des bundles




                              www.xebia.fr / blog.xebia.fr   28
La plateforme
Le Service Registry


      Cœur du framework

      Gère les services. Permet de
          Publier des services
          Rechercher des services
          Binder des services


      Découplage entre services




                                     www.xebia.fr / blog.xebia.fr   29
Assemblage des services OSGI
BundleActivator et ServiceTracker



                                                            Gestion du cycle de vie du
                                                                     Bundle




                                                                           Enregistrement du
                                                                                service




                         Dé-enregistrement
                         implicite du service




                             www.xebia.fr / blog.xebia.fr                                      30
Assemblage des services OSGI
BundleActivator et ServiceTracker

         Le manifest sert à déclarer le Bundle-Activator


                                                          Déclaration de
                                                          l’Activator




                           www.xebia.fr / blog.xebia.fr                    31
Assemblage des services OSGI
BundleActivator et ServiceTracker

                                   Gestion du cycle de vie du
                                            Bundle



                                                                     Création du
                                                                    ServiceTracker




                                                                 Injection du
                                                                ServiceTracker



                                              Fermeture du
                                             ServiceTracker
                           www.xebia.fr / blog.xebia.fr                              32
Assemblage des services OSGI
BundleActivator et ServiceTracker
                                                           Injection du
                                                          ServiceTracker




                                                                 Résolution du service
                                                                  à chaque utilisation




                                                                              Gestion de
                                                                           l’indisponibilité




              Le ServiceTracker est intrusif sur le code !
                           www.xebia.fr / blog.xebia.fr                                        33
Assemblage des services OSGI
BundleActivator et ServiceTracker

   Enregistrement d’une servlet sur le HttpService
                                                          Surcharge des méthodes
                                                          addingService(…) et
                                                           removedService(…)




             ServiceTracker devient vite lourd à gérer !
                           www.xebia.fr / blog.xebia.fr                            34
Assemblage des services OSGI
BundleActivator et ServiceTracker

      Mécanisme de gestion des dépendances le plus stable et
       mature d’OSGi

      Très en retard par rapport aux mécanismes d’injection de
       dépendances Java actuels (EJB 3, Spring, Google Juice, etc)

      Contraint par les limites des Execution Environments
       OSGI ?




                              www.xebia.fr / blog.xebia.fr           35
Assemblage des services OSGI
Declarative Service

     Créé en 2005 (OSGI R4)
     Mis à jour via la RFC 134




                            www.xebia.fr / blog.xebia.fr   36
Assemblage des services OSGI
Declarative Service

     Semble peu utilisé

     Techniquement limité
        Ne gère pas les dépendances intra-bundles

     Remis en cause par RFC 124 (Spring DM)




                               www.xebia.fr / blog.xebia.fr   37
Assemblage des services OSGI
Spring DM

     En cours de standardisation pour OSGi R4.2
        RFC 124




                           www.xebia.fr / blog.xebia.fr   38
La plateforme
Les services

      Exemples
          Log Service
          Http Service
          Configuration Admin Service
          Preferences Service
          Event Admin Service


      Plus orientés embarqué / J2ME que informatique de gestion
       / Java 5+
          Fonctionnalités limitées
          Ex: HttpService ne gère ni les Filter ni les ServletContextListener




                                     www.xebia.fr / blog.xebia.fr                39
La plateforme
Les implémentations Open Source


      Eclipse Equinox
      Apache Felix
      Knopflerfish (maintenu par Makewave)
      ProSyst Open Source mBedded Server Equinox Edition
      Newton Project

      La liste complète
          http://www.osgi.org/Markets/HomePage




                                  www.xebia.fr / blog.xebia.fr   40
La plateforme
Les chantiers en cours

      Spécifiés dans le draft sur OSGi R4.2

      Ajout de services « Java EE »
          RFC 98: gestion des transaction via JTA et/ou XA
          RFC 119: OSGi distribué
            » Appel de services distants
      Nouveau modèle de composant
          En concurrence avec Declarative Service (OSGI R4 !)
          RFC 124 – « A Component Model for OSGi »
            » Standardisation de Spring DM




                                      www.xebia.fr / blog.xebia.fr   41
Demo OSGi
Description

      Un service dépend d’un backend
      Un service expose une servlet
      Les composants utilisent Log4j
      Upgrade à chaud du service




                           www.xebia.fr / blog.xebia.fr   42
Demo OSGi
Bundles & packages



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  43
Demo OSGi
Import d’un service



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  44
Demo OSGi
Exposition d’une servlet



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  45
Demo OSGi
Upgrade à chaud d’un bundle



                                 backend-service-1.0


                                backend-service-1.1
  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  46
Demo OSGi
Log4j !



                           backend-service-1.0


                             backend-service-1.1

  business-service-1.0
                                                                  log4j-1.2.13

                           javax.servlet.*-2.4

                                                                 log4j bundle fragment
                                                                                 Log4j.properties
                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                                      47
OSGi dans le monde Java EE
       Client side
       Server Side




                             www.xebia.fr / blog.xebia.fr
OSGi dans le monde Java EE
Client side

      Eclipse RCP
          1ère utilisation d’OSGi dans le monde Open Source
          Ajout de fonctionnalités propriétaires
            »   Eclipse-BuddyPolicy et Eclipse-RegisterBuddy
            »   Les Features
            »   La gestion des updates
            »   Les extensions
          Limitations
            Cycle de vie des plugins : On redémarre toujours Eclipse après avoir activé un
              plugin




                                      www.xebia.fr / blog.xebia.fr                           49
OSGi dans le monde Java EE
Server side – Middlewares
      Isolation middleware / application
      Isolation des composants du middleware (multi versions)
      Lifecycle (start, stop, install, uninstall)




                                               exports OSGi stricts
                                              pour éviter les conflits                        Logging
                                              avec les dépendances                            Service
         Mon Application                         des applications
                                                                                          High Availability
                                                                                              Service
            javax.servlet.*                                                   javax.**
                                    …                                                    Messaging Service
         javax.servlet.http.*                                                    …
                                                                                             JMS 1.1
            Servlet 2.4         Servlet 2.5            EJB 2.1                EJB 3.0       Tx Service
            Container           Container             Container              Container      JTA 1.0.1B

                                                      OSGI Container

                                                               JVM

                                              www.xebia.fr / blog.xebia.fr                                    50
OSGi dans le monde Java EE
Server side - Middlewares

      Websphere 6.1 (2006) est full-osgi
          Classloader OSGI pour isoler les applications du middleware
          Equinox est le conteneur de Websphere
          Tous les jars sont osgi-fiés (repository IBM)
          Compositions Application Server, ESB, Process Server, Portal, Telecom
           Server


      Weblogic 10 (2007) utilise OSGI
          Plusieurs jars sont osgi-fiés


      Glassfish
          Glassfish démarre sur Equinox et Knopflerfish




                                     www.xebia.fr / blog.xebia.fr                  51
OSGi dans le monde Java EE
Server side - Middlewares

      Service Mix 4
          Réécriture full OSGI / Spring DM de ServiceMix
          Service Mix Kernel est un enrichissement d’un conteneur OSGI
          Possibilité de déployer des médiations en packaging JBI ou OSGI


      Spring DM
          Propose OSGI en alternative à Java EE


      Autres acteurs Java EE : Jonas, JBoss



                            Ces projets utilisent-ils OSGI basic ?
                                     ServiceTracker ?

                                   www.xebia.fr / blog.xebia.fr              52
Bonnes pratiques OSGi
Les enjeux d’OSGi pour Java EE




                             www.xebia.fr / blog.xebia.fr
Bonnes pratiques

     Préférer Import-Package à Require-Bundle
     Utilisation des ranges de versions
     Bien designer ses bundles
         Prévoir le couplage de ses bundles
         Ne pas tout mettre dans un bundle
     Séparer les APIs exportées des implémentations
     Penser Orienté Service
     Gérer le cycle de vie des dépendances
         ServiceTracker, Spring DM, Declarative Service




                                  www.xebia.fr / blog.xebia.fr   54
Les enjeux d’OSGi pour Java EE

     L’utilisation d’anti-pattern OSGi
         Class.forName / Factory Pattern
         System.exit()


     Réutilisation des libraries existantes non-OSGi
         Repackaging et prolifération de repositories
           OSGi.org, Spring, Servicemix, IBM (privé), etc
         Modification du source code (http://www.dynamicjava.org/)
         Bytecode patching au runtime (knoplerfish)


     Gestion des meta données
         OSGi: Entrées dans le manifest
         Java Module System: annotations et nouvelle syntaxe java


                                     www.xebia.fr / blog.xebia.fr     55
Les enjeux d’OSGi pour Java EE


     Problématique cross-bundle
         AOP
         Sécurité
         Transaction


     Testabilité des bundles

     Packaging des applications
         Archive .par chez Spring
         Features chez eclipse




                                     www.xebia.fr / blog.xebia.fr   56
Conclusion

     Socle robuste et éprouvé

     Répond à des problématiques techniques complexes

     Manque de maturité dans le monde Java EE

     En pleine évolution pour les aspects Java EE




                            www.xebia.fr / blog.xebia.fr   57
Questions




            www.xebia.fr / blog.xebia.fr   58
Sponsors




  14/10/2008                                  OSGI                                                                   www.parisjug.org
               Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Merci de votre
   attention!


                                                                                                                                                                   www.parisjug.org




Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Licence




  http://creativecommons.org/licenses/by-nc-sa/2.0/fr/




   14/10/2008                                    OSGI                                                                   www.parisjug.org
                  Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Mais conteúdo relacionado

Destaque

L’édition Numérique, CNAM, Déc 2007
L’édition Numérique,  CNAM, Déc 2007L’édition Numérique,  CNAM, Déc 2007
L’édition Numérique, CNAM, Déc 2007Constance Krebs
 
Information Systems Project Management - Understanding & Defining The Project
Information Systems Project Management - Understanding & Defining The ProjectInformation Systems Project Management - Understanding & Defining The Project
Information Systems Project Management - Understanding & Defining The ProjectJose Manuel Sandria
 
La Produccion De Energia
La Produccion De EnergiaLa Produccion De Energia
La Produccion De EnergiaPilar Galan
 
fotos,jugadas y cosas divertidas en el deporte
fotos,jugadas y cosas divertidas en el deportefotos,jugadas y cosas divertidas en el deporte
fotos,jugadas y cosas divertidas en el deportecentrowebs
 
Blaguesentoutgenre
BlaguesentoutgenreBlaguesentoutgenre
Blaguesentoutgenreguest72e03a
 
le projet de jeu de role
le projet de jeu de rolele projet de jeu de role
le projet de jeu de roleSeo Hee Cho
 
Terrain de jeu entre deux mondes (Réel/Virtuel)
Terrain de jeu entre deux mondes (Réel/Virtuel)Terrain de jeu entre deux mondes (Réel/Virtuel)
Terrain de jeu entre deux mondes (Réel/Virtuel)flasorne
 
Torrent_Aina_EW41
Torrent_Aina_EW41Torrent_Aina_EW41
Torrent_Aina_EW41aainaa_1
 
Glosario Digital***
Glosario Digital***Glosario Digital***
Glosario Digital***guestf26f75
 
Animhu presentación senplades [sólo lectura]
Animhu presentación senplades [sólo lectura]Animhu presentación senplades [sólo lectura]
Animhu presentación senplades [sólo lectura]Asamblea Nacional
 
Triatlón Solidario
Triatlón SolidarioTriatlón Solidario
Triatlón Solidarioguestcca83
 

Destaque (20)

L’édition Numérique, CNAM, Déc 2007
L’édition Numérique,  CNAM, Déc 2007L’édition Numérique,  CNAM, Déc 2007
L’édition Numérique, CNAM, Déc 2007
 
La Web 2.0
La Web 2.0La Web 2.0
La Web 2.0
 
1m12 artes musicales
1m12 artes musicales1m12 artes musicales
1m12 artes musicales
 
Maria
MariaMaria
Maria
 
4ºsociedad sept
4ºsociedad sept4ºsociedad sept
4ºsociedad sept
 
Information Systems Project Management - Understanding & Defining The Project
Information Systems Project Management - Understanding & Defining The ProjectInformation Systems Project Management - Understanding & Defining The Project
Information Systems Project Management - Understanding & Defining The Project
 
La Produccion De Energia
La Produccion De EnergiaLa Produccion De Energia
La Produccion De Energia
 
fotos,jugadas y cosas divertidas en el deporte
fotos,jugadas y cosas divertidas en el deportefotos,jugadas y cosas divertidas en el deporte
fotos,jugadas y cosas divertidas en el deporte
 
Blaguesentoutgenre
BlaguesentoutgenreBlaguesentoutgenre
Blaguesentoutgenre
 
le projet de jeu de role
le projet de jeu de rolele projet de jeu de role
le projet de jeu de role
 
Urbe
UrbeUrbe
Urbe
 
Terrain de jeu entre deux mondes (Réel/Virtuel)
Terrain de jeu entre deux mondes (Réel/Virtuel)Terrain de jeu entre deux mondes (Réel/Virtuel)
Terrain de jeu entre deux mondes (Réel/Virtuel)
 
Torrent_Aina_EW41
Torrent_Aina_EW41Torrent_Aina_EW41
Torrent_Aina_EW41
 
Glosario Digital***
Glosario Digital***Glosario Digital***
Glosario Digital***
 
Eze
EzeEze
Eze
 
Animhu presentación senplades [sólo lectura]
Animhu presentación senplades [sólo lectura]Animhu presentación senplades [sólo lectura]
Animhu presentación senplades [sólo lectura]
 
Grans Construccions
Grans ConstruccionsGrans Construccions
Grans Construccions
 
Triatlón Solidario
Triatlón SolidarioTriatlón Solidario
Triatlón Solidario
 
Innovations technologiques à Paris septembre 2012
Innovations technologiques à Paris septembre 2012Innovations technologiques à Paris septembre 2012
Innovations technologiques à Paris septembre 2012
 
Viemoderne
ViemoderneViemoderne
Viemoderne
 

Semelhante a Osgi ParisJUG 2008-10-14

osgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentationosgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentationngriso
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
Java virtual machine : Notions de base
Java virtual machine : Notions de baseJava virtual machine : Notions de base
Java virtual machine : Notions de baseANASYS
 
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Frederic Merizen
 
JavaEE - Test & Deploy
JavaEE - Test & DeployJavaEE - Test & Deploy
JavaEE - Test & DeployAlexis Hassler
 
Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec ArquillianAlexis Hassler
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs rubypinguin666
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08Claude Coulombe
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Jean-Michel Doudoux
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Alexis Hassler
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 

Semelhante a Osgi ParisJUG 2008-10-14 (20)

osgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentationosgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentation
 
gradle_nantesjug
gradle_nantesjuggradle_nantesjug
gradle_nantesjug
 
Gradle_ToulouseJUG
Gradle_ToulouseJUGGradle_ToulouseJUG
Gradle_ToulouseJUG
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Gradle_BordeauxJUG
Gradle_BordeauxJUGGradle_BordeauxJUG
Gradle_BordeauxJUG
 
Java virtual machine : Notions de base
Java virtual machine : Notions de baseJava virtual machine : Notions de base
Java virtual machine : Notions de base
 
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
 
JavaEE - Test & Deploy
JavaEE - Test & DeployJavaEE - Test & Deploy
JavaEE - Test & Deploy
 
gradle_lavajug
gradle_lavajuggradle_lavajug
gradle_lavajug
 
Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec Arquillian
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs ruby
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08GWT Approfondissement - GTI780 & MTI780 - ETS - A08
GWT Approfondissement - GTI780 & MTI780 - ETS - A08
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presque
 
Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 

Mais de Publicis Sapient Engineering

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainPublicis Sapient Engineering
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurPublicis Sapient Engineering
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...Publicis Sapient Engineering
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin Publicis Sapient Engineering
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?Publicis Sapient Engineering
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?Publicis Sapient Engineering
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéPublicis Sapient Engineering
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...Publicis Sapient Engineering
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !Publicis Sapient Engineering
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizPublicis Sapient Engineering
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéPublicis Sapient Engineering
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectPublicis Sapient Engineering
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...Publicis Sapient Engineering
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018Publicis Sapient Engineering
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...Publicis Sapient Engineering
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...Publicis Sapient Engineering
 

Mais de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 

Osgi ParisJUG 2008-10-14

  • 1. 14 octobre 2008 www.parisjug.org www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 2. 14 octobre 2008 OSGI Cyrille Le Clerc Nicolas Griso www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 3. La modularité Caractéristiques d’un module ?  Expose un contrat versionné  Masque ses détails d’implémentation  Décrit ses dépendances www.xebia.fr / blog.xebia.fr 3
  • 4. Pourquoi la modularité ?  Limites du monolithique Windows Vista (50 M SLOC) est le dernier OS monolithique de Microsoft  Réutilisation et émergence de stacks Middleware Java  Serveur JavaEE, ESB/BPM, portail, télécoms,  Consolidation de marché  Maturité des briques et API de base  « One size does NOT fit all ! » Profiles Java EE 6 www.xebia.fr / blog.xebia.fr 4
  • 5. La modularité en Java L’existant Les jars Les classloaders hiérarchiques Maven 2 Le futur Java Module System OSGi www.xebia.fr / blog.xebia.fr
  • 6. La modularité en Java L’existant : les jars Module de base : le Jar  Concept de build sans réalité au runtime  Pas de gestion de version Une seule version d’un jar peut être chargée  Pas d’intermédiaire de visibilité entre protected et public  Pas de description des dépendances Java s’est jusqu’à présent peu soucié du concept de module www.xebia.fr / blog.xebia.fr 6
  • 7. La modularité en Java L’existant : les classloaders hiérarchiques  Les classloaders sont hiérarchiques et héritent de la visibilité du parent  Visibilité globale dans un classloader  Impossibilité de charger plusieurs version d’une classe dans un classloader  Les packages ne sont pas contraints au runtime Deux classes d’un package peuvent provenir de jars différents www.xebia.fr / blog.xebia.fr 7
  • 8. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar my-service-1.0.jar my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar Web Application Classique www.xebia.fr / blog.xebia.fr 8
  • 9. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar c a ve my-service-1.0.jar c ile AS iffi oss D B J my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 9
  • 10. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar c a ve my-service-1.0.jar c ile here iffi bsp D e my-model-1.0.jar Web App ClassLoader W hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 10
  • 11. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader g catalina-6.0.16.jar a gin ack at ep omc R T tomcat-dbcp-6.0.16.jar my-service-1.0.jar my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 11
  • 12. La modularité en Java L’existant : les classloaders hiérarchiques JVM Classloader Servlet Engine Spring-2.5.jar ClassLoader my-service-1.0.jar Impossible Web App my-model-1.0.jar ClassLoader cxf-2.1.jar Spring-2.0.jar Il est aujourd’hui impossible de charger deux versions d’un même jar dans une web app ! www.xebia.fr / blog.xebia.fr 12
  • 13. La modularité en Java L’existant : maven 2 Maven 2  Versionnage des jar  Description des dépendances <project xmlns=quot;http://maven.apache.org/POM/4.0.0quot; xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot; xsi:schemaLocation=quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdquot;> <modelVersion>4.0.0</modelVersion> <name>My Service</name> <groupId>com.mycompany</groupId> version <artifactId>my-service</artifactId> <packaging>jar</packaging> <version>1.0</version> <dependencies> dépendances <dependency> <groupId>com.mycompany</groupId> <artifactId>my-backend</artifactId> <version>1.0</version> </dependency> </dependencies> </project> www.xebia.fr / blog.xebia.fr 13
  • 14. La modularité en Java L’existant : maven 2 Les limitations  Dépendances explicites seulement au build (pas runtime)  Pas de visibilité bundle Les défis  Qualité des méta-données  Dépendances transitives  Conflits de versions  Dépendances par nom de bundle vs. par package www.xebia.fr / blog.xebia.fr 14
  • 15. La modularité en Java Le futur : JSR 291 : Dynamic Component Support for Java SE  OSGi rejoint le JCP  OSGi  Unité de travail : le bundle  Gère la visibilité des bundles et leur dépendances, leur versionning  Dynamique (cycle de vie des bundles géré au runtime)  Orienté service » Les bundles publient des services dynamiquement » Recherche de services » Bind » Cycle de vie des services lié aux bundles qui les supportent www.xebia.fr / blog.xebia.fr 15
  • 16. La modularité en Java Le futur : JSR 277 – Java Module System  Associé à JSR 294 - super packages  Utilisation des annotations Java 5 pour décrire les dépendances et les version @Version(quot;1.0quot;) @ImportModules({ @ImportModule(name=quot;com.mycompany.mybackendquot;, version=quot;1.0+quot;) }) super package com.mycompany.myservice { export com.mycompany.myservice.*; } Vive opposition des partisans d’OSGI www.xebia.fr / blog.xebia.fr 16
  • 17. OSGi Alliance L’histoire Le fonctionnement OSGi Alliance et le JCP www.xebia.fr / blog.xebia.fr
  • 18. OSGi Alliance L’histoire  Consortium créé en 1999  Objectifs initiaux : Java dans le monde embarqué (domotique, automobile, telco, etc)  Membres : EDF, Siemens, BMW, Ericsson, Nokia, Motorola, Sprint, IBM, SpringSource, Sun, etc  Date clefs » 1999 : l’embarqué et networked devices, la domotique, l’automobile » 2003 : les télécommunications » 2004 : virage open source (Eclipse) » 2006 : server side Java  Besoin d’être léger et dynamique dès l’origine Besoin d’isolation des composants fournis par différents éditeurs www.xebia.fr / blog.xebia.fr 18
  • 19. OSGi Alliance Le fonctionnement  Les experts group  Core platform EG  Vehicle EG  Mobile EG  Entreprise EG  Residential EG  Entreprise Expert Group  Gestion de la scalabilité (multi-conteneur, multi-processeurs)  Ouverture à d’autres languages  Distribué (SCA)  Intégration à JavaEE  Modèle de composants (Spring DM) www.xebia.fr / blog.xebia.fr 19
  • 20. OSGi Alliance OSGi et le JCP  1999 : JSR 8 – OSGi specification => retirée en 1999  2006 : JSR 291- Dynamic Component Support for JavaTM SE  Spec Lead : IBM  Craintes que le JCP n’ai qu’un rôle de validation du travail de l’OSGi Alliance  Craintes du chevauchement avec JSR 277 – Java Module System  2008 : Sun embauche Richard Hall (Apache Felix) => intégration d’OSGi dans Glassfish www.xebia.fr / blog.xebia.fr 20
  • 21. OSGi Alliance OSGi et le JCP Une communauté plus fermée que le JCP ? OSGi Alliance JCP Direction Partagée Exclusive Sun Membres Principalement des entreprises Variés : entreprises, universitaires, individuels Spécifications release Public Public Spécifications drafts Membres payants Public TCK Membres payants Membres payants + OSS Reference Impl Membres payants Public Débats Confidentiels De plus en plus publics OSGi Alliance Full Membership : 20 k$/an www.xebia.fr / blog.xebia.fr 21
  • 22. La plateforme OSGI Les bundles Le réseau de classloader www.xebia.fr / blog.xebia.fr
  • 23. La plateforme Les bundles Les c du ontra Ma inte nife s  Unité de déploiement sur la plateforme st  Un simple jar  Plus quelques entrées dans META-INF/MANIFEST.MF  Peut être utilisé hors contexte OSGi Description du bundle Déclaration des dépendances niveau package Déclaration des packages exportés www.xebia.fr / blog.xebia.fr 23
  • 24. La plateforme Les bundles  Le versionning  major.minor.micro.qualifier » 3.4.0.v20080603-2000  [version, version]  (version, version)  [version, version) www.xebia.fr / blog.xebia.fr 24
  • 25. La Plateforme Le réseau de ClassLoaders gui-grand-public-1.9 domaine-metier-1.3 web-services-1.7 dao&cache-1.1 domaine-metier-1.2 web-services-1.6 Audit&logs-1.0 Exemple de graphe de modules www.xebia.fr / blog.xebia.fr 25
  • 26. La Plateforme Le réseau de Class Loaders Classloader domaine-metier-1.2 web-services-1.6 filtrant MANIFEST Audit&logs-1.0 Import-package … MANIFEST Export-package : … Import−Package: demo.audit;version=1.0.0 Export−Package: demo.audit;version=1.0.0 Seulement les classes de demo.audit www.xebia.fr / blog.xebia.fr 26
  • 27. La plateforme Le conteneur  Environnement d’exécution des bundles  Standalone ou embarqué  Gère le cycle de vie des bundles www.xebia.fr / blog.xebia.fr 27
  • 28. La plateforme Le cycle de vie des bundles www.xebia.fr / blog.xebia.fr 28
  • 29. La plateforme Le Service Registry  Cœur du framework  Gère les services. Permet de  Publier des services  Rechercher des services  Binder des services  Découplage entre services www.xebia.fr / blog.xebia.fr 29
  • 30. Assemblage des services OSGI BundleActivator et ServiceTracker Gestion du cycle de vie du Bundle Enregistrement du service Dé-enregistrement implicite du service www.xebia.fr / blog.xebia.fr 30
  • 31. Assemblage des services OSGI BundleActivator et ServiceTracker Le manifest sert à déclarer le Bundle-Activator Déclaration de l’Activator www.xebia.fr / blog.xebia.fr 31
  • 32. Assemblage des services OSGI BundleActivator et ServiceTracker Gestion du cycle de vie du Bundle Création du ServiceTracker Injection du ServiceTracker Fermeture du ServiceTracker www.xebia.fr / blog.xebia.fr 32
  • 33. Assemblage des services OSGI BundleActivator et ServiceTracker Injection du ServiceTracker Résolution du service à chaque utilisation Gestion de l’indisponibilité Le ServiceTracker est intrusif sur le code ! www.xebia.fr / blog.xebia.fr 33
  • 34. Assemblage des services OSGI BundleActivator et ServiceTracker Enregistrement d’une servlet sur le HttpService Surcharge des méthodes addingService(…) et removedService(…) ServiceTracker devient vite lourd à gérer ! www.xebia.fr / blog.xebia.fr 34
  • 35. Assemblage des services OSGI BundleActivator et ServiceTracker  Mécanisme de gestion des dépendances le plus stable et mature d’OSGi  Très en retard par rapport aux mécanismes d’injection de dépendances Java actuels (EJB 3, Spring, Google Juice, etc)  Contraint par les limites des Execution Environments OSGI ? www.xebia.fr / blog.xebia.fr 35
  • 36. Assemblage des services OSGI Declarative Service  Créé en 2005 (OSGI R4)  Mis à jour via la RFC 134 www.xebia.fr / blog.xebia.fr 36
  • 37. Assemblage des services OSGI Declarative Service  Semble peu utilisé  Techniquement limité  Ne gère pas les dépendances intra-bundles  Remis en cause par RFC 124 (Spring DM) www.xebia.fr / blog.xebia.fr 37
  • 38. Assemblage des services OSGI Spring DM  En cours de standardisation pour OSGi R4.2  RFC 124 www.xebia.fr / blog.xebia.fr 38
  • 39. La plateforme Les services  Exemples  Log Service  Http Service  Configuration Admin Service  Preferences Service  Event Admin Service  Plus orientés embarqué / J2ME que informatique de gestion / Java 5+  Fonctionnalités limitées  Ex: HttpService ne gère ni les Filter ni les ServletContextListener www.xebia.fr / blog.xebia.fr 39
  • 40. La plateforme Les implémentations Open Source  Eclipse Equinox  Apache Felix  Knopflerfish (maintenu par Makewave)  ProSyst Open Source mBedded Server Equinox Edition  Newton Project  La liste complète  http://www.osgi.org/Markets/HomePage www.xebia.fr / blog.xebia.fr 40
  • 41. La plateforme Les chantiers en cours  Spécifiés dans le draft sur OSGi R4.2  Ajout de services « Java EE »  RFC 98: gestion des transaction via JTA et/ou XA  RFC 119: OSGi distribué » Appel de services distants  Nouveau modèle de composant  En concurrence avec Declarative Service (OSGI R4 !)  RFC 124 – « A Component Model for OSGi » » Standardisation de Spring DM www.xebia.fr / blog.xebia.fr 41
  • 42. Demo OSGi Description  Un service dépend d’un backend  Un service expose une servlet  Les composants utilisent Log4j  Upgrade à chaud du service www.xebia.fr / blog.xebia.fr 42
  • 43. Demo OSGi Bundles & packages backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 43
  • 44. Demo OSGi Import d’un service backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 44
  • 45. Demo OSGi Exposition d’une servlet backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 45
  • 46. Demo OSGi Upgrade à chaud d’un bundle backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 46
  • 47. Demo OSGi Log4j ! backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 log4j bundle fragment Log4j.properties org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 47
  • 48. OSGi dans le monde Java EE Client side Server Side www.xebia.fr / blog.xebia.fr
  • 49. OSGi dans le monde Java EE Client side  Eclipse RCP  1ère utilisation d’OSGi dans le monde Open Source  Ajout de fonctionnalités propriétaires » Eclipse-BuddyPolicy et Eclipse-RegisterBuddy » Les Features » La gestion des updates » Les extensions  Limitations Cycle de vie des plugins : On redémarre toujours Eclipse après avoir activé un plugin www.xebia.fr / blog.xebia.fr 49
  • 50. OSGi dans le monde Java EE Server side – Middlewares  Isolation middleware / application  Isolation des composants du middleware (multi versions)  Lifecycle (start, stop, install, uninstall) exports OSGi stricts pour éviter les conflits Logging avec les dépendances Service Mon Application des applications High Availability Service javax.servlet.* javax.** … Messaging Service javax.servlet.http.* … JMS 1.1 Servlet 2.4 Servlet 2.5 EJB 2.1 EJB 3.0 Tx Service Container Container Container Container JTA 1.0.1B OSGI Container JVM www.xebia.fr / blog.xebia.fr 50
  • 51. OSGi dans le monde Java EE Server side - Middlewares  Websphere 6.1 (2006) est full-osgi  Classloader OSGI pour isoler les applications du middleware  Equinox est le conteneur de Websphere  Tous les jars sont osgi-fiés (repository IBM)  Compositions Application Server, ESB, Process Server, Portal, Telecom Server  Weblogic 10 (2007) utilise OSGI  Plusieurs jars sont osgi-fiés  Glassfish  Glassfish démarre sur Equinox et Knopflerfish www.xebia.fr / blog.xebia.fr 51
  • 52. OSGi dans le monde Java EE Server side - Middlewares  Service Mix 4  Réécriture full OSGI / Spring DM de ServiceMix  Service Mix Kernel est un enrichissement d’un conteneur OSGI  Possibilité de déployer des médiations en packaging JBI ou OSGI  Spring DM  Propose OSGI en alternative à Java EE  Autres acteurs Java EE : Jonas, JBoss Ces projets utilisent-ils OSGI basic ? ServiceTracker ? www.xebia.fr / blog.xebia.fr 52
  • 53. Bonnes pratiques OSGi Les enjeux d’OSGi pour Java EE www.xebia.fr / blog.xebia.fr
  • 54. Bonnes pratiques  Préférer Import-Package à Require-Bundle  Utilisation des ranges de versions  Bien designer ses bundles  Prévoir le couplage de ses bundles  Ne pas tout mettre dans un bundle  Séparer les APIs exportées des implémentations  Penser Orienté Service  Gérer le cycle de vie des dépendances  ServiceTracker, Spring DM, Declarative Service www.xebia.fr / blog.xebia.fr 54
  • 55. Les enjeux d’OSGi pour Java EE  L’utilisation d’anti-pattern OSGi  Class.forName / Factory Pattern  System.exit()  Réutilisation des libraries existantes non-OSGi  Repackaging et prolifération de repositories OSGi.org, Spring, Servicemix, IBM (privé), etc  Modification du source code (http://www.dynamicjava.org/)  Bytecode patching au runtime (knoplerfish)  Gestion des meta données  OSGi: Entrées dans le manifest  Java Module System: annotations et nouvelle syntaxe java www.xebia.fr / blog.xebia.fr 55
  • 56. Les enjeux d’OSGi pour Java EE  Problématique cross-bundle  AOP  Sécurité  Transaction  Testabilité des bundles  Packaging des applications  Archive .par chez Spring  Features chez eclipse www.xebia.fr / blog.xebia.fr 56
  • 57. Conclusion  Socle robuste et éprouvé  Répond à des problématiques techniques complexes  Manque de maturité dans le monde Java EE  En pleine évolution pour les aspects Java EE www.xebia.fr / blog.xebia.fr 57
  • 58. Questions www.xebia.fr / blog.xebia.fr 58
  • 59. Sponsors 14/10/2008 OSGI www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 60. Merci de votre attention! www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 61. Licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 14/10/2008 OSGI www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique