SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
OSGi


                  11 octobre 2012

                François Fornaciari

Zenika © 2012                         1
François Fornaciari


       Membre du Board de l’OSGi Users’ Group France




       Consultant Zenika
               Spécialiste Java EE / RIA
               Formateur OSGi
               Ancien développeur JOnAS


               @fornacif
               francois.fornaciari@zenika.com


Zenika © 2012                                           2
OSGi
  Définition




                « Une plate-forme de déploiement et
                   d’exécution de services Java »




Zenika © 2012                                         3
OSGi
  Spécifications

  Standards décomposés en plusieurs volets

       Core
               Plateforme minimale
               Détail du fonctionnent d’un framework OSGi
               Définition des services obligatoires


       Compendium
               Définition de l’ensemble des services additionnels


       Enterprise
               Définition des services estampillés « Enterprise »
               Portage de composants Java EE
Zenika © 2012                                                        4
OSGi
  Historique

       Fondation de l'OSGi Alliance en 1999



       Historique des Releases
         R1.0          R2.0             R3.0             R4.0
         • mai 2000    • octobre 2001   • mars 2003      • août 2005




         R4.2          R4.2             R4.1             R4.0.1
         Compendium    Core             • avril 2007     • juillet 2006
         • août 2009   • juin 2009




         R4.2          R4.3             R4.3             R5.0
         Enterprise    Core             Compendium       Core + Ent.
         • mars 2010   • avril 2011     • janvier 2012   • mars 2012


Zenika © 2012                                                             5
OSGi
  Objectifs

       Modularité des applications
               Meilleur découpage des applications
               Isolation des modules
               Chargement / déchargement de code sans interruption de la plate-
                forme
               Résolution des dépendances versionnées de code


       Architecture orientée service
               Couplage faible
               Configuration dynamique des applications


       Exemple d’utilisation : architectures à base de plugins

Zenika © 2012                                                                      6
OSGi
  Implémentations open source

       Apache Felix




       Eclipse Equinox (RI)




       Knopflerfish




Zenika © 2012                   7
Specification R1.0
  Bundle

       Bundle
               Unité de déploiement : JAR + MANIFEST
               Unité fonctionnelle (offre des services)


                     Provided                           res               Required
                     services             classes                         services



                     Exported                                             Imported
                     packages                       manifest
                                                                          packages



       Application
               Ensemble de bundles
                    Livrés dynamiquement
                    Eventuellement partagés avec d’autres applications

Zenika © 2012                                                                        8
Specification R1.0
  MANIFEST



            # Package(s) requis
            Import-Package: com.zenika.interface;version=1.1.0
            # Package(s) fournis
            Export-Package: com.zenika.util;version=2.0.0
            # Identifiant du bundle : unique pour la plate-forme
            Bundle-SymbolicName: com.zenika.example
            # Version du bundle
            Bundle-Version: 2.1.0
            # Nom du bundle
            Bundle-Name: Exemple
            # Nom de la classe Activator (équivalent de la classe Main)
            Bundle-Activator: com.zenika.internal.Activator




Zenika © 2012                                                             9
Specification R1.0
  BundleActivator

       Interface BundleActivator
         import org.osgi.framework.Bundle;
         import org.osgi.framework.BundleActivator;
         import org.osgi.framework.BundleContext;

         public class Activator implements BundleActivator {
           public void start(BundleContext bundleContext) throws Exception {
              Bundle[] bundles = bundleContext.getBundles();
              for (Bundle bundle : bundles) {
                 System.out.println(bundle.getSymbolicName());
              }
           }

             public void stop(BundleContext bundleContext) throws Exception {
               System.out.println("Bundle is stopping");
             }
         }




Zenika © 2012                                                                   10
Specification R1.0
  BundleContext

  Point d'accès vers le framework OSGi
   Un BundleContext par bundle


       Enregistrement de services
       Recherche de services

       Souscription aux évènements du framework
               FrameworkListener, BundleListener, ServiceListener


       Accès au framework
               Liste des bundles / services disponibles
               Installation / mise à jour / désinstallation de bundles

