SlideShare une entreprise Scribd logo
OSGi - ParisJUG Cyrille Le Clerc Nicolas Griso
La modularité Caractéristiques d’un module ? Expose un contrat versionné Masque ses détails d’implémentation Décrit ses dépendances
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
La modularité en Java L’existant Les jars Les classloaders hiérarchiques Maven 2 Le futur Java Module System OSGi
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
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
La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar jdom-1.0.jar Web Application Classique
La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar jdom-1.0.jar Difficile avec  JBoss AS
La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar jdom-1.0.jar hibernate-core-3.3.0.jar Difficile avec  Websphere
La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar Repackaging  Tomcat  jdom-1.0.jar
La modularité en Java L’existant : les classloaders hiérarchiques Web App  ClassLoader my-model-1.0.jar my-service-1.0.jar cxf-2.1.jar Spring-2.5.jar Spring-2.0.jar Impossible Il est aujourd’hui impossible de charger deux versions  d’un même jar dans une web app ! JVM Classloader Servlet Engine ClassLoader
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.0&quot;   xmlns:xsi = &quot;http://www.w3.org/2001/XMLSchema-instance&quot;   xsi:schemaLocation = &quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot; >   <modelVersion> 4.0.0 </modelVersion>   <name> My Service </name>   <groupId> com.mycompany </groupId>   <artifactId> my-service </artifactId>   <packaging> jar </packaging>   <version> 1.0 </version>   <dependencies>   <dependency>   <groupId> com.mycompany </groupId>   <artifactId> my-backend </artifactId>   <version> 1.0 </version>   </dependency>   </dependencies> </project> version dépendances
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
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
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.0&quot; )  @ImportModules({  @ImportModule(name= &quot;com.mycompany.mybackend&quot; , version= &quot;1.0+&quot; )‏ })  super package   com.mycompany.myservice  { export  com.mycompany.myservice.*; } Vive opposition des partisans d’OSGI
OSGi Alliance L’histoire Le fonctionnement OSGi Alliance et le JCP
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
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)‏
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
OSGi Alliance OSGi et le JCP Une communauté plus fermée que le JCP ? OSGi Alliance Full Membership : 20 k$/an Exclusive Sun Partagée Direction Variés : entreprises, universitaires, individuels Principalement des entreprises Membres De plus en plus publics Confidentiels Débats Public Membres payants Reference Impl Membres payants + OSS Membres payants TCK Public Membres payants Spécifications drafts Public Public Spécifications release JCP OSGi Alliance
La plateforme OSGI Les bundles Le réseau de classloader
La plateforme Les bundles Unité de déploiement sur la plateforme Un simple jar Plus quelques entrées dans  META-INF/MANIFEST.MF Peut être utilisé hors contexte OSGi Déclaration des dépendances niveau package Déclaration des packages exportés Description du bundle Les contraintes  du Manifest
La plateforme Les bundles Le versionning major.minor.micro.qualifier 3.4.0.v20080603-2000 [version, version] (version, version)‏ [version, version)
La Plateforme Le réseau de ClassLoaders gui-grand-public-1.9 web-services-1.7 web-services-1.6 domaine-metier-1.3 Audit&logs-1.0 domaine-metier-1.2 dao&cache-1.1 Exemple de graphe de modules
La Plateforme Le réseau de Class Loaders web-services-1.6 Audit&logs-1.0 domaine-metier-1.2 Classloader filtrant MANIFEST Export-package : … MANIFEST Import-package … Import − Package : demo.audit;version=1.0.0 Seulement les classes de  demo.audit Export − Package : demo.audit;version=1.0.0
La plateforme Le conteneur Environnement d’exécution des bundles Standalone ou embarqué Gère le cycle de vie des bundles
La plateforme Le cycle de vie des bundles
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
Assemblage des services OSGI BundleActivator et ServiceTracker Enregistrement du service Dé-enregistrement implicite du service Gestion du cycle de vie du Bundle
Assemblage des services OSGI BundleActivator et ServiceTracker Le manifest sert à déclarer le  Bundle-Activator Déclaration de l’ Activator
Assemblage des services OSGI BundleActivator et ServiceTracker Création du ServiceTracker Fermeture du ServiceTracker Gestion du cycle de vie du Bundle Injection du ServiceTracker
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 !
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 !
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 ?
Assemblage des services OSGI Declarative Service Créé en 2005 (OSGI R4)‏ Mis à jour via la RFC 134
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)‏
Assemblage des services OSGI Spring DM En cours de standardisation pour OSGi R4.2 RFC 124
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
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
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
Demo OSGi Description Un service dépend d’un backend Un service expose une servlet Les composants utilisent Log4j Upgrade à chaud du service
Demo OSGi Bundles & packages business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
Demo OSGi Import d’un service business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
Demo OSGi Exposition d’une servlet business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
Demo OSGi Upgrade à chaud d’un bundle business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
Demo OSGi Log4j ! business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1 log4j bundle fragment Log4j.properties
OSGi dans le monde Java EE Client side Server Side
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
OSGi dans le monde Java EE Server side – Middlewares Isolation middleware / application Isolation des composants du middleware (multi versions)‏ Lifecycle (start, stop, install, uninstall)‏ JVM OSGI Container Servlet 2.4 Container Servlet 2.5 Container EJB 2.1 Container Tx Service JTA 1.0.1B Messaging Service JMS 1.1 High Availability Service Logging Service EJB 3.0 Container javax.servlet.* javax.servlet.http .* … javax.** … exports OSGi stricts pour éviter les conflits avec les dépendances des applications Mon Application
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
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 ?
Bonnes pratiques OSGi Les enjeux d’OSGi pour Java EE
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
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
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
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
Questions

