of 61 /61
14 octobre 2008 14 octobre 2008 www.parisjug.org 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

Osgi ParisJUG 2008-10-14

Embed Size (px)

Text of Osgi ParisJUG 2008-10-14

  • 1.14 octobre 2008 www.parisjug.orgwww.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 2008OSGICyrille Le Clerc Nicolas Grisowww.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 modularitCaractristiques dun module ? Expose un contrat versionn Masque ses dtails dimplmentation Dcrit ses dpendanceswww.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 Rutilisation et mergence de stacks Middleware Java Serveur JavaEE, ESB/BPM, portail, tlcoms, 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.fr4 5. La modularit en Java LexistantLes jarsLes classloaders hirarchiquesMaven 2 Le futurJava Module SystemOSGiwww.xebia.fr / blog.xebia.fr 6. La modularit en Java Lexistant : les jars Module de base : le Jar Concept de build sans ralit au runtime Pas de gestion de versionUne seule version dun jar peut tre charge Pas dintermdiaire de visibilit entre protected et public Pas de description des dpendances Java sest jusqu prsent peu souci du concept de module www.xebia.fr / blog.xebia.fr6 7. La modularit en Java Lexistant : les classloaders hirarchiques Les classloaders sont hirarchiques et hritent de lavisibilit du parent Visibilit globale dans un classloader Impossibilit de charger plusieurs version dune classedans un classloader Les packages ne sont pas contraints au runtimeDeux classes dun package peuvent provenir de jars diffrents www.xebia.fr / blog.xebia.fr 7 8. La modularit en Java Lexistant : les classloaders hirarchiquesrt.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.jarmy-model-1.0.jarWeb App ClassLoader hibernate-core-3.3.0.jarjdom-1.0.jarWeb Application Classiquewww.xebia.fr / blog.xebia.fr8 9. La modularit en Java Lexistant : les classloaders hirarchiques rt.jar JVM Classloaderjce-provider.jarservlet-api-2.5.jar Servlet Engine ClassLoadercatalina-6.0.16.jartomcat-dbcp-6.0.16.jar c a ve my-service-1.0.jarc ile ASiffi oss D B J my-model-1.0.jarWeb App ClassLoaderhibernate-core-3.3.0.jar jdom-1.0.jarwww.xebia.fr / blog.xebia.fr9 10. La modularit en Java Lexistant : les classloaders hirarchiquesrt.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 vemy-service-1.0.jarc ile hereiffi bsp D emy-model-1.0.jarWeb App ClassLoaderW hibernate-core-3.3.0.jarjdom-1.0.jar www.xebia.fr / blog.xebia.fr10 11. La modularit en Java Lexistant : les classloaders hirarchiques rt.jar JVM Classloaderjce-provider.jarservlet-api-2.5.jar Servlet Engine ClassLoader gcatalina-6.0.16.jar a ginack atep omc R Ttomcat-dbcp-6.0.16.jarmy-service-1.0.jar my-model-1.0.jarWeb App ClassLoaderhibernate-core-3.3.0.jar jdom-1.0.jarwww.xebia.fr / blog.xebia.fr11 12. La modularit en Java Lexistant : les classloaders hirarchiquesJVM ClassloaderServlet EngineSpring-2.5.jar ClassLoadermy-service-1.0.jar ImpossibleWeb App my-model-1.0.jar ClassLoader cxf-2.1.jar Spring-2.0.jar Il est aujourdhui impossible de charger deux versions dun mme jar dans une web app !www.xebia.fr / blog.xebia.fr 12 13. La modularit en Java Lexistant : maven 2 Maven 2 Versionnage des jar Description des dpendances4.0.0My Servicecom.mycompanyversion my-servicejar1.0 dpendancescom.mycompanymy-backend1.0www.xebia.fr / blog.xebia.fr13 14. La modularit en Java Lexistant : maven 2 Les limitations Dpendances explicites seulement au build (pas runtime) Pas de visibilit bundleLes dfis Qualit des mta-donnes Dpendances transitives Conflits de versions Dpendances par nom de bundle vs. par packagewww.xebia.fr / blog.xebia.fr14 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 Gre la visibilit des bundles et leur dpendances, leur versionning Dynamique (cycle de vie des bundles gr 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.fr15 16. La modularit en Java Le futur : JSR 277 Java Module System Associ JSR 294 - super packages Utilisation des annotations Java 5pour dcrire lesdpendances 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 dOSGI www.xebia.fr / blog.xebia.fr 16 17. OSGi Alliance Lhistoire Le fonctionnement OSGi Alliance et le JCP www.xebia.fr / blog.xebia.fr 18. OSGi Alliance Lhistoire 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 : lembarqu et networked devices, la domotique, lautomobile 2003 : les tlcommunications 2004 : virage open source (Eclipse) 2006 : server side Java Besoin dtre lger et dynamique ds lorigine Besoin disolation des composants fournis par diffrents 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 dautres languages Distribu (SCA) Intgration JavaEE Modle de composants (Spring DM)www.xebia.fr / blog.xebia.fr 19 20. OSGi Alliance OSGi et le JCP 1999 : JSR 8 OSGi specification => retire en 1999 2006 : JSR 291- Dynamic Component Support for JavaTMSE Spec Lead : IBM Craintes que le JCP nai quun rle de validation du travail de lOSGiAlliance Craintes du chevauchement avec JSR 277 Java Module System 2008 : Sun embauche Richard Hall (Apache Felix) =>intgration dOSGi dans Glassfishwww.xebia.fr / blog.xebia.fr 20 21. OSGi Alliance OSGi et le JCP Une communaut plus ferme que le JCP ? OSGi Alliance JCPDirectionPartageExclusive Sun MembresPrincipalement des entreprisesVaris : entreprises, universitaires, individuelsSpcifications release PublicPublic Spcifications draftsMembres payants Public TCKMembres payants Membres payants + OSSReference Impl Membres payants Public Dbats Confidentiels De plus en plus publics OSGi Alliance Full Membership : 20 k$/anwww.xebia.fr / blog.xebia.fr 21 22. La plateforme OSGI Les bundles Le rseau de classloaderwww.xebia.fr / blog.xebia.fr 23. La plateforme Les bundles Les cdu ontra Ma inte nife s Unit de dploiement sur la plateforme st Un simple jar Plus quelques entres dans META-INF/MANIFEST.MF Peut tre utilis hors contexte OSGiDescription du bundleDclaration des dpendancesniveau package Dclaration des packagesexportswww.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 rseau de ClassLoadersgui-grand-public-1.9domaine-metier-1.3 web-services-1.7 dao&cache-1.1domaine-metier-1.2 web-services-1.6 Audit&logs-1.0 Exemple de graphe de moduleswww.xebia.fr / blog.xebia.fr25 26. La Plateforme Le rseau de Class LoadersClassloader domaine-metier-1.2web-services-1.6 filtrantMANIFEST Audit&logs-1.0 Import-package MANIFEST Export-package : ImportPackage: demo.audit;version=1.0.0ExportPackage: demo.audit;version=1.0.0Seulement les classes de demo.auditwww.xebia.fr / blog.xebia.fr26 27. La plateforme Le conteneur Environnement dexcution des bundles Standalone ou embarqu Gre le cycle de vie des bundleswww.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 Cur du framework Gre les services. Permet de Publier des services Rechercher des services Binder des services Dcouplage entre serviceswww.xebia.fr / blog.xebia.fr 29 30. Assemblage des services OSGI BundleActivator et ServiceTrackerGestion du cycle de vie duBundleEnregistrement du serviceD-enregistrementimplicite du servicewww.xebia.fr / blog.xebia.fr30 31. Assemblage des services OSGI BundleActivator et ServiceTracker Le manifest sert dclarer le Bundle-Activator Dclaration de lActivatorwww.xebia.fr / blog.xebia.fr31 32. Assemblage des services OSGI BundleActivator et ServiceTracker Gestion du cycle de vie du Bundle Cration du ServiceTrackerInjection du ServiceTrackerFermeture duServiceTrackerwww.xebia.fr / blog.xebia.fr32 33. Assemblage des services OSGI BundleActivator et ServiceTrackerInjection du ServiceTrackerRsolution du service chaque utilisation Gestion delindisponibilit Le ServiceTracker est intrusif sur le code !www.xebia.fr / blog.xebia.fr33 34. Assemblage des services OSGI BundleActivator et ServiceTracker Enregistrement dune servlet sur le HttpService Surcharge des mthodes addingService() etremovedService()ServiceTracker devient vite lourd grer !www.xebia.fr / blog.xebia.fr34 35. Assemblage des services OSGI BundleActivator et ServiceTracker Mcanisme de gestion des dpendances le plus stable etmature dOSGi Trs en retard par rapport aux mcanismes dinjection dedpendances Java actuels (EJB 3, Spring, Google Juice, etc) Contraint par les limites des Execution EnvironmentsOSGI ? 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 gre pas les dpendances 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 124www.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 orients embarqu / J2ME que informatique de gestion/ Java 5+ Fonctionnalits limites Ex: HttpService ne gre ni les Filter ni les ServletContextListenerwww.xebia.fr / blog.xebia.fr39 40. La plateforme Les implmentations Open Source Eclipse Equinox Apache Felix Knopflerfish (maintenu par Makewave) ProSyst Open Source mBedded Server Equinox Edition Newton Project La liste complte http://www.osgi.org/Markets/HomePage www.xebia.fr / blog.xebia.fr 40 41. La plateforme Les chantiers en cours Spcifis 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 modle 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 dpend dun backend Un service expose une servlet Les composants utilisent Log4j Upgrade chaud du servicewww.xebia.fr / blog.xebia.fr 42 43. Demo OSGi Bundles & packages backend-service-1.0backend-service-1.1business-service-1.0 log4j-1.2.13javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr43 44. Demo OSGi Import dun service backend-service-1.0backend-service-1.1business-service-1.0 log4j-1.2.13javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr44 45. Demo OSGi Exposition dune servlet backend-service-1.0backend-service-1.1business-service-1.0 log4j-1.2.13javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr45 46. Demo OSGi Upgrade chaud dun bundle backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr46 47. Demo OSGi Log4j ! backend-service-1.0backend-service-1.1business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 log4j bundle fragmentLog4j.propertiesorg.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr47 48. OSGi dans le monde Java EEClient sideServer Sidewww.xebia.fr / blog.xebia.fr 49. OSGi dans le monde Java EE Client side Eclipse RCP 1re utilisation dOSGi dans le monde Open Source Ajout de fonctionnalits propritaires Eclipse-BuddyPolicy et Eclipse-RegisterBuddy Les Features La gestion des updates Les extensions Limitations Cycle de vie des plugins : On redmarre toujours Eclipse aprs 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 conflitsLogging avec les dpendancesServiceMon Application des applications High Availability Service javax.servlet.* javax.** Messaging Servicejavax.servlet.http.*JMS 1.1 Servlet 2.4 Servlet 2.5EJB 2.1EJB 3.0 Tx Service Container Container ContainerContainerJTA 1.0.1BOSGI Container JVMwww.xebia.fr / blog.xebia.fr50 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-fis (repository IBM) Compositions Application Server, ESB, Process Server, Portal, TelecomServer Weblogic 10 (2007) utilise OSGI Plusieurs jars sont osgi-fis Glassfish Glassfish dmarre sur Equinox et Knopflerfishwww.xebia.fr / blog.xebia.fr51 52. OSGi dans le monde Java EE Server side - Middlewares Service Mix 4 Rcriture full OSGI / Spring DM de ServiceMix Service Mix Kernel est un enrichissement dun conteneur OSGI Possibilit de dployer des mdiations en packaging JBI ou OSGI Spring DM Propose OSGI en alternative Java EE Autres acteurs Java EE : Jonas, JBossCes projets utilisent-ils OSGI basic ?ServiceTracker ? www.xebia.fr / blog.xebia.fr52 53. Bonnes pratiques OSGi Les enjeux dOSGi pour Java EEwww.xebia.fr / blog.xebia.fr 54. Bonnes pratiques Prfrer Import-Package Require-Bundle Utilisation des ranges de versions Bien designer ses bundles Prvoir le couplage de ses bundles Ne pas tout mettre dans un bundle Sparer les APIs exportes des implmentations Penser Orient Service Grer le cycle de vie des dpendances ServiceTracker, Spring DM, Declarative Service www.xebia.fr / blog.xebia.fr 54 55. Les enjeux dOSGi pour Java EE Lutilisation danti-pattern OSGi Class.forName / Factory Pattern System.exit() Rutilisation des libraries existantes non-OSGi Repackaging et prolifration de repositoriesOSGi.org, Spring, Servicemix, IBM (priv), etc Modification du source code (http://www.dynamicjava.org/) Bytecode patching au runtime (knoplerfish) Gestion des meta donnes OSGi: Entres dans le manifest Java Module System: annotations et nouvelle syntaxe javawww.xebia.fr / blog.xebia.fr 55 56. Les enjeux dOSGi pour Java EE Problmatique cross-bundle AOP Scurit Transaction Testabilit des bundles Packaging des applications Archive .par chez Spring Features chez eclipsewww.xebia.fr / blog.xebia.fr 56 57. Conclusion Socle robuste et prouv Rpond des problmatiques 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/2008OSGI www.parisjug.orgCopyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternit Pas d'Utilisation Commerciale Partage des Conditions Initiales l'Identique 60. Merci de votreattention!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/2008OSGI www.parisjug.org Copyright 2008 ParisJug. Licence CC Creative Commons 2.0 France Paternit Pas d'Utilisation Commerciale Partage des Conditions Initiales l'Identique