Zenika © 2012                                                             11
Specification R1.0
  Services (1/2)




                             Service
                             broker
                Lookup                          Register
                            Specification


                             Binding
                 Consumer                   Provider




Zenika © 2012                                              12
Specification R1.0
  Services (2/2)

       Publication
      PrintService service = new PrintServiceImpl();
      Dictionary<String, String> props = new Hashtable<String, String>();
      props.put("color", "true");
      sr = bundleContext.registerService(PrintService.class, service, props);

       Recherche
       ServiceReference<PrintService> serviceReference =
                bundleContext.getServiceReference(PrintService.class);

       // Si on trouve une référence, on récupère le service
       if (serviceReference != null) {
             PrintService printService = bundleContext.getService(serviceReference);
       }




Zenika © 2012                                                                          13
Specification R1.0
  Services additionnels

       LogService
               Implémentation de loggers dynamiques


       HttpService
               Service permettant d'enregistrer des servlets et des ressources et
                de les publier via HTTP


       Et quelques autres…




Zenika © 2012                                                                        14
Specifications R1.0
  Demo




Zenika © 2012           15
Specification R2.0
  Abstraction de la dynamicité

       BundleListener et ServiceListener : gestion bas niveau
               Exemple de complexité
                    Un bon gestionnaire de services nécessite la récupération des services existants
                     et ceux qui vont apparaitre ou disparaitre au « runtime »



       ServiceTracker
               Factorisation de la récupération des services et des notifications
               Possède des méthodes utilitaires
                PrintService service = serviceTracker.getService();

       BundleTracker sur le même principe
               Introduit lors d’une release postérieure



Zenika © 2012                                                                                           16
Specification R2.0
  Services additionnels (1/2)

       Configuration Admin Service
               Configuration dynamique d’un bundle
               Notification de la MAJ de la configuration
               Exemple
                    Chaque service JOnAS possède sa propre configuration
                    La présence d’une configuration déclenche le démarrage du service



       Metatype Service
               Description de la structure d’une configuration (types, valeurs par
                défaut, …)
               Utilisé par les interfaces d’administration par exemple




Zenika © 2012                                                                            17
Specifications R2.0
  Demo




Zenika © 2012           18
Eclipse 3.0


  2004 : Première version d’Eclipse basée sur OSGi
   Les plugins sont des bundles OSGi
   Exemple d’utilisation massive d’OSGi




Zenika © 2012                                        19
Specification R4.0
  Event Admin Service

       Basé sur le modèle publication-souscription d'évènements
        synchrones ou asynchrones

                                  postEvent
                                   (topics)
                                              EventAdmin
                Publisher
                                              « service »




                            EventHandler           handleEvent
                             « service »             (topics)



Zenika © 2012                                                      20
Specification R4.0
  Gestion de la complexité

       La plateforme OSGi permet de créer des applications
        dynamiques et extensibles
               Cependant, la gestion de la dynamicité est complexe
               Les développeurs veulent se focaliser sur le code métier et non sur
                les mécanismes OSGi de bas niveau


       Solutions : canevas d'exécution de composants orientés
        service
               Declarative Services (Compendium)




Zenika © 2012                                                                         21
Specification R4.0
  Declarative Services (1/2)

       Modèle de programmation par composants
               Composant DS : POJO Java
       Capacité d’un composant
               Possède son propre cycle de vie (dépend de l’état du bundle)
               Requière des services
                    L’activation d’un composant peut être liée à la résolution de ses dépendances de
                     service
               Fournit des services
               Possède une configuration
                    Intégration possible avec Configuration Admin Service
       Déclaration des composants
               XML
               Annotations
               Programmatique
Zenika © 2012                                                                                           22
Specification R4.0
  Implémentations

       Implémentations Declarative Services
               Apache Felix : Service Component Runtime (SCR)
               Eclipse Equinox : DS


       Ecosystème
               Chaque communauté implémente un ensemble de services
                Compendium
               Possible d’utiliser une implémentation différente du framework
                d’exécution




Zenika © 2012                                                                    23
Apache Felix iPOJO


       Alternative à Declarative Services
       Framework complet, léger et extensible
       Attention : non standard