Contenu connexe

Tendances

Présentation prime facesfinal
Présentation prime facesfinalPrésentation prime facesfinal
Présentation prime facesfinal
Aymen Drira
 
JSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces MobileJSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces Mobile
Sylla Mamoudou
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
Sabri Bouchlema
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
ENSET, Université Hassan II Casablanca
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
Sabri Bouchlema
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
medbmb
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
oxmed
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGi
lyonjug
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
Alexis Moussine-Pouchkine
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
Antoine Rey
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
Youness Boukouchi
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
Soukaina Boujadi
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
DNG Consulting
 
J2EE vs .NET
J2EE vs .NETJ2EE vs .NET
J2EE vs .NET
Ghazouani Mahdi
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
Celinio Fernandes
 

Tendances (20)

Présentation prime facesfinal
Présentation prime facesfinalPrésentation prime facesfinal
Présentation prime facesfinal
 
JSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces MobileJSF2, Primefaces, Primefaces Mobile
JSF2, Primefaces, Primefaces Mobile
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Axis2 services fr
Axis2 services frAxis2 services fr
Axis2 services fr
 
Osgi ParisJUG 2008-10-14
Osgi ParisJUG 2008-10-14Osgi ParisJUG 2008-10-14
Osgi ParisJUG 2008-10-14
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGi
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
 
J2EE vs .NET
J2EE vs .NETJ2EE vs .NET
J2EE vs .NET
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 

En vedette

Programme congres 2005
Programme congres 2005Programme congres 2005
Enquête 2012 sur les Métiers du Web et de l'Internet
Enquête 2012 sur les Métiers du Web et de l'InternetEnquête 2012 sur les Métiers du Web et de l'Internet
Enquête 2012 sur les Métiers du Web et de l'Internet
Otman MECHBAL
 
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
Philippe TRINON
 
Alain Morisod Csillagai
Alain Morisod CsillagaiAlain Morisod Csillagai
Alain Morisod Csillagai
Kapitán József
 