Zenika © 2012                                    24
Specification R4.0
  Demo




Zenika © 2012          25
Serveurs d’applications Java EE


       2006 : premier prototype de JOnAS basé sur OSGi
       2008 : sortie de JOnAS 5
               Refonte complète de l’architecture
               Introduction de la notion de profils


       Passage des autres acteurs du marché à OSGi
               Glassfish, JBoss, Apache Geronimo, Websphere, …


       Introduction des modèles de programmation hybrides
        Java EE / OSGi
               Déploiement de WAR/JAR/EAR/RAR ou de bundles
               EJB exposés sous forme de services OSGi
               Récupération de services OSGi depuis JavaEE
Zenika © 2012                                                     26
Spring Dynamic Modules


       2008 : sortie de la version 1.0 de Spring DM
       Portage du modèle de programmation Spring sur OSGi
       Objectifs visés
               Abstraction d’OSGi aux développeurs d’applications Spring
                    Tire parti du standard sans être intrusif durant les développements
               Mais également possibilité d’interagir avec l’environnement OSGi
                depuis les applications
                    Beaucoup de serveur d’applications basés sur OSGi ne fournissait pas un
                     modèle de programmation OSGi au développeur
                    OSGi limité à l’architecture interne du produit




Zenika © 2012                                                                                  27
Specification R4.2
  Core et Compendium

       Service Hooks
               Spécification permettant d'interagir avec le « service engine »
               Connaître les services requis par les bundles
               Limiter la visibilité de certains services
               Mettre facilement en œuvre des proxies de services


       Remote Services
               Rendre accessible des services OSGi depuis un autre framework
                (serveur distant)
               Fournit un mécanisme d'exposition de services
               Création d'un endpoint par service
               Le protocole de communication n'est pas spécifié
                    Basé sur des technologies Web Service, JMS, ....


Zenika © 2012                                                                     28
Specification R4.2
  Enterprise (1/2)

       Première spécification délivrée en 2010 par l'OSGi Alliance
        Enterprise Expert Group (EEG)
               Bien que destinée à l'origine au domaine de l'embarqué, la
                spécification OSGi couvre désormais le domaine de l'entreprise
       Décrit un ensemble de services orientés « entreprise »
               JMX Management Model
               JDBC Service / JPA Service / JTA Transaction Service
               JNDI Service
               Web Applications
               …
       Permet aux applications OSGi de s'appuyer sur un modèle
        de développement basé sur des services Java EE
               Réutilisation de standards éprouvés en entreprise

Zenika © 2012                                                                    29
Specification R4.2
  Enterprise (2/2)

  Implémentations
   Apache Aries




       Eclipse Gemini




Zenika © 2012            30
Specification R4.2
  Enterprise (2/2)

  Blueprint
   Standard issu du modèle de programmation Spring
   Framework à composants
   Intégration plus poussée avec OSGi Enterprise


       Implémentations
               Apache Aries Blueprint
               Eclipse Gemini Blueprint
                    Suite à l’abandon de Spring DM par SpringSource en 2010, scission du projet en
                     Eclipse Blueprint et Eclipe Virgo




Zenika © 2012                                                                                         31
OSGi Kernels


       Frameworks OSGi comprenant un ensemble de
        fonctionnalités additionnelles
               Console, logging, provisioning, gestion des composants, extension
                du shell, sécurité, ...


       Apache Karaf




       Eclipse Virgo


Zenika © 2012                                                                       32
Specification R4.2
  Demo




Zenika © 2012          33
Specification R4.3
  Core (1/2)

       Bundle Wiring API




       Start Level API

Zenika © 2012               34
Specification R4.3
  Core (2/2)

       Weaving Hooks
               Permet d'intercepter le chargement de classe des bundles et de
                manipuler le bytecode avant chargement


       Resolver Hook
               Permet d'intercepter le mécanisme de résolution de packages et
                d'influencer le resolver
               Exemple : limiter la visibilité de certains packages


       Bundle Hook
               Permet d'intercepter les évènements du framework à propos du
                cycle de vie des bundles (Event Hook)
               Permet de limiter la visibilité de certains bundles (Find Hook)

Zenika © 2012                                                                     35
Specification R4.3
  Demo




Zenika © 2012          36
Specification R5.0
  Enterprise

       Resolver Service
               Utilisable par des outils d’administration pour calculer les
                ressources nécessaires au déploiement d’un bundle
               Simulation de l’impact d’une mise à jour


       Repository Service
               Standardisation de l’actuel OBR


       Subsystem
               Isolation d’un groupe de bundles
               Définition des interactions avec les autres bundles du framework



Zenika © 2012                                                                      37
Références


       Demo: https://github.com/fornacif/osgi-console.git


       OSGi Alliance : http://www.osgi.org
       OSGi Wiki : http://en.wikipedia.org/wiki/OSGi

       Apache Felix : http://felix.apache.org
       Apache Karaf : http://karaf.apache.org
       Apache Aries : http://aries.apache.org

       Eclipse Equinox : http://www.eclipse.org/equinox
       Eclipse Virgo : http://www.eclipse.org/virgo
       Eclipse Gemini : http://www.eclipse.org/gemini
       Eclipse Libra : http://www.eclipse.org/libra

       Bndtools : http://njbartlett.name/bndtools.html
Zenika © 2012                                                38
Zenika © 2012   39

Contenu connexe

Tendances

Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeksjviet
 
Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiComposants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiMadjid KETFI
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & TechniquesRachid NID SAID
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
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 JOnASGuillaume Sauthier
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSmartnSkilled
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation MavenSOAT
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
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'OfflineDNG Consulting
 

Tendances (20)

Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 
Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiComposants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGi
 
GWT Principes & Techniques
GWT Principes & TechniquesGWT Principes & Techniques
GWT Principes & Techniques
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
J2ee
J2eeJ2ee
J2ee
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
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
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
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
 

Similaire à Elsass JUG - OSGi

GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGCh'ti JUG
 
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 JonasMicrosoft
 
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...Microsoft Technet France
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Mickaël Rémond
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeMicrosoft
 
Chapitre7 introduction-j2 ee
Chapitre7 introduction-j2 eeChapitre7 introduction-j2 ee
Chapitre7 introduction-j2 eeimene2010
 
Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012Nicolas Capponi
 
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataDe A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataMicrosoft
 
Les vrais enjeux de l'IA.pdf
Les vrais enjeux de l'IA.pdfLes vrais enjeux de l'IA.pdf
Les vrais enjeux de l'IA.pdfBabacarDIOP48
 
Aspnetcore introduction
Aspnetcore introductionAspnetcore introduction
Aspnetcore introductionMichel Bruchet
 

Similaire à Elsass JUG - OSGi (20)

OUGF - Nouveautés OSGi Core 4.3
OUGF - Nouveautés OSGi Core  4.3OUGF - Nouveautés OSGi Core  4.3
OUGF - Nouveautés OSGi Core 4.3
 
Dev ops@kelkoo
Dev ops@kelkoo Dev ops@kelkoo
Dev ops@kelkoo
 
1 Introduction
1 Introduction1 Introduction
1 Introduction
 
Petals DSB - Current Status
Petals DSB - Current StatusPetals DSB - Current Status
Petals DSB - Current Status
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUG
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
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
 
Spring
SpringSpring
Spring
 
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...
System Center 2012 | Administrez vos clouds privé et public Windows Azure ave...
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity framework
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicative
 
Chapitre7 introduction-j2 ee
Chapitre7 introduction-j2 eeChapitre7 introduction-j2 ee
Chapitre7 introduction-j2 ee
 
Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012
 
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataDe A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
 
Les vrais enjeux de l'IA.pdf
Les vrais enjeux de l'IA.pdfLes vrais enjeux de l'IA.pdf
Les vrais enjeux de l'IA.pdf
 
Aspnetcore introduction
Aspnetcore introductionAspnetcore introduction
Aspnetcore introduction
 
Cours android
Cours androidCours android
Cours android
 
Cours Android
Cours AndroidCours Android
Cours Android
 