Quand Le Web 2.0 Transforme Votre Entreprise
Quand Le Web 2.0 Transforme Votre EntrepriseQuand Le Web 2.0 Transforme Votre Entreprise
Quand Le Web 2.0 Transforme Votre Entreprise
Philippe TRINON
 
Le nouveau portail
Le nouveau portailLe nouveau portail
Le nouveau portail
Cédric GILLET
 
Soirée Data Grid au Paris JUG (2009/05/12)
Soirée Data Grid au Paris JUG (2009/05/12)Soirée Data Grid au Paris JUG (2009/05/12)
Soirée Data Grid au Paris JUG (2009/05/12)
Cyrille Le Clerc
 
HAL v3.0 formation_administrateur_6_novembre_2014
HAL v3.0 formation_administrateur_6_novembre_2014HAL v3.0 formation_administrateur_6_novembre_2014
HAL v3.0 formation_administrateur_6_novembre_2014
OAccsd
 
Bonnes pratiques des applications java prêtes pour la production
Bonnes pratiques des applications java prêtes pour la productionBonnes pratiques des applications java prêtes pour la production
Bonnes pratiques des applications java prêtes pour la production
Cyrille Le Clerc
 
Mettre en place un intranet de veille territoriale
Mettre en place un intranet de veille territorialeMettre en place un intranet de veille territoriale
Mettre en place un intranet de veille territoriale
Woomeet
 
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
GUSS
 
Présentation PowerPoint " Conception et développement d'un portail web pour l...
Présentation PowerPoint " Conception et développement d'un portail web pour l...Présentation PowerPoint " Conception et développement d'un portail web pour l...
Présentation PowerPoint " Conception et développement d'un portail web pour l...
Hajer Dahech
 

En vedette (16)

Programme congres 2005
Programme congres 2005Programme congres 2005
Programme congres 2005
 
Enquête 2012 sur les Métiers du Web et de l'Internet
Enquête 2012 sur les Métiers du Web et de l'InternetEnquête 2012 sur les Métiers du Web et de l'Internet
Enquête 2012 sur les Métiers du Web et de l'Internet
 
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
Les Entreprises Souvrent Aux Outils LabelliséS « Web 2.0 »
 
Alain Morisod Csillagai
Alain Morisod CsillagaiAlain Morisod Csillagai
Alain Morisod Csillagai
 
Gerer fichiers
Gerer fichiersGerer fichiers
Gerer fichiers
 
Web 2.0 Wikipedia
Web 2.0 WikipediaWeb 2.0 Wikipedia
Web 2.0 Wikipedia
 
Quand Le Web 2.0 Transforme Votre Entreprise
Quand Le Web 2.0 Transforme Votre EntrepriseQuand Le Web 2.0 Transforme Votre Entreprise
Quand Le Web 2.0 Transforme Votre Entreprise
 
Web 2.0 Complet
Web 2.0 CompletWeb 2.0 Complet
Web 2.0 Complet
 
Le nouveau portail
Le nouveau portailLe nouveau portail
Le nouveau portail
 
Soirée Data Grid au Paris JUG (2009/05/12)
Soirée Data Grid au Paris JUG (2009/05/12)Soirée Data Grid au Paris JUG (2009/05/12)
Soirée Data Grid au Paris JUG (2009/05/12)
 
HAL v3.0 formation_administrateur_6_novembre_2014
HAL v3.0 formation_administrateur_6_novembre_2014HAL v3.0 formation_administrateur_6_novembre_2014
HAL v3.0 formation_administrateur_6_novembre_2014
 
Bonnes pratiques des applications java prêtes pour la production
Bonnes pratiques des applications java prêtes pour la productionBonnes pratiques des applications java prêtes pour la production
Bonnes pratiques des applications java prêtes pour la production
 
Mettre en place un intranet de veille territoriale
Mettre en place un intranet de veille territorialeMettre en place un intranet de veille territoriale
Mettre en place un intranet de veille territoriale
 
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
 
presentation soutenance
presentation soutenance presentation soutenance
presentation soutenance
 