Elsass JUG - OSGi

  • 1. OSGi 11 octobre 2012 François Fornaciari Zenika © 2012 1
  • 2. François Fornaciari  Membre du Board de l’OSGi Users’ Group France  Consultant Zenika  Spécialiste Java EE / RIA  Formateur OSGi  Ancien développeur JOnAS  @fornacif  francois.fornaciari@zenika.com Zenika © 2012 2
  • 3. OSGi Définition « Une plate-forme de déploiement et d’exécution de services Java » Zenika © 2012 3
  • 4. OSGi Spécifications Standards décomposés en plusieurs volets  Core  Plateforme minimale  Détail du fonctionnent d’un framework OSGi  Définition des services obligatoires  Compendium  Définition de l’ensemble des services additionnels  Enterprise  Définition des services estampillés « Enterprise »  Portage de composants Java EE Zenika © 2012 4
  • 5. OSGi Historique  Fondation de l'OSGi Alliance en 1999  Historique des Releases R1.0 R2.0 R3.0 R4.0 • mai 2000 • octobre 2001 • mars 2003 • août 2005 R4.2 R4.2 R4.1 R4.0.1 Compendium Core • avril 2007 • juillet 2006 • août 2009 • juin 2009 R4.2 R4.3 R4.3 R5.0 Enterprise Core Compendium Core + Ent. • mars 2010 • avril 2011 • janvier 2012 • mars 2012 Zenika © 2012 5
  • 6. OSGi Objectifs  Modularité des applications  Meilleur découpage des applications  Isolation des modules  Chargement / déchargement de code sans interruption de la plate- forme  Résolution des dépendances versionnées de code  Architecture orientée service  Couplage faible  Configuration dynamique des applications  Exemple d’utilisation : architectures à base de plugins Zenika © 2012 6
  • 7. OSGi Implémentations open source  Apache Felix  Eclipse Equinox (RI)  Knopflerfish Zenika © 2012 7
  • 8. Specification R1.0 Bundle  Bundle  Unité de déploiement : JAR + MANIFEST  Unité fonctionnelle (offre des services) Provided res Required services classes services Exported Imported packages manifest packages  Application  Ensemble de bundles  Livrés dynamiquement  Eventuellement partagés avec d’autres applications Zenika © 2012 8
  • 9. Specification R1.0 MANIFEST # Package(s) requis Import-Package: com.zenika.interface;version=1.1.0 # Package(s) fournis Export-Package: com.zenika.util;version=2.0.0 # Identifiant du bundle : unique pour la plate-forme Bundle-SymbolicName: com.zenika.example # Version du bundle Bundle-Version: 2.1.0 # Nom du bundle Bundle-Name: Exemple # Nom de la classe Activator (équivalent de la classe Main) Bundle-Activator: com.zenika.internal.Activator Zenika © 2012 9
  • 10. Specification R1.0 BundleActivator  Interface BundleActivator import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public void start(BundleContext bundleContext) throws Exception { Bundle[] bundles = bundleContext.getBundles(); for (Bundle bundle : bundles) { System.out.println(bundle.getSymbolicName()); } } public void stop(BundleContext bundleContext) throws Exception { System.out.println("Bundle is stopping"); } } Zenika © 2012 10
  • 11. Specification R1.0 BundleContext Point d'accès vers le framework OSGi  Un BundleContext par bundle  Enregistrement de services  Recherche de services  Souscription aux évènements du framework  FrameworkListener, BundleListener, ServiceListener  Accès au framework  Liste des bundles / services disponibles  Installation / mise à jour / désinstallation de bundles Zenika © 2012 11
  • 12. Specification R1.0 Services (1/2) Service broker Lookup Register Specification Binding Consumer Provider Zenika © 2012 12
  • 13. Specification R1.0 Services (2/2)  Publication PrintService service = new PrintServiceImpl(); Dictionary<String, String> props = new Hashtable<String, String>(); props.put("color", "true"); sr = bundleContext.registerService(PrintService.class, service, props);  Recherche ServiceReference<PrintService> serviceReference = bundleContext.getServiceReference(PrintService.class); // Si on trouve une référence, on récupère le service if (serviceReference != null) { PrintService printService = bundleContext.getService(serviceReference); } Zenika © 2012 13
  • 14. Specification R1.0 Services additionnels  LogService  Implémentation de loggers dynamiques  HttpService  Service permettant d'enregistrer des servlets et des ressources et de les publier via HTTP  Et quelques autres… Zenika © 2012 14
  • 15. Specifications R1.0 Demo Zenika © 2012 15
  • 16. Specification R2.0 Abstraction de la dynamicité  BundleListener et ServiceListener : gestion bas niveau  Exemple de complexité  Un bon gestionnaire de services nécessite la récupération des services existants et ceux qui vont apparaitre ou disparaitre au « runtime »  ServiceTracker  Factorisation de la récupération des services et des notifications  Possède des méthodes utilitaires PrintService service = serviceTracker.getService();  BundleTracker sur le même principe  Introduit lors d’une release postérieure Zenika © 2012 16
  • 17. Specification R2.0 Services additionnels (1/2)  Configuration Admin Service  Configuration dynamique d’un bundle  Notification de la MAJ de la configuration  Exemple  Chaque service JOnAS possède sa propre configuration  La présence d’une configuration déclenche le démarrage du service  Metatype Service  Description de la structure d’une configuration (types, valeurs par défaut, …)  Utilisé par les interfaces d’administration par exemple Zenika © 2012 17
  • 18. Specifications R2.0 Demo Zenika © 2012 18
  • 19. Eclipse 3.0 2004 : Première version d’Eclipse basée sur OSGi  Les plugins sont des bundles OSGi  Exemple d’utilisation massive d’OSGi Zenika © 2012 19
  • 20. Specification R4.0 Event Admin Service  Basé sur le modèle publication-souscription d'évènements synchrones ou asynchrones postEvent (topics) EventAdmin Publisher « service » EventHandler handleEvent « service » (topics) Zenika © 2012 20
  • 21. Specification R4.0 Gestion de la complexité  La plateforme OSGi permet de créer des applications dynamiques et extensibles  Cependant, la gestion de la dynamicité est complexe  Les développeurs veulent se focaliser sur le code métier et non sur les mécanismes OSGi de bas niveau  Solutions : canevas d'exécution de composants orientés service  Declarative Services (Compendium) Zenika © 2012 21
  • 22. Specification R4.0 Declarative Services (1/2)  Modèle de programmation par composants  Composant DS : POJO Java  Capacité d’un composant  Possède son propre cycle de vie (dépend de l’état du bundle)  Requière des services  L’activation d’un composant peut être liée à la résolution de ses dépendances de service  Fournit des services  Possède une configuration  Intégration possible avec Configuration Admin Service  Déclaration des composants  XML  Annotations  Programmatique Zenika © 2012 22
  • 23. Specification R4.0 Implémentations  Implémentations Declarative Services  Apache Felix : Service Component Runtime (SCR)  Eclipse Equinox : DS  Ecosystème  Chaque communauté implémente un ensemble de services Compendium  Possible d’utiliser une implémentation différente du framework d’exécution Zenika © 2012 23
  • 24. Apache Felix iPOJO  Alternative à Declarative Services  Framework complet, léger et extensible  Attention : non standard Zenika © 2012 24
  • 25. Specification R4.0 Demo Zenika © 2012 25
  • 26. Serveurs d’applications Java EE  2006 : premier prototype de JOnAS basé sur OSGi  2008 : sortie de JOnAS 5  Refonte complète de l’architecture  Introduction de la notion de profils  Passage des autres acteurs du marché à OSGi  Glassfish, JBoss, Apache Geronimo, Websphere, …  Introduction des modèles de programmation hybrides Java EE / OSGi  Déploiement de WAR/JAR/EAR/RAR ou de bundles  EJB exposés sous forme de services OSGi  Récupération de services OSGi depuis JavaEE Zenika © 2012 26
  • 27. Spring Dynamic Modules  2008 : sortie de la version 1.0 de Spring DM  Portage du modèle de programmation Spring sur OSGi  Objectifs visés  Abstraction d’OSGi aux développeurs d’applications Spring  Tire parti du standard sans être intrusif durant les développements  Mais également possibilité d’interagir avec l’environnement OSGi depuis les applications  Beaucoup de serveur d’applications basés sur OSGi ne fournissait pas un modèle de programmation OSGi au développeur  OSGi limité à l’architecture interne du produit Zenika © 2012 27
  • 28. Specification R4.2 Core et Compendium  Service Hooks  Spécification permettant d'interagir avec le « service engine »  Connaître les services requis par les bundles  Limiter la visibilité de certains services  Mettre facilement en œuvre des proxies de services  Remote Services  Rendre accessible des services OSGi depuis un autre framework (serveur distant)  Fournit un mécanisme d'exposition de services  Création d'un endpoint par service  Le protocole de communication n'est pas spécifié  Basé sur des technologies Web Service, JMS, .... Zenika © 2012 28
  • 29. Specification R4.2 Enterprise (1/2)  Première spécification délivrée en 2010 par l'OSGi Alliance Enterprise Expert Group (EEG)  Bien que destinée à l'origine au domaine de l'embarqué, la spécification OSGi couvre désormais le domaine de l'entreprise  Décrit un ensemble de services orientés « entreprise »  JMX Management Model  JDBC Service / JPA Service / JTA Transaction Service  JNDI Service  Web Applications  …  Permet aux applications OSGi de s'appuyer sur un modèle de développement basé sur des services Java EE  Réutilisation de standards éprouvés en entreprise Zenika © 2012 29
  • 30. Specification R4.2 Enterprise (2/2) Implémentations  Apache Aries  Eclipse Gemini Zenika © 2012 30
  • 31. Specification R4.2 Enterprise (2/2) Blueprint  Standard issu du modèle de programmation Spring  Framework à composants  Intégration plus poussée avec OSGi Enterprise  Implémentations  Apache Aries Blueprint  Eclipse Gemini Blueprint  Suite à l’abandon de Spring DM par SpringSource en 2010, scission du projet en Eclipse Blueprint et Eclipe Virgo Zenika © 2012 31
  • 32. OSGi Kernels  Frameworks OSGi comprenant un ensemble de fonctionnalités additionnelles  Console, logging, provisioning, gestion des composants, extension du shell, sécurité, ...  Apache Karaf  Eclipse Virgo Zenika © 2012 32
  • 33. Specification R4.2 Demo Zenika © 2012 33
  • 34. Specification R4.3 Core (1/2)  Bundle Wiring API  Start Level API Zenika © 2012 34
  • 35. Specification R4.3 Core (2/2)  Weaving Hooks  Permet d'intercepter le chargement de classe des bundles et de manipuler le bytecode avant chargement  Resolver Hook  Permet d'intercepter le mécanisme de résolution de packages et d'influencer le resolver  Exemple : limiter la visibilité de certains packages  Bundle Hook  Permet d'intercepter les évènements du framework à propos du cycle de vie des bundles (Event Hook)  Permet de limiter la visibilité de certains bundles (Find Hook) Zenika © 2012 35
  • 36. Specification R4.3 Demo Zenika © 2012 36
  • 37. Specification R5.0 Enterprise  Resolver Service  Utilisable par des outils d’administration pour calculer les ressources nécessaires au déploiement d’un bundle  Simulation de l’impact d’une mise à jour  Repository Service  Standardisation de l’actuel OBR  Subsystem  Isolation d’un groupe de bundles  Définition des interactions avec les autres bundles du framework Zenika © 2012 37
  • 38. Références  Demo: https://github.com/fornacif/osgi-console.git  OSGi Alliance : http://www.osgi.org  OSGi Wiki : http://en.wikipedia.org/wiki/OSGi  Apache Felix : http://felix.apache.org  Apache Karaf : http://karaf.apache.org  Apache Aries : http://aries.apache.org  Eclipse Equinox : http://www.eclipse.org/equinox  Eclipse Virgo : http://www.eclipse.org/virgo  Eclipse Gemini : http://www.eclipse.org/gemini  Eclipse Libra : http://www.eclipse.org/libra  Bndtools : http://njbartlett.name/bndtools.html Zenika © 2012 38