Présentation PowerPoint " Conception et développement d'un portail web pour l...
Présentation PowerPoint " Conception et développement d'un portail web pour l...Présentation PowerPoint " Conception et développement d'un portail web pour l...
Présentation PowerPoint " Conception et développement d'un portail web pour l...
 

Similaire à Soirée OSGi au Paris Jug (14/10/2008)

Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
Antoine Rey
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
Yassine Badri
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwt
Said Talibi
 
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
Alexis Hassler
 
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
Jean-Michel Doudoux
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
PALO IT
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
DocDoku
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
Jean-Michel Doudoux
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
Mohamed Ferchichi
 
osgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentationosgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentation
ngriso
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
ngombeemmanuel
 
Architecture .net
Architecture  .netArchitecture  .net
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
Velossity
 
Du JavaScript propre ? Challenge accepted!
Du JavaScript propre ? Challenge accepted!Du JavaScript propre ? Challenge accepted!
Du JavaScript propre ? Challenge accepted!
OCTO Technology
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
Antoine Rey
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
Nathaniel Richand
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdf
Rachida19
 
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Romain Linsolas
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
Microsoft
 

Similaire à Soirée OSGi au Paris Jug (14/10/2008) (20)

Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwt
 
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
 
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
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
 
osgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentationosgi-parisjug-20081014-presentation
osgi-parisjug-20081014-presentation
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
 
Du JavaScript propre ? Challenge accepted!
Du JavaScript propre ? Challenge accepted!Du JavaScript propre ? Challenge accepted!
Du JavaScript propre ? Challenge accepted!
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdf
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
Softshake 2013 - Du JavaScript propre ? Challenge Accepted!
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
 

Plus de Cyrille Le Clerc

Embracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetryEmbracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetry
Cyrille Le Clerc
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Cyrille Le Clerc
 
Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013
Cyrille Le Clerc
 
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
Cyrille Le Clerc
 
Paris Devops - Monitoring And Feature Toggle Pattern With JMX
Paris Devops - Monitoring And Feature Toggle Pattern With JMXParis Devops - Monitoring And Feature Toggle Pattern With JMX
Paris Devops - Monitoring And Feature Toggle Pattern With JMX
Cyrille Le Clerc
 
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
Cyrille Le Clerc
 
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspectiveGeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
Cyrille Le Clerc
 
Java Application Monitoring with AppDynamics' Founder
Java Application Monitoring with AppDynamics' FounderJava Application Monitoring with AppDynamics' Founder
Java Application Monitoring with AppDynamics' Founder
Cyrille Le Clerc
 
Xebia Knowledge Exchange - Owasp Top Ten
Xebia Knowledge Exchange - Owasp Top TenXebia Knowledge Exchange - Owasp Top Ten
Xebia Knowledge Exchange - Owasp Top Ten
Cyrille Le Clerc
 

Plus de Cyrille Le Clerc (9)

Embracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetryEmbracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetry
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
 
Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013
 
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR...
 
Paris Devops - Monitoring And Feature Toggle Pattern With JMX
Paris Devops - Monitoring And Feature Toggle Pattern With JMXParis Devops - Monitoring And Feature Toggle Pattern With JMX
Paris Devops - Monitoring And Feature Toggle Pattern With JMX
 
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
Paris NoSQL User Group - In Memory Data Grids in Action (without transactions...
 
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspectiveGeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective
 
Java Application Monitoring with AppDynamics' Founder
Java Application Monitoring with AppDynamics' FounderJava Application Monitoring with AppDynamics' Founder
Java Application Monitoring with AppDynamics' Founder
 
Xebia Knowledge Exchange - Owasp Top Ten
Xebia Knowledge Exchange - Owasp Top TenXebia Knowledge Exchange - Owasp Top Ten
Xebia Knowledge Exchange - Owasp Top Ten
 

Dernier

INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
Faga1939
 
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
Nicolas Georgeault
 
La Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdfLa Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdf
SoniazghalKallel
 
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
InnovaSter-Trade Ltd.
 
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Chadi Kammoun
 
Les Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et ComparatifLes Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et Comparatif
Top-plans
 

Dernier (6)

INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
 
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
 
La Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdfLa Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdf
 
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
 
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
 
Les Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et ComparatifLes Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et Comparatif
 

Soirée OSGi au Paris Jug (14/10/2008)

  • 1. OSGi - ParisJUG Cyrille Le Clerc Nicolas Griso
  • 2. La modularité Caractéristiques d’un module ? Expose un contrat versionné Masque ses détails d’implémentation Décrit ses dépendances
  • 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
  • 4. La modularité en Java L’existant Les jars Les classloaders hiérarchiques Maven 2 Le futur Java Module System OSGi
  • 5. 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
  • 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
  • 7. La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar jdom-1.0.jar Web Application Classique
  • 8. La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar jdom-1.0.jar Difficile avec JBoss AS
  • 9. La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar jdom-1.0.jar hibernate-core-3.3.0.jar Difficile avec Websphere
  • 10. La modularité en Java L’existant : les classloaders hiérarchiques tomcat-dbcp-6.0.16.jar JVM Classloader jce-provider.jar rt.jar Servlet Engine ClassLoader servlet-api-2.5.jar catalina-6.0.16.jar Web App ClassLoader my-model-1.0.jar my-service-1.0.jar hibernate-core-3.3.0.jar Repackaging Tomcat jdom-1.0.jar
  • 11. La modularité en Java L’existant : les classloaders hiérarchiques Web App ClassLoader my-model-1.0.jar my-service-1.0.jar cxf-2.1.jar Spring-2.5.jar Spring-2.0.jar Impossible Il est aujourd’hui impossible de charger deux versions d’un même jar dans une web app ! JVM Classloader Servlet Engine ClassLoader
  • 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.0&quot; xmlns:xsi = &quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation = &quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot; > <modelVersion> 4.0.0 </modelVersion> <name> My Service </name> <groupId> com.mycompany </groupId> <artifactId> my-service </artifactId> <packaging> jar </packaging> <version> 1.0 </version> <dependencies> <dependency> <groupId> com.mycompany </groupId> <artifactId> my-backend </artifactId> <version> 1.0 </version> </dependency> </dependencies> </project> version dépendances
  • 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
  • 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
  • 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.0&quot; ) @ImportModules({ @ImportModule(name= &quot;com.mycompany.mybackend&quot; , version= &quot;1.0+&quot; )‏ }) super package com.mycompany.myservice { export com.mycompany.myservice.*; } Vive opposition des partisans d’OSGI
  • 16. OSGi Alliance L’histoire Le fonctionnement OSGi Alliance et le JCP
  • 17. 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
  • 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)‏
  • 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
  • 20. OSGi Alliance OSGi et le JCP Une communauté plus fermée que le JCP ? OSGi Alliance Full Membership : 20 k$/an Exclusive Sun Partagée Direction Variés : entreprises, universitaires, individuels Principalement des entreprises Membres De plus en plus publics Confidentiels Débats Public Membres payants Reference Impl Membres payants + OSS Membres payants TCK Public Membres payants Spécifications drafts Public Public Spécifications release JCP OSGi Alliance
  • 21. La plateforme OSGI Les bundles Le réseau de classloader
  • 22. La plateforme Les bundles Unité de déploiement sur la plateforme Un simple jar Plus quelques entrées dans META-INF/MANIFEST.MF Peut être utilisé hors contexte OSGi Déclaration des dépendances niveau package Déclaration des packages exportés Description du bundle Les contraintes du Manifest
  • 23. La plateforme Les bundles Le versionning major.minor.micro.qualifier 3.4.0.v20080603-2000 [version, version] (version, version)‏ [version, version)
  • 24. La Plateforme Le réseau de ClassLoaders gui-grand-public-1.9 web-services-1.7 web-services-1.6 domaine-metier-1.3 Audit&logs-1.0 domaine-metier-1.2 dao&cache-1.1 Exemple de graphe de modules
  • 25. La Plateforme Le réseau de Class Loaders web-services-1.6 Audit&logs-1.0 domaine-metier-1.2 Classloader filtrant MANIFEST Export-package : … MANIFEST Import-package … Import − Package : demo.audit;version=1.0.0 Seulement les classes de demo.audit Export − Package : demo.audit;version=1.0.0
  • 26. La plateforme Le conteneur Environnement d’exécution des bundles Standalone ou embarqué Gère le cycle de vie des bundles
  • 27. La plateforme Le cycle de vie des bundles
  • 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
  • 29. Assemblage des services OSGI BundleActivator et ServiceTracker Enregistrement du service Dé-enregistrement implicite du service Gestion du cycle de vie du Bundle
  • 30. Assemblage des services OSGI BundleActivator et ServiceTracker Le manifest sert à déclarer le Bundle-Activator Déclaration de l’ Activator
  • 31. Assemblage des services OSGI BundleActivator et ServiceTracker Création du ServiceTracker Fermeture du ServiceTracker Gestion du cycle de vie du Bundle Injection du ServiceTracker
  • 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 !
  • 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 !
  • 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 ?
  • 35. Assemblage des services OSGI Declarative Service Créé en 2005 (OSGI R4)‏ Mis à jour via la RFC 134
  • 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)‏
  • 37. Assemblage des services OSGI Spring DM En cours de standardisation pour OSGi R4.2 RFC 124
  • 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
  • 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
  • 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
  • 41. Demo OSGi Description Un service dépend d’un backend Un service expose une servlet Les composants utilisent Log4j Upgrade à chaud du service
  • 42. Demo OSGi Bundles & packages business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
  • 43. Demo OSGi Import d’un service business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
  • 44. Demo OSGi Exposition d’une servlet business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
  • 45. Demo OSGi Upgrade à chaud d’un bundle business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1
  • 46. Demo OSGi Log4j ! business-service-1.0 backend-service-1.0 log4j-1.2.13 org.osgi.service.http.*-1.2.0 javax.servlet.*-2.4 backend-service-1.1 log4j bundle fragment Log4j.properties
  • 47. OSGi dans le monde Java EE Client side Server Side
  • 48. 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
  • 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)‏ JVM OSGI Container Servlet 2.4 Container Servlet 2.5 Container EJB 2.1 Container Tx Service JTA 1.0.1B Messaging Service JMS 1.1 High Availability Service Logging Service EJB 3.0 Container javax.servlet.* javax.servlet.http .* … javax.** … exports OSGi stricts pour éviter les conflits avec les dépendances des applications Mon Application
  • 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
  • 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 ?
  • 52. Bonnes pratiques OSGi Les enjeux d’OSGi pour Java EE
  • 53. 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
  • 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
  • 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
  • 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

Notes de l'éditeur

  1. Self-Contained. Highly Cohesive Loosely coupled
  2. Telecom : SIP, IP Multimedia Subsystem (IMS), Parlay X web services, Websphere : Portal, ESB/Process Server, Telecom Server Weblogic : Integration, Communications Platform Glassfish : GlassfishESB, Sailfin, JBoss : features packs
  3. Pas de gestion de version - On ne peut pas charger plusieurs versions simultanément - l’aspect hiérarchique des packages n’est pas exploité pour décrire la visibilité
  4. Packages pas contraint au runtime : possibilité de charger depuis plusieurs jars les classes d’un même package
  5. http://jaitechwriteups.blogspot.com/2008/08/how-to-upgrade-hibernate-in-jboss.html JBoss ships hibernate-3.2.4
  6. Martin Fowler : Dependency Injection : Jan 2004 : http://martinfowler.com/articles/injection.html