SlideShare une entreprise Scribd logo
1  sur  223
Télécharger pour lire hors ligne
La plate-forme
     dynamique de service
           OSGi™



              Didier Donsez
      Université Joseph Fourier (Grenoble 1)
         PolyTech’Grenoble LIG/ADELE
          Firstname.Lastname@imag.fr
         Firstname.Lastname@ieee.org

http://membres-liglab.imag.fr/donsez/cours/osgi.pdf
Sommaire



          Motivations et Rappels
          Conditionnement et Service
          Enregistrement et recherche de services
          Composants
          Services standards (survol)
          Acteurs, Concurrences et Perspectives




© 2001-2008, D. Donsez          OSGi                3
Qu’est ce que OSGi™ ?



          Spécification OSGi
                définit un canevas de déploiement et d’exécution de services Java
                multi-fournisseur, télé-administré
                Cible initiale : set top box, modem cable, ou une passerelle
                résidentielle dédiée.



          OSGi Alliance
                Corporation indépendante
                Soutenus par les acteurs majeurs des IT, home/building
                automation, telematics (car automation), …
                de la téléphonie mobiles (Nokia et Motorola)

                et Eclipse pour les plugins de son IDE !
                et maintenant Apache pour ses serveurs

© 2001-2008, D. Donsez                    OSGi                                      5
Qu’est ce que OSGi™ ?



          Histoire
                Mars 1999 : Fondation de l’OSGi Alliance
                Novembre 1999: SUN transfère le JSR008 du JCP à OSGi
                                                   OPEN SERVICES GATEWAY INITIATIVE (OSGi) TO DRIVE
                1.0 : Mai 2000 (189 pages)          DEVELOPMENT OF GATEWAY STANDARD FOR HOMES,
                2.0 : Octobre 2001 (288 pages)                  SOHO AND REMOTE LOCATIONS
                                                     Sun's Java™ Technology Accelerates Development of
                3.0 : Mars 2003 (602 pages)                                Specification
                                                 PALO ALTO, Calif., - November 22, 1999 - Open Services
                4.0: Octobre 2005 (1000 pages) Gateway Initiative (OSGi) and Sun Microsystems, Inc. announced
                4.1: Juin 2007 (optimisation du core that Sun has transferred Java™ Communityan open to the
                                                 today R4)
                                                 gateway specification from the
                                                                                the effort to define
                                                                                                     Process
                                                         Open Services Gateway Initiative. …



          Remarque
                Open Services Gateway Initiative est un terme obsolète




© 2001-2008, D. Donsez                            OSGi                                               6
L’ancêtre :
                 JSR-8 : Open Services Gateway (OSG)


          Java Embedded Server
                JavaOne e-Fridge


          Domain : SOHO / ROBO Gateway
          EG
                Spec leader : Robert Mines (Sun)
                Sun Microsystems, IBM, Nortel, Alcatel, Cable and Wireless, EDF, Enron,
                Ericsson, Lucent, Motorola, NCI, Phillips, Sybase, Toshiba


          Package names
                javax.osg.servicespace
                javax.osg.remote
                javax.osg.service

          Transfered to the OSGi Alliance


© 2001-2008, D. Donsez                       OSGi                                         7
Principales propriétés
                               du canevas OSGi


          Modularisation des applications
                Chargement/Déchargement de code dynamique
                     Langage Java
                Déploiement dynamique d’applications
                sans interruption de la plateforme
                     Installation, Lancement, Mise à jour, Arrêt, Retrait
                     « No reboot »
                Résolution des dépendances versionnées de code
          Architecture orientée service
                Couplage faible, late-binding
                Reconfiguration dynamique des applications (plugins, services techniques)
          Vise des systèmes à mémoire restreinte
                s’accroche à J2ME/CDC
                même si de plus en plus Java Platform 1.5, 6, 7, …




© 2001-2008, D. Donsez                         OSGi                                     8
Rappel sur les chargeurs de classes



          java.lang.ClassLoader
                 Objet (java) chargé de charger en mémoire la définition des
                classes (.class)

          Principe de la délégation
                Tout chargeur a un chargeur parent
                     sauf le chargeur primordial
                Tout chargeur vérifie si la classe à charger
                n’a pas déjà été chargée par un chargeur parent

          Arbre de délégation basique
                ClassLoader bootstrap ou primordial
                sun.misc.Launcher$ExtClassLoader (extension)
                sun.misc.Launcher$AppClassLoader (application ou system)
                Possibilité de personnaliser les chargeurs


© 2001-2008, D. Donsez                    OSGi                                 9
Rappel sur les chargeurs de classes
             Pourquoi utiliser les chargeurs de classes


          Classes non présentes dans le CLASSPATH ou le $JAVA_HOME/lib/ext
                URLClassLoader, AppletClassLoader, RMIClassLoader…
                     ex: WEB-INF/classes et WEB-INF/lib d’une WebApp
                     ex: CODEBASE d’une applet, …
          Emballage particulier
                JavaEE EAR, OSGi bundle (fichiers JAR imbriqués), java.util.jar.Pack200, Google
                Android DEX format …
          Modification du ByteCode à la volée au chargement
                Instrumentation
                      AOP (Aspect Oriented Programming)
                      BCEL, ASM, …
                Protection
          Chargement de ressources associées à la classe
                properties, images, …
          Déchargement et Mise à jour du bytecode
              lors de l’exécution de la VM (runtime)
                Chargeurs de OSGi



© 2001-2008, D. Donsez                           OSGi                                             10
Rappel sur les chargeurs de classes
             Pourquoi NE PAS utiliser les chargeurs de classes



          Beaucoup trop complexe pour le commun des
          mortels (et également pour les autres)


          Indispensable de comprendre le fonctionnement !


          Car malheureusement beaucoup bricolent avec !




© 2001-2008, D. Donsez               OSGi                        11
Rappel sur la programmation OO
                          « programming in the small »


          Un client C invoque N fois
          la méthode execute() d’un serveur S

          S s=new S()
          C c1=new C(s, N);
          C c2=new C(s, N);



          Problème: Architecture ? Configuration ?



© 2001-2008, D. Donsez                  OSGi              12
Rappel sur la programmation Composant
                         « programming in the large »



          Un client C invoque N fois
          la méthode execute() d’un serveur S
                                             nloop               S
          S s=SFactory.create()
          C c1=SFactory.create();
          C c2=SFactory.create();
          c1.setProperty("nloop",N);          C BC AC LC                   C BC AC LC
          c1.bind("S",s);
          c2.setProperty("nloop",N);
          c2.bind("S",s);                        Client                       Server
                                                           y.Y       y.Y
          s.start()
          c1.start();
          c2.start();
          …


© 2001-2008, D. Donsez                OSGi                                              13
Rappel sur la programmation Composant



          …
          S s2=SFactory.create()
          c2.stop();
          c2.bind("S",s2);
          s2.start()
          c2.start();




          Problème: Multi-domaines d’administration
                carte GSM SIM, WS, iTV STB, passerelle domotique, …




© 2001-2008, D. Donsez                      OSGi                      14
Rappel:
                         Architecture orienté service (SOA)
                         « programming in the VERY large »


          Les services (contrats)      sont « invariants »

                                             Service
                                             Service
                                             Registry
                                             Registry
                     search

                                                             register




                           Service
                           Service               bind                   Service
                                                                         Service
                          Consumer
                          Consumer               invoke
                                                                        Provider
                                                                        Provider
                                                                         servant




          WebServices, TORBA, …
© 2001-2008, D. Donsez                    OSGi                                     15
Rappel:
                              SOA Dynamique

          Arrivée dynamique de nouveaux services


                                          Service
                                          Service
                                          Registry
                                          Registry
                          notify


                                                             register



                          Service
                          Service       bind/invoke                     Service
                                                                         Service
                         Consumer
                         Consumer         bind/in                       Provider
                                                                        Provider
                                                                          Service
                                                                          Service
                                                    v ok e
                                                                         Provider
                                                                          Provider
          JINI, UPnP, OpenWings                                         Acme.com
                                                                        Acme.com
          OSGi
© 2001-2008, D. Donsez                OSGi                                           16
Rappel:
                               SOA Dynamique

          Retrait dynamique de services utilisés


                                            Service
                                            Service
                                            Registry
                                            Registry
                          notify
                                                               unregister




                          Service
                          Service          bind/invoke                 Service
                                                                        Service
                         Consumer
                         Consumer           bind/in                    Provider
                                                                       Provider
                                                                         Service
                                                                         Service
                                                      v ok e
                                                                        Provider
                                                                         Provider
          JINI, UPnP, OpenWings                                        Acme.com
                                                                       Acme.com
          OSGi
© 2001-2008, D. Donsez                  OSGi                                        17
Dynamic Service Platform Zoo


                                                            Registry          Programming
                           Invocation       Removal
                                                              Type              Language

                            Remote                        Distributed
          JINI                                Lease                              Java
                              (RMI)                         (ad-hoc)

                            Remote                        Distributed
     OpenWings                              Connector                            Java
                          (RMI IIOP )                          (?)

       CORBA                Remote                        Distributed
                                               No                                 all
      CosTrading             (IIOP)                            (?)

                            Remote                        Distributed
       UPnP V1                             Message Bye                            all
                          (HTTP/SOAP1.0)                    (ad-hoc)

    Web Services            Remote             No        Centralized (UDDI)
                                                          WS-Discovering
                                                                                  all
         DPWS            (HTTP/SOAP1.2)    Message Bye

    SLP / DNSSD                 /          Message Bye    Distributed             all
                             Locale
         OSGi                              Java Event     Centralized            Java
                           (Référence)
© 2001-2008, D. Donsez                        OSGi                                          18
OSGi




 Modèle d’administration
et Domaines d’application
Domaines d’application



          Initialement, Systèmes embarqués
                Véhicule de transport (automotive)
                Passerelle résidentiel/domotique/immotique
                Contrôle industriel
                Téléphonie mobile


          Cependant
                Tout concepteur d’application est gagnant à distribuer
                son application sous forme de plugins
                conditionnés dans des bundles OSGi


                Cela évite l’enfer du CLASSPATH
                         CLASSPATH, lib/ext du JRE ou JavaEE, …
          Maintenant
                Eclipse RCP, JavaEE, Harmony JRE pieces, …

© 2001-2008, D. Donsez                         OSGi                      20
Architecture générale

                                                                       Serveur       Serveur       Serveur
                                                                     Fournisseur   Fournisseur   Fournisseur
                                                                      de service    de service    de service
                                                                       (société      (hôpital)   (distributeur
                                                                    gardiennage)                  électricité)



         Usager/Agent
          hors foyer


                          Contrôle climatisation
           Compteur électrique




                                                   Bundles                          Console
                                            ® Adele, 2002               WEB
                        Réseau                                      Déploiement
          surveillance Domotique
            Camera

                                                Passerelle OSGi
                                                                    Interactions
                                                                                     Serveur
  Usager                                                                            Opérateur
                Centrale
                 alarme
                                                                                      de la
                           Moniteur cardiaque                                       Passerelle
© 2001-2008, D. Donsez                                       OSGi                                        21
Architecture générale (i)
                                         Déploiement

                                                                       Serveur       Serveur       Serveur
                                                                     Fournisseur   Fournisseur   Fournisseur
                                                                      de service    de service    de service
                                                                       (société      (hôpital)   (distributeur
                                                                    gardiennage)                  électricité)




                          Contrôle climatisation
           Compteur électrique




                                                   Bundles                          Console
                                            ® Adele, 2002               WEB
                        Réseau                                      Déploiement
          surveillance Domotique
            Camera

                                                Passerelle OSGi
                                                                                     Serveur
 Usager/                                                                            Opérateur
  Patient       Centrale
                 alarme
                                                                                      de la
                           Moniteur cardiaque                                       Passerelle
© 2001-2008, D. Donsez                                       OSGi                                        22
Architecture générale (ii)
                                        Interactions

                                                                       Serveur       Serveur       Serveur
                                                                     Fournisseur   Fournisseur   Fournisseur
                                                                      de service    de service    de service
                                                                       (société      (hôpital)   (distributeur
                                                                    gardiennage)                  électricité)



         Usager/Agent
          hors foyer


                          Contrôle climatisation
           Compteur électrique




                                                   Bundles                          Console
                                            ® Adele, 2002               WEB
                        Réseau
          surveillance Domotique
            Camera
                                                                    Interactions
                                                Passerelle OSGi
                                                                                     Serveur
 Usager/                                                                            Opérateur
  Patient       Centrale
                 alarme
                                                                                      de la
                           Moniteur cardiaque                                       Passerelle
© 2001-2008, D. Donsez                                       OSGi                                        23
Même architecture générale (iii)
                              Contexte différent

                                                                Service      Service      Service
                                                                Provider     Provider     Provider
                                                                (security   (equipment   (electricity
                                                                  firm)      provider)   company)



         User/operator
            outdoor


                               over temp.
 Operator        power meter




                                              Bundles                        Console
                                            ® Adele, 2002         WEB

          Security cam   Factory                               Deployment
                         Network
                                                   OSGi
                                             Service Gateway Interactions
                                                                             Gateway
                                                                             Operator
                 RFiD
                reader         Burglar
                                alarm
© 2001-2008, D. Donsez                                  OSGi                                     24
HVAC control
                  power meter
                                                                             Service         Service             Service
                                                                             Provider        Provider            Provider
                                                     gateway-side            Servers         Servers             Servers
                                                       services
                                                   ® Adele, 2002             (security        (hospital)        (electricity
                                                                               firm)                            company)
                                 Adhoc                                        JavaEE           JavaEE             JavaEE
                                                                              servers          servers            servers
                                Network
            security cam      (UPnP,DPWS)
                                                       OSGi gateway

                                                                         enterprise-side   enterprise-side   enterprise-side
 Customer/
                                                                            services          services          services
  Patient           burglar
                     alarm
                                  ECG monitor




                           User/operator
                             outdoor
                                                    mobile-side
                                                                                           Management
                                                     services                                Console

                                                                                                JavaEE
                                                                                                servers


                                     oven temp.
  Operator            power meter


                                                                                           operator-side
                                                     gateway-side
                                                                                             services
                                                       services
                                                   ® Adele, 2002                            Operator
                                                                                           Management
                                Factory                                                      Servers
            security cam        Network
                               (DPWS, …)
                                                       OSGi gateway



                     RFiD
                    reader          burglar
© 2001-2008, D. Donsez               alarm
                                                                      OSGi                                                     25
Même architecture générale (iv)
                              Contexte différent

                                                                 Mission     Mission    Mission
                                                                 center      center     center
                                                                (imaging    (weather   (scientific
                                                                  firm)     conpany)     labs)




                               over temp.
                 power meter




                                              Bundles          Space Web    Console
                                            ® Adele, 2002
                         Satellite
             IR cam
                         Network                               Deployment
                         (1553)                    OSGi
                                             Service Gateway Interactions
                                                                             Control
               HR cam                                                        center
          Satellite            Magneto
                                meter
© 2001-2008, D. Donsez                                  OSGi                                   26
Application à la Distribution Electrique
                           chez Schneider Electric

                                                Fournisseurs de services à valeur ajoutée
                                                                     (fabricant, intégrateur)


                                                                            Web



                           Administrateur

                            Superviseur                                                              Notation
                                                    Intranet / VPN

                Fabrique                                                                            P Passerelle
                                                                                                       OSGi
                   Réseau de terrain                                    Réseau de terrain
                                            P                                                   P
                           A C C                                             A C C                  C    Capteur
                                            P                                                   P
                       AC     A C                                            C    AC    C           A    Actionneur

                     Réseau de distribution électrique                                              AC   Capteur+
Distributeur
                                                                                                         Actionneur
d’électricité

© 2001-2008, D. Donsez                                                    OSGi                                        27
Diagnostic de véhicules
                                       à distance


          Aujourd’hui la part de l’électronique dans la conception d’un véhicule est de 35%.
                90% des innovations se font dans le domaine électronique

          Cependant 50% des pannes sont provoquées par des défaillances dans ce domaine.




© 2001-2008, D. Donsez                                        OSGi                             28
Personal gateway



          Human
                Cardiac patient, Baby, Prisoner, Soldier on battle field

          Gateway (cell phone, watch, bracelet …)
          Between
                wearable Sensors
                    ECG, Sphygmomanometer, GPS/GSM, …
                and wearable actuators
                         PaceMaker, Heart Defibrillator, Tourniquet (garotte),
          and providers
                Emergency team, Parents, Prison service, Army , …




© 2001-2008, D. Donsez                         OSGi                              30
Exemple de Scénario
                           Le photocopieur en location


          Le photocopieur est installé en location chez le client
          Le loueur (est une organisme financier) facture mensuellement
          à la consommation
                Fixe mensuel + tarif par feuille
          Le loueur sous-traite la maintenance simple à une société
          spécialisée
          La société de maintenance réalise un diagnostic à distance
          avant d’envoyer un agent
          L’agent de maintenance interroge sur place le logiciel de
          diagnostic
          Le fabricant peut mettre à jour le logiciel embarqué
                RICOH (26% copier market share) inclut une passerelle OSGi dans ses
                photocopieurs (en 2006).
                         http://www2.osgi.org/wiki/uploads/Conference/OSGiCommunityBushnaq.pdf


© 2001-2008, D. Donsez                            OSGi                                           35
Exemple de Scénario
                                Le photocopieur en location


           (c) Didier Donsez, 2004
             Customer
             Customer                                               Manufacturer
                                          install and start the
                                           new version of the
                                                                    Manufacturer
                                             diagnotic tools

                                          update the version
                                           on the panel GUI
                                                 core



                                           add a custom tab
                                           (ie plugin) to the
                                               panel GUI

                                                                      Renter
                                                                      Renter
                                            start the scanner
                                          function and the mail
                                          function of the copier


                                           subscribe ($€£) to the
                                           scanner function and
                                          the mail function of my
                                                   copier
© 2001-2008, D. Donsez                          OSGi                               36
Le M2M (Machine-to-Machine)




                           OSGi




© 2001-2008, D. Donsez                OSGi         Taken from the JES book 37
OSGi




Conditionnement, Déploiement
          et Service
Rappel :
                   Une application Java non modulaire


          Ensemble de jarfiles
                placés statiquement dans le CLASSPATH ou $JRE_HOME/lib/ext




                                     JVM + JRE

© 2001-2008, D. Donsez                  OSGi                                 39
Bundle



          Bundle
                Unité de livraison et de déploiement sous forme de jarfile
                Unité fonctionnelle (offre des services)

          Application
                « Ensemble » de bundles
                         livrés dynamiquement
                         et éventuellement partagés avec d’autres applications




                                              OSGi

                                            JVM + JRE

© 2001-2008, D. Donsez                        OSGi                               40
Structure d’un bundle




                                                     Ressources


                                        1011
                                        0110
                  Services              1110
                                                                   Services
                                         .class
                  fournis                 1011
                                          0110                     requis
                                          1110
                                            .class
                                        1011

                Packages
                                        0110
                                        1110                        Packages
                                                        manifest
                exportés
                                         .class
                                                                    importés

                             Activateur +       Fichier Manifest
                             objets métiers qui
                             implémentent les services

© 2001-2008, D. Donsez                                OSGi                     41
Cycle de vie d’un Bundle (R4)

                                                                            Transition explicite
                                                                            Transition automatique
                                                                              3 nouveaux états dans R4.1
                         install                                              •START_ACTIVATION_POLICY
                                                                  update      •START_TRANSIENT
                                                                              •STOP_TRANSIENT
                                                                  refresh
                           INSTALLED
                            INSTALLED
                                                                            STARTING
                                                                            STARTING
                           resolve




                                                 refresh
                                                 update
                                                                  start
           uninstall




                                                                              ACTIVE
                                                                              ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                        stop
                                     uninstall




                                                                            STOPPING
                                                                            STOPPING

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                     OSGi                                            44
Cycle de vie d’un Bundle


                                                                             Transition explicite
                                                                             Transition automatique
                         install
                                                                    update
                                                                    refresh
                                                              Le bundle a été
                                                              Le bundle a été
                           INSTALLED
                            INSTALLED                         Installé correctement
                                                              Installé correctement
                                                                                   STARTING
                                                                                   STARTING
                           resolve




                                                    refresh
                                                    update
                                                                     start
           uninstall




                                                                                      ACTIVE
                                                                                      ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                                stop
                                        uninstall




                                                                                   STOPPING
                                                                                   STOPPING

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                        OSGi                                     45
Cycle de vie d’un Bundle


                                                                             Transition explicite
                                                                             Transition automatique
                         install
                                                                     update
                                                                     refresh
                           INSTALLED
                            INSTALLED
                                                                                   STARTING
                                                                                   STARTING
                           resolve




                                                    refresh
                                                    update
                                                                     start
           uninstall




                                                                                      ACTIVE
                                                                                      ACTIVE
                           RESOLVED
                           RESOLVED
                                              Toutes les classes que
                                              Toutes les classes que                            stop
                                        uninstall




                                              nécessite le bundle sont
                                              nécessite le bundle sont
                                              Disponibles, il peut
                                              Disponibles, il peut                 STOPPING
                                              démarrer
                                                                                   STOPPING
                                              démarrer

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                        OSGi                                     46
Cycle de vie d’un Bundle


                                                                             Transition explicite
                                                                             Transition automatique
                         install
                                                                     update
                                                                     refresh
                           INSTALLED
                            INSTALLED
                                  Le bundle démarre,
                                  Le bundle démarre,
                                           il enregistre ses services,
                                            il enregistre ses services,            STARTING
                                                                                   STARTING
                           resolve




                                                    refresh
                                                    update
                                           et obtient les services dont
                                            et obtient les services dont
                                           il a besoin.
                                            il a besoin.
                                                                     start
           uninstall




                                                                                      ACTIVE
                                                                                      ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                                stop
                                        uninstall




                                                                                   STOPPING
                                                                                   STOPPING

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                        OSGi                                     47
Cycle de vie d’un Bundle


                                                                             Transition explicite
                                                                             Transition automatique
                         install
                                                                     update
                                                                     refresh
                           INSTALLED
                            INSTALLED
                                                                                   STARTING
                                                                                   STARTING
                           resolve




                                                    refresh
                                                    update
                                                                     start
           uninstall




                                                                                      ACTIVE
                                                                                      ACTIVE
                           RESOLVED
                           RESOLVED                                                          Le bundle est Actif
                                                                                             Le bundle est Actif
                                                                                                stop
                                        uninstall




                                                                                   STOPPING
                                                                                   STOPPING

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                        OSGi                                             48
Cycle de vie d’un Bundle


                                                                             Transition explicite
                                                                             Transition automatique
                         install
                                                                     update
                                                                     refresh
                           INSTALLED
                            INSTALLED
                                                                                     STARTING
                                                                                     STARTING
                           resolve




                                                    refresh
                                                    update
                                                                     start
           uninstall




                                                                                      ACTIVE
                                                                                      ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                                stop
                                        uninstall




                                                                                     STOPPING
                                                                                     STOPPING
                                                                Le bundle arrête,
                                                                 Le bundle arrête,
                                                                il desenregistre
                                                                 il desenregistre
                         UNINSTALLED
                         UNINSTALLED                            ses services.
                                                                 ses services.
© 2001-2008, D. Donsez                                        OSGi                                     49
Cycle de vie d’un Bundle


                                                                              Transition explicite
                                                                              Transition automatique
                         install
                                                                      update
                                                                      refresh
                           INSTALLED
                            INSTALLED
                                                                                    STARTING
                                                                                    STARTING
                           resolve




                                                     refresh
                                                     update
                                        Retour à l’état
                                        Retour à l’état               start
           uninstall




                                        Resolved
                                        Resolved
                                                                                       ACTIVE
                                                                                       ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                                 stop
                                         uninstall




                                                                                    STOPPING
                                                                                    STOPPING

                         UNINSTALLED
                         UNINSTALLED
© 2001-2008, D. Donsez                                         OSGi                                     50
Cycle de vie d’un Bundle


                                                                               Transition explicite
                                                                               Transition automatique
                         install
                                                                       update
                                                                       refresh
                           INSTALLED
                            INSTALLED
                                                                                      STARTING
                                                                                      STARTING
                           resolve




                                                    refresh
                                                    update
                                                                       start
           uninstall




                                                                                        ACTIVE
                                                                                        ACTIVE
                           RESOLVED
                           RESOLVED
                                                                                                  stop
                                        uninstall




                                                                                      STOPPING
                                                                                      STOPPING

                         UNINSTALLED
                         UNINSTALLED
                                                              Le bundle est désinstallé, il
                                                              Le bundle est désinstallé, il
© 2001-2008, D. Donsez                                        ne OSGi plus changer d’état.
                                                              ne peut plus changer d’état.
                                                                 peut                                    51
News in R4.1



          By default, persistent start and stop
          Transient start and stop
                Bundle.start(int transientFlag) and Bundle.stop(int transientFlag)
                    Flag sample: do not restart after FW restart (ie do no alter the
                    autostart settin of the bundle)


          By default, « Eager » activation
                The BundleActivator is instanciated when Bundle.start()
          Lazy Activation
                The bundle is activate when a exported class is required by an other
                bundles
                    new bundle event (lazy activated)
                     : useful for extender model
          A lire
                http://www2.osgi.org/wiki/uploads/Conference/OSGi4.1Overview.pdf



© 2001-2008, D. Donsez                          OSGi                                   52
Dépendance & Dynamisme




           Administrateur                            Notification
                                                     d’un nouveau
                                                     service
                            1                2
  > start 5
  > uninstall 3


                                  5                                 Service fourni
                                                                    Service requis
                                                 4                  Package exporté
                            3
                                                                    Package importé

                                                              Notification
                                                              Dépendance de packages
                                                              Dépendance de services
© 2001-2008, D. Donsez                OSGi                                           53
Dépendance & Dynamisme




           Administrateur


                            1                2
  > start 5
  > uninstall 3


                                  5                        Service fourni
                                                           Service requis
                                                 4         Package exporté
                                                           Package importé

                                                     Notification
                                                     Dépendance de packages
                                                     Dépendance de services
© 2001-2008, D. Donsez                OSGi                                  54
Dépendance & Dynamisme




           Administrateur


                                                            Service relaché puis relié
                            1                       2
  > update 4
  > refresh


                                         5                                   Service fourni
                                                                             Service requis
                                                        4                    Package exporté
                                                                             Package importé
              Bundle/Service redémarré
                                                                       Notification
                                                                       Dépendance de packages
                                                                       Dépendance de services
© 2001-2008, D. Donsez                       OSGi                                             55
Service



          Une interface (ou plusieurs)
          Des implémentations
                multiples implémentations possibles
                         conditionnées dans les bundles.
                implémentation normalement non publique.
                se trouvent dans des packages différents

          Qualifié par des propriétés.
                                                      Classe d’implémentation
                                             com.hp.printer.laserjet.impl.Driver
                  Interface
org.device.print.PrintService                         org.device.print.type=laser
                                                           location=4th floor
                                                      Classe d’implémentation
                                            com.lexmark.printer.laser.impl.Driver
                  Interface
org.device.print.PrintService                         org.device.print.type=laser
© 2001-2008, D. Donsez                   OSGi
                                                           location=1st floor       56
Exemple de service


                           Interface
       org.device.print.PrintService




                    package org.device.print;
                    public interface PrintService {
                         public int print(OutputStream out,
                                             String[] printparams)
                                    throws PrintException;
                         public Job[] list()
                                    throws PrintException;
                    }
                    public interface Job[] { … }


                    public class PrintException extends Exception { … }



© 2001-2008, D. Donsez                     OSGi                           57
Exemple d’application


                         org.device.print.PrintService
                                                                        HP
                                                                        HP
                                                                      Deskjet
                                                                      Deskjet
                                                                      Printer
                                                                      Printer
                                       type=bubble
                                       dpi=72,150,300,600,1200,2400
                                       color=16777216
                                       location=1st floor
           Text
           Text
          Editor
          Editor                                                      Lexmark
                                                                      Lexmark
                                                                       Laser
                                                                        Laser
                                       type=laser
                                       dpi=72,150,300,600,1200
                                                                       Printer
                                                                       Printer
                                       location=1st floor



                                       type=laser
                                                                      HP
                                                                       HP                           PrintService
                                                                                                    PrintService
      Service fourni                                              OfficeDesk
                                                                  OfficeDesk
                                       dpi=72,150,300,600,1200                                       Interface
                                                                                                      Interface
      Service requis                   location=4th floor
                                                                  FaxPrinter
                                                                  FaxPrinter
      Package exporté
                                                                                                    FaxService
                                                                                                    FaxService
      Package importé
                                                                                                     Interface
                                                                                                      Interface
                                                                        org.device.fax.FaxService
© 2001-2008, D. Donsez                                   OSGi                                                 58
.mf   Fichier manifest (i)



          Informations nécessaires au framework
   Import-Package
                                    Packages requis (avec/sans la version de spécification)
   Export-Package
                                    Packages fournis (avec/sans la version de spécification)
   Import-Service
                                    Services requis (indicatif, n’est pas utilisé par le FW)          r3
   Export-Service
                                    Services fournis (indicatif, n’est pas utilisé par le FW)         r3

   Bundle-Activator
                                    Nom de la classe Activator

   Bundle-ClassPath
                                    Emplacement des classes et ressources du bundle
   Bundle-NativeCode
                                    Bibliothéques natives à charger en fonction du processeur, du SE, …

   Bundle-UpdateLocation
                                    URL des mises à jour du bundle


© 2001-2008, D. Donsez                       OSGi                                                     59
by
                         .mf   Fichier manifest (ii)                                 ild 2
                                                                                   Bu en
                                                                                       v
                                                                                    Ma



          Informations nécessaires au framework
   Bundle-SymbolicName           r4   Nom symbolique du bundle (sert à l’identification)
   Bundle-Name                        Nom du bundle
   Bundle-Description                 Description du bundle
   Bundle-Version                     Version du bundle
   Bundle-DocURL                      URL de la documentation du bundle
   Bundle-ContactAddress              Coordonnée du propriétaire du bundle
   Bundle-Category                    Catégorie du bundle

   Bundle-RequiredExecution           Liste d’environnement qui doivent être présents sur la plateforme
   Environment            r3          ( exemple : CDC-1.0/Foundation-1.0, OSGi/Minimum-1.0 )

                                      Liste de package qui pourront être importés en cours d’exécution
   DynamicImport-Package
© 2001-2008, D. Donsez           r3            OSGi
                                      (com.acme.plugin.*)                                         60
.mf     Exemple de manifest (i)


                               org.device.print.PrintService
                                                                            HP
                                                                            HP
                                                                          Deskjet
                                                                          Deskjet
                                                                          Printer
                                                                          Printer
                                                                  Export-Package: org.device.print; 1.1
                                                                  Bundle-Name: PrintService
           Text
           Text                                                   Bundle-Version: 2.0.1
          Editor
          Editor                                                         Lexmark
                                                                         Lexmark
                                                                          Laser
                                                                           Laser
                                                               Export-Package: org.device.fax; 1.1
                                                                          Printer
                                                                          Printer
                                                               Bundle-Name: FaxService
                                                               Bundle-Version: 3.2.0
                                                                            HP
                                                                             HP                           PrintService
                                                                                                          PrintService
                                                                        OfficeDesk
                                                                        OfficeDesk                         Interface
                                                                                                            Interface
                                                                        FaxPrinter
                                                                        FaxPrinter
                                                                                                          FaxService
                                                                                                          FaxService
                                                                                                           Interface
                                                                                                            Interface
                                                                            org.device.fax.FaxService
© 2001-2008, D. Donsez                                         OSGi                                                 61
.mf   Exemple de manifest (ii)

        Import-Package: org.osgi.framework;1.3
        org.device.print; 1.0,org.device.print.PrintService             HP
                                                                        HP
        Export-Service:                                               Deskjet
                                                                      Deskjet
                                                                            Import-Package: org.osgi.framework;1.3
        org.device.print.PrintService,                                Printer
                                                                      Printer
                                                                            org.device.print; 1.1,
        Bundle-Activator:                                                    org.device.fax; 1.1
        com.hp.printer.deskjet.impl.Activator                                Export-Service:
           Text
        Bundle-Name: HP Deskjet Printer
           Text                                                              org.device.print.PrintService,
          Editor
          Editor                                                      Lexmark
                                                                      Lexmarkorg.device.fax.FaxService
                                                                       LaserBundle-Activator:
                                                                        Laser
                                                                       Printer
                                                                       Printer
                                                                             com.hp.printer.officedesk.impl.Activator
                                                                             Bundle-Name: HP OfficeDesk FaxPrinter

                                                                         HP
                                                                          HP                          PrintService
                                                                                                      PrintService
                                                                     OfficeDesk
                                                                     OfficeDesk                        Interface
                                                                                                        Interface
                                                                     FaxPrinter
                                                                     FaxPrinter
                                                                                                      FaxService
                                                                                                      FaxService
                                                                                                       Interface
                                                                                                        Interface
                                                                        org.device.fax.FaxService
© 2001-2008, D. Donsez                                        OSGi                                               62
.mf    Exemple de manifest (iii)


                               org.device.print.PrintService
                                                                         HP
                                                                         HP
                                                                       Deskjet
                                                                       Deskjet
                                                                       Printer
                                                                       Printer


           Text
           Text
          Editor
          Editor                                                       Lexmark
                                                                       Lexmark
                                                                        Laser
                                                                         Laser
                                                                        Printer
                                                                        Printer
               Import-Package: org.osgi.framework;1.3
                org.device.print; 1.0
                                                                          HP
                                                                           HP                        PrintService
                                                                                                     PrintService
               Import-Service:
               org.device.print.PrintService                          OfficeDesk
                                                                      OfficeDesk                      Interface
                                                                                                       Interface
               Bundle-Activator:
                                                                      FaxPrinter
                                                                      FaxPrinter
               org.eclipse.texteditor.impl.Activator                                                 FaxService
                                                                                                     FaxService
               Bundle-Classpath: .;/lib/resources.jar                                                 Interface
                                                                                                       Interface
               Bundle-Name: TextEditor
                                                                         org.device.fax.FaxService
© 2001-2008, D. Donsez                                         OSGi                                            63
Chargement de classes (i)



          1 ClassLoader par Bundle
                Chargement, Mise à Jour, Déchargement
          Principe de la recherche des classes
                La classe est dans le JRE
                La classe est dans un package ni importé ni exporté
                         Utilisation de la classe chargée à partir du BUNDLE-CLASSPATH
                La classe est dans un package importé
                         Utilisation de la classe chargée par le CL d’un autre bundle
                La classe est dans un package exporté mais déjà exporté par un autre
                bundle
                         Utilisation de la classe chargée par le CL de l’autre bundle
                La classe est dans un package exporté mais non exporté par un autre
                         Utilisation de la classe chargée à partir du BUNDLE-CLASSPATH



© 2001-2008, D. Donsez                            OSGi                                   64
Chargement de classes (ii)

                                                      D’après la release3 d’OSGi




       A importe                                            B utilise
      javax.comm                                          javax.servlet
                                                          exporté par A

© 2001-2008, D. Donsez                OSGi                                 65
Les limites             r3




          Pas d’activation tant que tous les imports ne sont pas résolus
          Un service package actif à la fois
          Compatibilité ascendance à assurer Ad vitam eternam

                                    org.device.print.PrintService
                         Editor
                         Editor                                           Printer
                                                                          Printer
                                     org.device.print; spec-version=1.0
                          1.0
                          1.0                                               1.0
                                                                            1.0



                                    org.device.print.PrintService
                         Editor
                         Editor                                           Printer
                                                                          Printer
                                     org.device.print; spec-version=1.1
     Service fourni       1.1
                          1.1                                               1.1
                                                                            1.1
     Service requis
     Package exporté
     Package importé

© 2001-2008, D. Donsez                    OSGi                                      66
Les avancés


    r3    R3
                Importation dynamique
     r4   R4
                Bundle fragment
                Bundle requis
                Bundle extension
                Intervalle de version, Politiques sur les versions
                Importation et Exportation conditionnelles (attribut et filtre)
                Activation simultanée de plusieurs version de packages
          La suite : le JSR 277, JSR 294 …



                Richard S. Hall, “Java modularity, OSGi, and JSRs 277, 291, and 294”,
                ApacheCon EU 2006
                http://docs.safehaus.org/download/attachments/2995/osgi-apachecon-20060628.pdf


© 2001-2008, D. Donsez                          OSGi                                             67
R3                           DynamicImport-Package



          Permet en cours d’exécution d’importer des
          packages non présents à la résolution
                         activator.getClass().getClassLoader().loadClass(clazzname)
                         Surtout pas Class.forName(clazzname)


          L’entrée DynamicImport-Package du mainfeste liste
          les packages qui pourront être importés en cours
          d’exécution


          Usage : framework à plugin ou service provider
                Exemple : JMF, JCE, JDBC, …


© 2001-2008, D. Donsez                        OSGi                                    68
DynamicImport-Package
R3
                                Exemple avec JMF (i)


          Installation de bundle 2
                il passe à l’état ACTIVE              myClassLoader.loadClass("com.acme.mp3.MP3Decoder")
                                                      throws java.lang.NoClassDefFoundError


           Bundle 1                                Bundle 2
         implementing                               using
             JMF                                     JMF

     BundleClassLoader                       BundleClassLoader
                               javax.media

                         .mf                 Import-Package: .mf
     Export-Package:                            javax.media
      javax.media                            DynamicImport-Package:
                                                com.acme.*
© 2001-2008, D. Donsez                              OSGi                                              69
DynamicImport-Package
R3
                                Exemple avec JMF (ii)


          Installation de bundle 3 : il passe à l’état ACTIVE
                                             myClassLoader.loadClass("com.acme.mp3.MP3Decoder")
                                             add a package dependency
                                             then return the class

           Bundle 1                                 Bundle 2                            Bundle 3
         implementing                                using                              providing
             JMF                                      JMF                              JMF codecs

     BundleClassLoader                       BundleClassLoader                    BundleClassLoader
                               javax.media                          com.acme.mp3

                         .mf                 Import-Package: .mf                  Import-Package: .mf
     Export-Package:                            javax.media                          javax.media
      javax.media                            DynamicImport-Package:               Export-Package:
                                                com.acme.*                          com.acme.mp3,
                                                                                    com.acme.wave 70
© 2001-2008, D. Donsez                               OSGi
Importation et Exportation conditionnelles                                    r4




          Motivation
                La compatibilité descendante (backward compatibility) est lourde à maintenir
                (surtout en embarqué).
                Les @deprecated disparaissent parfois lors des chargements des majeures de
                versions
          Idées
                Intervalle de version
                Import-Package:
                 javax.servlet; version="[2.0.0,2.4.0)"; resolution="optional"
          Autres
                Export-Package:
                org.foo.service; version=1.1; vendor="org.foo",
                org.foo.service.bar; version=1.1; uses="org.foo.service",
                org.foo.service.fizz; include:="*Impl"; exclude:="Test*"

                Richard S. Hall, Java Modularity Support in OSGi R4, ApacheCon (San Diego),
                December 14th, 2005
                         http://docs.safehaus.org/download/attachments/2995/osgi-apachecon-20051214.pdf



© 2001-2008, D. Donsez                              OSGi                                                  71
Accès aux ressources et aux fichiers



          Ressources
                this.getClass().getRessourceAsStream(String path)
                  path="/" correspond à la racine du JAR (BUNDLE-CLASSPATH)


          Support de persistance
                BundleContext.getDataFile(String path)
                  path="" correspond à la racine du cache du bundle
                FileService
                  accès au système de fichier local (s’il existe !)
                  et contrôle les permissions du Bundle au passage




© 2001-2008, D. Donsez                      OSGi                              72
.mf
                                  Bundle-Classpath



          Représente (dans le manifeste) les chemins (dans le JAR)
          de recherche des classes et des ressources
          3 cas
                Bundle-Classpath: . ou Pas de Bundle-Classpath
                    Recherche dans le JAR
                Bundle-Classpath: .;demo/nested.jar;test/nest.jar
                    Recherche dans le JAR puis dans le JAR inclus
                Bundle-Classpath: demo/nested.jar
                         Recherche dans le JAR inclus
                         Aucune classe ou ressource n’est recherchée dans le JAR


          Intérêt des JAR inclus
                Conservation des signatures, manifestes, …
                Possibilité de patcher un sous ensemble des ressources/classes !




© 2001-2008, D. Donsez                          OSGi                               73
.mf
                                  Bibliothèques natives



          Bibliothèques de fonctions natives (C)
               dépendantes du processeur et de l’OS
                Exemple : Pilotes matériel (javax.comm), Patrimonial (codec), …
          Bundle-NativeCode dans le MANIFEST
                Spécifie l’emplacement des bibliothèques dépendantes du système et du
                processeur, à charger dynamiquement (par le ClassLoader)
                Exemple
                         Bundle-NativeCode: com/mycomp/impl/nativesample/libnat.so;
                                       osname=Solaris; processor=sparc; osversion=5.5,
                             com/mycomp/impl/nativesample/libnat.so;
                                       osname=SunOS; processor=sparc; osversion=2.5,
                             com/mycomp/impl/nativesample/nat.dll;
                                       osname=Windows NT; processor=x86; osversion=4.0
          Remarque : Propriétés du framework
                org.osgi.framework.processor, org.osgi.framework.language, org.osgi.framework.os.name,
                org.osgi.framework.os.version
© 2001-2008, D. Donsez                               OSGi                                                74
La classe d’activation du bundle



          Classe publique
                Implémente les 2 méthodes start() et stop() de BundleActivator
                qui reçoivent une référence sur un contexte.
          start(BundleContext ctxt)
                recherche et obtient des services requis auprès du contexte
                et/ou positionne des listeners sur des événements
                enregistre les services fournis auprès du contexte
          stop(BundleContext ctxt)
                désenregistre les services fournis
                relâche les services requis
                         Cependant le FW fait ces opérations si stop() en oublie !
              il peut ne pas y avoir de BundleActivator dans un bundle
                Livraison de classes et ressources
                Eclipse extension points
                Extender model
© 2001-2008, D. Donsez                           OSGi                                75
BundleContext



          Interface vers le framework
                Passé lors des invocations de start() et stop() de l’Activator
          Permet
                L’enregistrement de services
                Le courtage de services
                L’obtention et la libération des services
                La souscription aux évènements du Framework.
                L’accès aux ressources du bundle
                L’accès aux propriétés du framework
                L’installation de nouveaux bundles
                L’accès à la liste des bundles



© 2001-2008, D. Donsez                     OSGi                                  76
BundleContext et Activator


                                  Bundle
                                  Context



                Service Bundles




                                                           Bundle
                                                          Activator

                     •registerService()
                     •getServiceReferences()       •start(BundleContext bc)
                     •getService()                 •stop(BundleContext bc)
                     •getDataFile()                •serviceChanged()
                     •addServiceListener()
                     •addBundleListener()
                     •addFrameworkListener()
© 2001-2008, D. Donsez                      OSGi                              77
Enregistrement de services
                        (Lexmark Laser Printer)


     package com.lexmark.printer.laser.impl;
     public class Activator implements BundleActivator {
                  private ServiceRegistration reg=null;
                  private PrintService theService=null;
                  public void start(BundleContext ctxt) throws BundleException {
                           theService=new PrintServiceImpl();
                           Properties props=new Properties();
                           props.put("type", "laser");
                           props.put("dpi", "72,150,300,600,1200");
                           props.put("location", "1st floor");
                           reg=ctxt.registerService(
                                      "org.device.print.PrintService", theService, props);
                  }
                  public void stop(BundleContext ctxt) throws BundleException {
                           if(reg != null) reg.unregister();
                  }
     }
© 2001-2008, D. Donsez                           OSGi                                        78
Recherche de services
                                (TextEditor)


         package org.eclispe.texteditor.impl
         import org.device.print.PrintService;
         class Activator implements BundleActivator {
            public void start(BundleContext ctxt) throws BundleException {
                     private PrintService ser;
                     // On va voir si quelqu'un offre un PrintService ...
                     ServiceReference[] tempRefs
                               =ctxt.getServiceReferences
                               ("org.device.print.PrintService","(location=1st floor)");
                     if(tempRefs!=null) {
                        System.out.println("Found a PrintService! I will use it!!!");
                        // On prend le premier offert!
                        ser=(PrintService) ctxt.getService(tempRefs[0]);
                     }
                     …
            }
            …
         }
© 2001-2008, D. Donsez                          OSGi                                       79
Recherche (Courtage) de services



           Filtrage par des expressions de condition LDAP
           (RFC1960) sur les propriétés enregistrées par les
           services
           Expressions de filtrage
                Expressions simples (attribut opérateur valeur)
                Valeurs de type String, Numerique, Character, Boolean,
                Vector, Array
                Attribut insensible aux majuscules/minuscules
                L’attribut objectClass représente le nom du service
                Opérateurs >=, <=, =, ~= (approximativement égal), =*
                (présent)
                Connecteurs logiques &, |, !


© 2001-2008, D. Donsez                    OSGi                           80
Recherche de services



           Tous les services d’impression
            refs=bundleContext.getServiceReferences("org.device.print.PrintService", null);
            refs=bundleContext.getServiceReferences(null,
                         "(objectClass=org.device.print.PrintService)");
           Certains services d’impression
            refs=bundleContext.getServiceReferences("org.device.print.PrintService",
                         "(&(!(type=laser))(capability=double-sided)(!(dpi<=300))(location=*)" );
           Tous les services de org.device
            refs=bundleContext.getServiceReferences(null,"(objectClass=org.device.*)");
           Le service d’impression et de fax au 3ième étage
            refs=bundleContext.getServiceReferences(null,
               "(&(objectClass=org.device.print.PrintService)(objectClass=org.device.fax.FaxService)"
               + "(location=4th floor))" );

© 2001-2008, D. Donsez                           OSGi                                                   81
Comparaison
                             avec le courtage de JINI


          JINI                                           OSGi
                 Typage fort sur le nom de                 Typage sur le nom de
                 l’interface et la signature de            l’interface
                 ces méthodes
                 Sous-typage des interfaces                Non
                 Propriétés de courtage                    Oui


                 Distribué                                 Centralisé (même JVM)
                 Notion de groupe                          Non
                 Bail (lease) d’un                         Non
                 enregistrement




© 2001-2008, D. Donsez                            OSGi                             82
Événements
                                dans le Framework


          FrameworkEvent
                Notifie le démarrage et les erreurs du Framework
                interface FrameworkListener méthode frameworkEvent
                  Traitement séquentiel et asynchrone des listeners (par event dispatcher)
          BundleEvent
                Notifie les changements dans le cycle de vie des bundles
                interface BundleListener méthode bundleChanged
                  Traitement séquentiel et asynchrone des listeners (par event dispatcher)
                interface SynchronousBundleListener méthode bundleChanged
                  Traitement séquentiel et synchrone des listeners (avant le traitement du        R2
                      changement d’état)
          ServiceEvent
                Notifie l’enregistrement ou le retrait de services
                interface ServiceListener méthode serviceChanged
                  Traitement séquentiel et synchrone des listeners
© 2001-2008, D. Donsez                         OSGi                                          83
Service Registry Hooks (RFC 126 R4.2)
                      org.osgi.framework.hooks


          Hooks on the service registry operations


          PublishHook
                Bundles registering this service will be called during framework service publish
                (register, modify, and unregister service) operations. This method is called prior to
                service event delivery when a publishing bundle registers, modifies or unregisters a
                service and can filter the bundles which receive the event.
          FindHook
                Bundles registering this service will be called during framework service find (get
                service references) operations. This method is called during the service find operation
                by the finding bundle and can filter the result of the find operation.
          ListenerHook
                Bundles registering this service will be called during service listener addition and
                removal. The hook is notified of the collection of service listeners and what they may
                be listening for and well as future changes to that collection.




© 2001-2008, D. Donsez                            OSGi                                                    84
Prendre en compte l’enregistrement
                         et le retrait de service (i)


          Les bundles « requesters » doivent impérativement prendre en compte
          l’enregistrement et le retrait de services « importés »
          Exemple
            public class PrintListenerActivator implements BundleActivator {
                PrintServiceListener listener = null;
                public void start(BundleContext context) {
                           PrintServiceListener listener = new PrintServiceListener(context);
                           context.addServiceListener(listener);
                }
                public void stop(BundleContext context) {
                           context.removeServiceListener(listener);
                }
            }
© 2001-2008, D. Donsez                            OSGi                                          85
Prendre en compte l’enregistrement
                            et le retrait de service (ii)

          Exemple simpliste et inutile
            class PrintServiceListener implements ServiceListener {
             public void serviceChanged(ServiceEvent e) {
              ServiceReference ref = e.getServiceReference();
              if(((String)ref.getProperty("objectClass").equals("org.device.print.PrintService"))){
                switch (e.getType()) {
                case ServiceEvent.REGISTERED:
                   println(ref + " has been registered by "+ ref.getBundle().getLocation()); break;
                case ServiceEvent.UNREGISTERING:
                                                                                                     Ajout de
                   println(ref + " is being unregistered"); break;                     ServiceEvent.MODIFIED_ENDMATCH
                                                                                                     en R4.2
                case ServiceEvent.MODIFIED:
                   println("properties of "+ref+" have been modified:");
                   String[] keys = ref.getPropertyKeys();
                   for (int i=0; i<keys.length; i++) println(keys[i] + "=" + ref.getProperty(keys[i])); break;
                } }}
             void println(String msg) {System.out.println("events: "+msg); } }
© 2001-2008, D. Donsez                                  OSGi                                                        86
Prendre en compte l’enregistrement
                         et le retrait de service (iii)

          Exemple 2 :
            public class Activator implements BundleActivator {
             final static String filterStr
                             ="(&(objectClass=org.device.print.PrintService)(location=4th floor))";
              Map/*<ServiceReference,PrintService>*/ printservices;
              BundleContext context;
               public void start(BundleContext context) throws BundleException {
                   this.context=context;
                   printservices=new HashMap();
                   BindingController ctlr=new BindingController(context,filterStr,printservices);
                   ctlr.open();
                   context.addServiceListener(ctlr);
               }


© 2001-2008, D. Donsez                            OSGi                                                87
Prendre en compte l’enregistrement
                        et le retrait de service (iv)

     public class BindingController implements ServiceListener {
       Map/*<ServiceReference,Object>*/ services;
       String filterStr;
       Filter filter;
       BundleContext context;

        public BindingController(BundleContext context, String filterStr, Map services){
          this.context=context;
          this.filterStr=filterStr;
          this.services=services;
          filter=context.createFilter(filterStr);
        }



© 2001-2008, D. Donsez                     OSGi                                            88
Prendre en compte l’enregistrement
                        et le retrait de service (v)

     …
       public void open() {
           // fill the services map
           ServiceReference[] refs=context.getServiceReferences(null,filterStr);
           for(int i=0;i<refs.length;i++){
               Object svc = context.getService(refs[i]);
               if(svc!=null) services.put(refs[i],svc);
           }
       }
     public void close() {
       // release the references to service
          …
       }
     …


© 2001-2008, D. Donsez                          OSGi                               89
Prendre en compte l’enregistrement
                        et le retrait de service (vi)

         …
         public void serviceChanged(ServiceEvent e) {
           ServiceReference servref = e.getServiceReference();
           Object ref;
           switch (e.getType()) {
           case ServiceEvent.REGISTERED:
             if(filter.match(servref)){
                 println(servref + " (from "+ servref.getBundle().getLocation() + ") is added");
                 services.put(servref,context.getService(servref));
              };
              break;
     …



© 2001-2008, D. Donsez                            OSGi                                             90
Prendre en compte l’enregistrement
                       et le retrait de service (vii)

            ….
           case ServiceEvent.UNREGISTERING:
             ref=services.remove(servref);
             if(ref!=null) {
                println(servref + " is removed");
                context.ungetService(servref);
             } break;
           case ServiceEvent.MODIFIED:
             ref=services.get(servref);
             if(ref!=null && !filter.match(servref)){
                println(servref + " is removed since properties has changed");
                services.remove(servref);
                context.ungetService(servref);
             } break; }}
© 2001-2008, D. Donsez                      OSGi                                 91
Prendre en compte l’enregistrement
                       et le retrait de service (viii)

          Mini conclusion
                Vous avez suivi ?


                Et maintenant avec 6 services dont 3 obligatoires




© 2001-2008, D. Donsez                    OSGi                      92
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi

Contenu connexe

Tendances

Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiComposants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiMadjid KETFI
 
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
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaCamblor Frédéric
 
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
 
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
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
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
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation MavenSOAT
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
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
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystémeAlgeria JUG
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 

Tendances (20)

Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGiComposants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGi
 
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
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets Java
 
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 ...
 
J2ee
J2eeJ2ee
J2ee
 
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
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
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
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
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
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 

En vedette

Presentation du programme d’education financiere des PME
Presentation du programme d’education financiere des PME Presentation du programme d’education financiere des PME
Presentation du programme d’education financiere des PME Impact Insurance Facility
 
Comparaison des plateformes didacti moodle
Comparaison des plateformes didacti moodleComparaison des plateformes didacti moodle
Comparaison des plateformes didacti moodleDorothée Danedjo Fouba
 
Joyería contemporánea
Joyería contemporáneaJoyería contemporánea
Joyería contemporáneaYOGENY
 
Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2Elvis Live
 
Presentación equipo no 2 (1)
Presentación  equipo no 2 (1)Presentación  equipo no 2 (1)
Presentación equipo no 2 (1)IvetTe Eli
 
“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011mind(21)factory
 
eStrategy Magazin Ausgabe 03-2016-Leseprobe
eStrategy Magazin Ausgabe 03-2016-LeseprobeeStrategy Magazin Ausgabe 03-2016-Leseprobe
eStrategy Magazin Ausgabe 03-2016-LeseprobeTechDivision GmbH
 
The business journey partner presentations_the auto-enrolment journey
The business journey partner presentations_the auto-enrolment journeyThe business journey partner presentations_the auto-enrolment journey
The business journey partner presentations_the auto-enrolment journeyMartin Jack
 
Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013Enrique Avogadro
 
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDSFAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDSMaurvi04
 
Big data
Big dataBig data
Big dataTaniaQu
 
Manual de identidad hit baby1
Manual de identidad hit baby1Manual de identidad hit baby1
Manual de identidad hit baby1Daniela R. Dioses
 
PORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEBPORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEBmishelldana
 

En vedette (20)

Presentation du programme d’education financiere des PME
Presentation du programme d’education financiere des PME Presentation du programme d’education financiere des PME
Presentation du programme d’education financiere des PME
 
Comparaison des plateformes didacti moodle
Comparaison des plateformes didacti moodleComparaison des plateformes didacti moodle
Comparaison des plateformes didacti moodle
 
Joyería contemporánea
Joyería contemporáneaJoyería contemporánea
Joyería contemporánea
 
Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2
 
Presentación equipo no 2 (1)
Presentación  equipo no 2 (1)Presentación  equipo no 2 (1)
Presentación equipo no 2 (1)
 
curso de html
curso de htmlcurso de html
curso de html
 
“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011
 
Final Thesis
Final ThesisFinal Thesis
Final Thesis
 
Top 10 senior construction property & recruitment roles in London
Top 10 senior construction property & recruitment roles in LondonTop 10 senior construction property & recruitment roles in London
Top 10 senior construction property & recruitment roles in London
 
1898 09
1898 091898 09
1898 09
 
OTP c200 How To
OTP c200 How ToOTP c200 How To
OTP c200 How To
 
ejemplo
ejemploejemplo
ejemplo
 
eStrategy Magazin Ausgabe 03-2016-Leseprobe
eStrategy Magazin Ausgabe 03-2016-LeseprobeeStrategy Magazin Ausgabe 03-2016-Leseprobe
eStrategy Magazin Ausgabe 03-2016-Leseprobe
 
The business journey partner presentations_the auto-enrolment journey
The business journey partner presentations_the auto-enrolment journeyThe business journey partner presentations_the auto-enrolment journey
The business journey partner presentations_the auto-enrolment journey
 
Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013
 
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDSFAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
 
Big data
Big dataBig data
Big data
 
Shaban CV (1)
Shaban CV (1)Shaban CV (1)
Shaban CV (1)
 
Manual de identidad hit baby1
Manual de identidad hit baby1Manual de identidad hit baby1
Manual de identidad hit baby1
 
PORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEBPORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEB
 

Similaire à La plateforme de services dynamiques OSGi

M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGiVelossity
 
Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012Didier Durand
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2OW2
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Catherine Nuel
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureGuillaume Laforge
 
Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0telosys
 
Sogeti telosys@md day2011
Sogeti telosys@md day2011Sogeti telosys@md day2011
Sogeti telosys@md day2011MDDAY11
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGilyonjug
 
French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0XebiaLabs
 
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
 

Similaire à La plateforme de services dynamiques OSGi (20)

M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
 
Introduction JavaEE
Introduction JavaEEIntroduction JavaEE
Introduction JavaEE
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 
Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012
 
#1 Introduction
#1 Introduction#1 Introduction
#1 Introduction
 
J2EE vs .NET
J2EE vs .NETJ2EE vs .NET
J2EE vs .NET
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
 
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
 
Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0
 
Sogeti telosys@md day2011
Sogeti telosys@md day2011Sogeti telosys@md day2011
Sogeti telosys@md day2011
 
Javaoop
JavaoopJavaoop
Javaoop
 
201003 OSGi
201003 OSGi201003 OSGi
201003 OSGi
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0
 
Javavs net
Javavs netJavavs net
Javavs net
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
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
 

La plateforme de services dynamiques OSGi

  • 1. La plate-forme dynamique de service OSGi™ Didier Donsez Université Joseph Fourier (Grenoble 1) PolyTech’Grenoble LIG/ADELE Firstname.Lastname@imag.fr Firstname.Lastname@ieee.org http://membres-liglab.imag.fr/donsez/cours/osgi.pdf
  • 2. Sommaire Motivations et Rappels Conditionnement et Service Enregistrement et recherche de services Composants Services standards (survol) Acteurs, Concurrences et Perspectives © 2001-2008, D. Donsez OSGi 3
  • 3. Qu’est ce que OSGi™ ? Spécification OSGi définit un canevas de déploiement et d’exécution de services Java multi-fournisseur, télé-administré Cible initiale : set top box, modem cable, ou une passerelle résidentielle dédiée. OSGi Alliance Corporation indépendante Soutenus par les acteurs majeurs des IT, home/building automation, telematics (car automation), … de la téléphonie mobiles (Nokia et Motorola) et Eclipse pour les plugins de son IDE ! et maintenant Apache pour ses serveurs © 2001-2008, D. Donsez OSGi 5
  • 4. Qu’est ce que OSGi™ ? Histoire Mars 1999 : Fondation de l’OSGi Alliance Novembre 1999: SUN transfère le JSR008 du JCP à OSGi OPEN SERVICES GATEWAY INITIATIVE (OSGi) TO DRIVE 1.0 : Mai 2000 (189 pages) DEVELOPMENT OF GATEWAY STANDARD FOR HOMES, 2.0 : Octobre 2001 (288 pages) SOHO AND REMOTE LOCATIONS Sun's Java™ Technology Accelerates Development of 3.0 : Mars 2003 (602 pages) Specification PALO ALTO, Calif., - November 22, 1999 - Open Services 4.0: Octobre 2005 (1000 pages) Gateway Initiative (OSGi) and Sun Microsystems, Inc. announced 4.1: Juin 2007 (optimisation du core that Sun has transferred Java™ Communityan open to the today R4) gateway specification from the the effort to define Process Open Services Gateway Initiative. … Remarque Open Services Gateway Initiative est un terme obsolète © 2001-2008, D. Donsez OSGi 6
  • 5. L’ancêtre : JSR-8 : Open Services Gateway (OSG) Java Embedded Server JavaOne e-Fridge Domain : SOHO / ROBO Gateway EG Spec leader : Robert Mines (Sun) Sun Microsystems, IBM, Nortel, Alcatel, Cable and Wireless, EDF, Enron, Ericsson, Lucent, Motorola, NCI, Phillips, Sybase, Toshiba Package names javax.osg.servicespace javax.osg.remote javax.osg.service Transfered to the OSGi Alliance © 2001-2008, D. Donsez OSGi 7
  • 6. Principales propriétés du canevas OSGi Modularisation des applications Chargement/Déchargement de code dynamique Langage Java Déploiement dynamique d’applications sans interruption de la plateforme Installation, Lancement, Mise à jour, Arrêt, Retrait « No reboot » Résolution des dépendances versionnées de code Architecture orientée service Couplage faible, late-binding Reconfiguration dynamique des applications (plugins, services techniques) Vise des systèmes à mémoire restreinte s’accroche à J2ME/CDC même si de plus en plus Java Platform 1.5, 6, 7, … © 2001-2008, D. Donsez OSGi 8
  • 7. Rappel sur les chargeurs de classes java.lang.ClassLoader Objet (java) chargé de charger en mémoire la définition des classes (.class) Principe de la délégation Tout chargeur a un chargeur parent sauf le chargeur primordial Tout chargeur vérifie si la classe à charger n’a pas déjà été chargée par un chargeur parent Arbre de délégation basique ClassLoader bootstrap ou primordial sun.misc.Launcher$ExtClassLoader (extension) sun.misc.Launcher$AppClassLoader (application ou system) Possibilité de personnaliser les chargeurs © 2001-2008, D. Donsez OSGi 9
  • 8. Rappel sur les chargeurs de classes Pourquoi utiliser les chargeurs de classes Classes non présentes dans le CLASSPATH ou le $JAVA_HOME/lib/ext URLClassLoader, AppletClassLoader, RMIClassLoader… ex: WEB-INF/classes et WEB-INF/lib d’une WebApp ex: CODEBASE d’une applet, … Emballage particulier JavaEE EAR, OSGi bundle (fichiers JAR imbriqués), java.util.jar.Pack200, Google Android DEX format … Modification du ByteCode à la volée au chargement Instrumentation AOP (Aspect Oriented Programming) BCEL, ASM, … Protection Chargement de ressources associées à la classe properties, images, … Déchargement et Mise à jour du bytecode lors de l’exécution de la VM (runtime) Chargeurs de OSGi © 2001-2008, D. Donsez OSGi 10
  • 9. Rappel sur les chargeurs de classes Pourquoi NE PAS utiliser les chargeurs de classes Beaucoup trop complexe pour le commun des mortels (et également pour les autres) Indispensable de comprendre le fonctionnement ! Car malheureusement beaucoup bricolent avec ! © 2001-2008, D. Donsez OSGi 11
  • 10. Rappel sur la programmation OO « programming in the small » Un client C invoque N fois la méthode execute() d’un serveur S S s=new S() C c1=new C(s, N); C c2=new C(s, N); Problème: Architecture ? Configuration ? © 2001-2008, D. Donsez OSGi 12
  • 11. Rappel sur la programmation Composant « programming in the large » Un client C invoque N fois la méthode execute() d’un serveur S nloop S S s=SFactory.create() C c1=SFactory.create(); C c2=SFactory.create(); c1.setProperty("nloop",N); C BC AC LC C BC AC LC c1.bind("S",s); c2.setProperty("nloop",N); c2.bind("S",s); Client Server y.Y y.Y s.start() c1.start(); c2.start(); … © 2001-2008, D. Donsez OSGi 13
  • 12. Rappel sur la programmation Composant … S s2=SFactory.create() c2.stop(); c2.bind("S",s2); s2.start() c2.start(); Problème: Multi-domaines d’administration carte GSM SIM, WS, iTV STB, passerelle domotique, … © 2001-2008, D. Donsez OSGi 14
  • 13. Rappel: Architecture orienté service (SOA) « programming in the VERY large » Les services (contrats) sont « invariants » Service Service Registry Registry search register Service Service bind Service Service Consumer Consumer invoke Provider Provider servant WebServices, TORBA, … © 2001-2008, D. Donsez OSGi 15
  • 14. Rappel: SOA Dynamique Arrivée dynamique de nouveaux services Service Service Registry Registry notify register Service Service bind/invoke Service Service Consumer Consumer bind/in Provider Provider Service Service v ok e Provider Provider JINI, UPnP, OpenWings Acme.com Acme.com OSGi © 2001-2008, D. Donsez OSGi 16
  • 15. Rappel: SOA Dynamique Retrait dynamique de services utilisés Service Service Registry Registry notify unregister Service Service bind/invoke Service Service Consumer Consumer bind/in Provider Provider Service Service v ok e Provider Provider JINI, UPnP, OpenWings Acme.com Acme.com OSGi © 2001-2008, D. Donsez OSGi 17
  • 16. Dynamic Service Platform Zoo Registry Programming Invocation Removal Type Language Remote Distributed JINI Lease Java (RMI) (ad-hoc) Remote Distributed OpenWings Connector Java (RMI IIOP ) (?) CORBA Remote Distributed No all CosTrading (IIOP) (?) Remote Distributed UPnP V1 Message Bye all (HTTP/SOAP1.0) (ad-hoc) Web Services Remote No Centralized (UDDI) WS-Discovering all DPWS (HTTP/SOAP1.2) Message Bye SLP / DNSSD / Message Bye Distributed all Locale OSGi Java Event Centralized Java (Référence) © 2001-2008, D. Donsez OSGi 18
  • 17. OSGi Modèle d’administration et Domaines d’application
  • 18. Domaines d’application Initialement, Systèmes embarqués Véhicule de transport (automotive) Passerelle résidentiel/domotique/immotique Contrôle industriel Téléphonie mobile Cependant Tout concepteur d’application est gagnant à distribuer son application sous forme de plugins conditionnés dans des bundles OSGi Cela évite l’enfer du CLASSPATH CLASSPATH, lib/ext du JRE ou JavaEE, … Maintenant Eclipse RCP, JavaEE, Harmony JRE pieces, … © 2001-2008, D. Donsez OSGi 20
  • 19. Architecture générale Serveur Serveur Serveur Fournisseur Fournisseur Fournisseur de service de service de service (société (hôpital) (distributeur gardiennage) électricité) Usager/Agent hors foyer Contrôle climatisation Compteur électrique Bundles Console ® Adele, 2002 WEB Réseau Déploiement surveillance Domotique Camera Passerelle OSGi Interactions Serveur Usager Opérateur Centrale alarme de la Moniteur cardiaque Passerelle © 2001-2008, D. Donsez OSGi 21
  • 20. Architecture générale (i) Déploiement Serveur Serveur Serveur Fournisseur Fournisseur Fournisseur de service de service de service (société (hôpital) (distributeur gardiennage) électricité) Contrôle climatisation Compteur électrique Bundles Console ® Adele, 2002 WEB Réseau Déploiement surveillance Domotique Camera Passerelle OSGi Serveur Usager/ Opérateur Patient Centrale alarme de la Moniteur cardiaque Passerelle © 2001-2008, D. Donsez OSGi 22
  • 21. Architecture générale (ii) Interactions Serveur Serveur Serveur Fournisseur Fournisseur Fournisseur de service de service de service (société (hôpital) (distributeur gardiennage) électricité) Usager/Agent hors foyer Contrôle climatisation Compteur électrique Bundles Console ® Adele, 2002 WEB Réseau surveillance Domotique Camera Interactions Passerelle OSGi Serveur Usager/ Opérateur Patient Centrale alarme de la Moniteur cardiaque Passerelle © 2001-2008, D. Donsez OSGi 23
  • 22. Même architecture générale (iii) Contexte différent Service Service Service Provider Provider Provider (security (equipment (electricity firm) provider) company) User/operator outdoor over temp. Operator power meter Bundles Console ® Adele, 2002 WEB Security cam Factory Deployment Network OSGi Service Gateway Interactions Gateway Operator RFiD reader Burglar alarm © 2001-2008, D. Donsez OSGi 24
  • 23. HVAC control power meter Service Service Service Provider Provider Provider gateway-side Servers Servers Servers services ® Adele, 2002 (security (hospital) (electricity firm) company) Adhoc JavaEE JavaEE JavaEE servers servers servers Network security cam (UPnP,DPWS) OSGi gateway enterprise-side enterprise-side enterprise-side Customer/ services services services Patient burglar alarm ECG monitor User/operator outdoor mobile-side Management services Console JavaEE servers oven temp. Operator power meter operator-side gateway-side services services ® Adele, 2002 Operator Management Factory Servers security cam Network (DPWS, …) OSGi gateway RFiD reader burglar © 2001-2008, D. Donsez alarm OSGi 25
  • 24. Même architecture générale (iv) Contexte différent Mission Mission Mission center center center (imaging (weather (scientific firm) conpany) labs) over temp. power meter Bundles Space Web Console ® Adele, 2002 Satellite IR cam Network Deployment (1553) OSGi Service Gateway Interactions Control HR cam center Satellite Magneto meter © 2001-2008, D. Donsez OSGi 26
  • 25. Application à la Distribution Electrique chez Schneider Electric Fournisseurs de services à valeur ajoutée (fabricant, intégrateur) Web Administrateur Superviseur Notation Intranet / VPN Fabrique P Passerelle OSGi Réseau de terrain Réseau de terrain P P A C C A C C C Capteur P P AC A C C AC C A Actionneur Réseau de distribution électrique AC Capteur+ Distributeur Actionneur d’électricité © 2001-2008, D. Donsez OSGi 27
  • 26. Diagnostic de véhicules à distance Aujourd’hui la part de l’électronique dans la conception d’un véhicule est de 35%. 90% des innovations se font dans le domaine électronique Cependant 50% des pannes sont provoquées par des défaillances dans ce domaine. © 2001-2008, D. Donsez OSGi 28
  • 27. Personal gateway Human Cardiac patient, Baby, Prisoner, Soldier on battle field Gateway (cell phone, watch, bracelet …) Between wearable Sensors ECG, Sphygmomanometer, GPS/GSM, … and wearable actuators PaceMaker, Heart Defibrillator, Tourniquet (garotte), and providers Emergency team, Parents, Prison service, Army , … © 2001-2008, D. Donsez OSGi 30
  • 28. Exemple de Scénario Le photocopieur en location Le photocopieur est installé en location chez le client Le loueur (est une organisme financier) facture mensuellement à la consommation Fixe mensuel + tarif par feuille Le loueur sous-traite la maintenance simple à une société spécialisée La société de maintenance réalise un diagnostic à distance avant d’envoyer un agent L’agent de maintenance interroge sur place le logiciel de diagnostic Le fabricant peut mettre à jour le logiciel embarqué RICOH (26% copier market share) inclut une passerelle OSGi dans ses photocopieurs (en 2006). http://www2.osgi.org/wiki/uploads/Conference/OSGiCommunityBushnaq.pdf © 2001-2008, D. Donsez OSGi 35
  • 29. Exemple de Scénario Le photocopieur en location (c) Didier Donsez, 2004 Customer Customer Manufacturer install and start the new version of the Manufacturer diagnotic tools update the version on the panel GUI core add a custom tab (ie plugin) to the panel GUI Renter Renter start the scanner function and the mail function of the copier subscribe ($€£) to the scanner function and the mail function of my copier © 2001-2008, D. Donsez OSGi 36
  • 30. Le M2M (Machine-to-Machine) OSGi © 2001-2008, D. Donsez OSGi Taken from the JES book 37
  • 32. Rappel : Une application Java non modulaire Ensemble de jarfiles placés statiquement dans le CLASSPATH ou $JRE_HOME/lib/ext JVM + JRE © 2001-2008, D. Donsez OSGi 39
  • 33. Bundle Bundle Unité de livraison et de déploiement sous forme de jarfile Unité fonctionnelle (offre des services) Application « Ensemble » de bundles livrés dynamiquement et éventuellement partagés avec d’autres applications OSGi JVM + JRE © 2001-2008, D. Donsez OSGi 40
  • 34. Structure d’un bundle Ressources 1011 0110 Services 1110 Services .class fournis 1011 0110 requis 1110 .class 1011 Packages 0110 1110 Packages manifest exportés .class importés Activateur + Fichier Manifest objets métiers qui implémentent les services © 2001-2008, D. Donsez OSGi 41
  • 35. Cycle de vie d’un Bundle (R4) Transition explicite Transition automatique 3 nouveaux états dans R4.1 install •START_ACTIVATION_POLICY update •START_TRANSIENT •STOP_TRANSIENT refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 44
  • 36. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh Le bundle a été Le bundle a été INSTALLED INSTALLED Installé correctement Installé correctement STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 45
  • 37. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED Toutes les classes que Toutes les classes que stop uninstall nécessite le bundle sont nécessite le bundle sont Disponibles, il peut Disponibles, il peut STOPPING démarrer STOPPING démarrer UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 46
  • 38. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED Le bundle démarre, Le bundle démarre, il enregistre ses services, il enregistre ses services, STARTING STARTING resolve refresh update et obtient les services dont et obtient les services dont il a besoin. il a besoin. start uninstall ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 47
  • 39. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED Le bundle est Actif Le bundle est Actif stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 48
  • 40. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING Le bundle arrête, Le bundle arrête, il desenregistre il desenregistre UNINSTALLED UNINSTALLED ses services. ses services. © 2001-2008, D. Donsez OSGi 49
  • 41. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update Retour à l’état Retour à l’état start uninstall Resolved Resolved ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED © 2001-2008, D. Donsez OSGi 50
  • 42. Cycle de vie d’un Bundle Transition explicite Transition automatique install update refresh INSTALLED INSTALLED STARTING STARTING resolve refresh update start uninstall ACTIVE ACTIVE RESOLVED RESOLVED stop uninstall STOPPING STOPPING UNINSTALLED UNINSTALLED Le bundle est désinstallé, il Le bundle est désinstallé, il © 2001-2008, D. Donsez ne OSGi plus changer d’état. ne peut plus changer d’état. peut 51
  • 43. News in R4.1 By default, persistent start and stop Transient start and stop Bundle.start(int transientFlag) and Bundle.stop(int transientFlag) Flag sample: do not restart after FW restart (ie do no alter the autostart settin of the bundle) By default, « Eager » activation The BundleActivator is instanciated when Bundle.start() Lazy Activation The bundle is activate when a exported class is required by an other bundles new bundle event (lazy activated) : useful for extender model A lire http://www2.osgi.org/wiki/uploads/Conference/OSGi4.1Overview.pdf © 2001-2008, D. Donsez OSGi 52
  • 44. Dépendance & Dynamisme Administrateur Notification d’un nouveau service 1 2 > start 5 > uninstall 3 5 Service fourni Service requis 4 Package exporté 3 Package importé Notification Dépendance de packages Dépendance de services © 2001-2008, D. Donsez OSGi 53
  • 45. Dépendance & Dynamisme Administrateur 1 2 > start 5 > uninstall 3 5 Service fourni Service requis 4 Package exporté Package importé Notification Dépendance de packages Dépendance de services © 2001-2008, D. Donsez OSGi 54
  • 46. Dépendance & Dynamisme Administrateur Service relaché puis relié 1 2 > update 4 > refresh 5 Service fourni Service requis 4 Package exporté Package importé Bundle/Service redémarré Notification Dépendance de packages Dépendance de services © 2001-2008, D. Donsez OSGi 55
  • 47. Service Une interface (ou plusieurs) Des implémentations multiples implémentations possibles conditionnées dans les bundles. implémentation normalement non publique. se trouvent dans des packages différents Qualifié par des propriétés. Classe d’implémentation com.hp.printer.laserjet.impl.Driver Interface org.device.print.PrintService org.device.print.type=laser location=4th floor Classe d’implémentation com.lexmark.printer.laser.impl.Driver Interface org.device.print.PrintService org.device.print.type=laser © 2001-2008, D. Donsez OSGi location=1st floor 56
  • 48. Exemple de service Interface org.device.print.PrintService package org.device.print; public interface PrintService { public int print(OutputStream out, String[] printparams) throws PrintException; public Job[] list() throws PrintException; } public interface Job[] { … } public class PrintException extends Exception { … } © 2001-2008, D. Donsez OSGi 57
  • 49. Exemple d’application org.device.print.PrintService HP HP Deskjet Deskjet Printer Printer type=bubble dpi=72,150,300,600,1200,2400 color=16777216 location=1st floor Text Text Editor Editor Lexmark Lexmark Laser Laser type=laser dpi=72,150,300,600,1200 Printer Printer location=1st floor type=laser HP HP PrintService PrintService Service fourni OfficeDesk OfficeDesk dpi=72,150,300,600,1200 Interface Interface Service requis location=4th floor FaxPrinter FaxPrinter Package exporté FaxService FaxService Package importé Interface Interface org.device.fax.FaxService © 2001-2008, D. Donsez OSGi 58
  • 50. .mf Fichier manifest (i) Informations nécessaires au framework Import-Package Packages requis (avec/sans la version de spécification) Export-Package Packages fournis (avec/sans la version de spécification) Import-Service Services requis (indicatif, n’est pas utilisé par le FW) r3 Export-Service Services fournis (indicatif, n’est pas utilisé par le FW) r3 Bundle-Activator Nom de la classe Activator Bundle-ClassPath Emplacement des classes et ressources du bundle Bundle-NativeCode Bibliothéques natives à charger en fonction du processeur, du SE, … Bundle-UpdateLocation URL des mises à jour du bundle © 2001-2008, D. Donsez OSGi 59
  • 51. by .mf Fichier manifest (ii) ild 2 Bu en v Ma Informations nécessaires au framework Bundle-SymbolicName r4 Nom symbolique du bundle (sert à l’identification) Bundle-Name Nom du bundle Bundle-Description Description du bundle Bundle-Version Version du bundle Bundle-DocURL URL de la documentation du bundle Bundle-ContactAddress Coordonnée du propriétaire du bundle Bundle-Category Catégorie du bundle Bundle-RequiredExecution Liste d’environnement qui doivent être présents sur la plateforme Environment r3 ( exemple : CDC-1.0/Foundation-1.0, OSGi/Minimum-1.0 ) Liste de package qui pourront être importés en cours d’exécution DynamicImport-Package © 2001-2008, D. Donsez r3 OSGi (com.acme.plugin.*) 60
  • 52. .mf Exemple de manifest (i) org.device.print.PrintService HP HP Deskjet Deskjet Printer Printer Export-Package: org.device.print; 1.1 Bundle-Name: PrintService Text Text Bundle-Version: 2.0.1 Editor Editor Lexmark Lexmark Laser Laser Export-Package: org.device.fax; 1.1 Printer Printer Bundle-Name: FaxService Bundle-Version: 3.2.0 HP HP PrintService PrintService OfficeDesk OfficeDesk Interface Interface FaxPrinter FaxPrinter FaxService FaxService Interface Interface org.device.fax.FaxService © 2001-2008, D. Donsez OSGi 61
  • 53. .mf Exemple de manifest (ii) Import-Package: org.osgi.framework;1.3 org.device.print; 1.0,org.device.print.PrintService HP HP Export-Service: Deskjet Deskjet Import-Package: org.osgi.framework;1.3 org.device.print.PrintService, Printer Printer org.device.print; 1.1, Bundle-Activator: org.device.fax; 1.1 com.hp.printer.deskjet.impl.Activator Export-Service: Text Bundle-Name: HP Deskjet Printer Text org.device.print.PrintService, Editor Editor Lexmark Lexmarkorg.device.fax.FaxService LaserBundle-Activator: Laser Printer Printer com.hp.printer.officedesk.impl.Activator Bundle-Name: HP OfficeDesk FaxPrinter HP HP PrintService PrintService OfficeDesk OfficeDesk Interface Interface FaxPrinter FaxPrinter FaxService FaxService Interface Interface org.device.fax.FaxService © 2001-2008, D. Donsez OSGi 62
  • 54. .mf Exemple de manifest (iii) org.device.print.PrintService HP HP Deskjet Deskjet Printer Printer Text Text Editor Editor Lexmark Lexmark Laser Laser Printer Printer Import-Package: org.osgi.framework;1.3 org.device.print; 1.0 HP HP PrintService PrintService Import-Service: org.device.print.PrintService OfficeDesk OfficeDesk Interface Interface Bundle-Activator: FaxPrinter FaxPrinter org.eclipse.texteditor.impl.Activator FaxService FaxService Bundle-Classpath: .;/lib/resources.jar Interface Interface Bundle-Name: TextEditor org.device.fax.FaxService © 2001-2008, D. Donsez OSGi 63
  • 55. Chargement de classes (i) 1 ClassLoader par Bundle Chargement, Mise à Jour, Déchargement Principe de la recherche des classes La classe est dans le JRE La classe est dans un package ni importé ni exporté Utilisation de la classe chargée à partir du BUNDLE-CLASSPATH La classe est dans un package importé Utilisation de la classe chargée par le CL d’un autre bundle La classe est dans un package exporté mais déjà exporté par un autre bundle Utilisation de la classe chargée par le CL de l’autre bundle La classe est dans un package exporté mais non exporté par un autre Utilisation de la classe chargée à partir du BUNDLE-CLASSPATH © 2001-2008, D. Donsez OSGi 64
  • 56. Chargement de classes (ii) D’après la release3 d’OSGi A importe B utilise javax.comm javax.servlet exporté par A © 2001-2008, D. Donsez OSGi 65
  • 57. Les limites r3 Pas d’activation tant que tous les imports ne sont pas résolus Un service package actif à la fois Compatibilité ascendance à assurer Ad vitam eternam org.device.print.PrintService Editor Editor Printer Printer org.device.print; spec-version=1.0 1.0 1.0 1.0 1.0 org.device.print.PrintService Editor Editor Printer Printer org.device.print; spec-version=1.1 Service fourni 1.1 1.1 1.1 1.1 Service requis Package exporté Package importé © 2001-2008, D. Donsez OSGi 66
  • 58. Les avancés r3 R3 Importation dynamique r4 R4 Bundle fragment Bundle requis Bundle extension Intervalle de version, Politiques sur les versions Importation et Exportation conditionnelles (attribut et filtre) Activation simultanée de plusieurs version de packages La suite : le JSR 277, JSR 294 … Richard S. Hall, “Java modularity, OSGi, and JSRs 277, 291, and 294”, ApacheCon EU 2006 http://docs.safehaus.org/download/attachments/2995/osgi-apachecon-20060628.pdf © 2001-2008, D. Donsez OSGi 67
  • 59. R3 DynamicImport-Package Permet en cours d’exécution d’importer des packages non présents à la résolution activator.getClass().getClassLoader().loadClass(clazzname) Surtout pas Class.forName(clazzname) L’entrée DynamicImport-Package du mainfeste liste les packages qui pourront être importés en cours d’exécution Usage : framework à plugin ou service provider Exemple : JMF, JCE, JDBC, … © 2001-2008, D. Donsez OSGi 68
  • 60. DynamicImport-Package R3 Exemple avec JMF (i) Installation de bundle 2 il passe à l’état ACTIVE myClassLoader.loadClass("com.acme.mp3.MP3Decoder") throws java.lang.NoClassDefFoundError Bundle 1 Bundle 2 implementing using JMF JMF BundleClassLoader BundleClassLoader javax.media .mf Import-Package: .mf Export-Package: javax.media javax.media DynamicImport-Package: com.acme.* © 2001-2008, D. Donsez OSGi 69
  • 61. DynamicImport-Package R3 Exemple avec JMF (ii) Installation de bundle 3 : il passe à l’état ACTIVE myClassLoader.loadClass("com.acme.mp3.MP3Decoder") add a package dependency then return the class Bundle 1 Bundle 2 Bundle 3 implementing using providing JMF JMF JMF codecs BundleClassLoader BundleClassLoader BundleClassLoader javax.media com.acme.mp3 .mf Import-Package: .mf Import-Package: .mf Export-Package: javax.media javax.media javax.media DynamicImport-Package: Export-Package: com.acme.* com.acme.mp3, com.acme.wave 70 © 2001-2008, D. Donsez OSGi
  • 62. Importation et Exportation conditionnelles r4 Motivation La compatibilité descendante (backward compatibility) est lourde à maintenir (surtout en embarqué). Les @deprecated disparaissent parfois lors des chargements des majeures de versions Idées Intervalle de version Import-Package: javax.servlet; version="[2.0.0,2.4.0)"; resolution="optional" Autres Export-Package: org.foo.service; version=1.1; vendor="org.foo", org.foo.service.bar; version=1.1; uses="org.foo.service", org.foo.service.fizz; include:="*Impl"; exclude:="Test*" Richard S. Hall, Java Modularity Support in OSGi R4, ApacheCon (San Diego), December 14th, 2005 http://docs.safehaus.org/download/attachments/2995/osgi-apachecon-20051214.pdf © 2001-2008, D. Donsez OSGi 71
  • 63. Accès aux ressources et aux fichiers Ressources this.getClass().getRessourceAsStream(String path) path="/" correspond à la racine du JAR (BUNDLE-CLASSPATH) Support de persistance BundleContext.getDataFile(String path) path="" correspond à la racine du cache du bundle FileService accès au système de fichier local (s’il existe !) et contrôle les permissions du Bundle au passage © 2001-2008, D. Donsez OSGi 72
  • 64. .mf Bundle-Classpath Représente (dans le manifeste) les chemins (dans le JAR) de recherche des classes et des ressources 3 cas Bundle-Classpath: . ou Pas de Bundle-Classpath Recherche dans le JAR Bundle-Classpath: .;demo/nested.jar;test/nest.jar Recherche dans le JAR puis dans le JAR inclus Bundle-Classpath: demo/nested.jar Recherche dans le JAR inclus Aucune classe ou ressource n’est recherchée dans le JAR Intérêt des JAR inclus Conservation des signatures, manifestes, … Possibilité de patcher un sous ensemble des ressources/classes ! © 2001-2008, D. Donsez OSGi 73
  • 65. .mf Bibliothèques natives Bibliothèques de fonctions natives (C) dépendantes du processeur et de l’OS Exemple : Pilotes matériel (javax.comm), Patrimonial (codec), … Bundle-NativeCode dans le MANIFEST Spécifie l’emplacement des bibliothèques dépendantes du système et du processeur, à charger dynamiquement (par le ClassLoader) Exemple Bundle-NativeCode: com/mycomp/impl/nativesample/libnat.so; osname=Solaris; processor=sparc; osversion=5.5, com/mycomp/impl/nativesample/libnat.so; osname=SunOS; processor=sparc; osversion=2.5, com/mycomp/impl/nativesample/nat.dll; osname=Windows NT; processor=x86; osversion=4.0 Remarque : Propriétés du framework org.osgi.framework.processor, org.osgi.framework.language, org.osgi.framework.os.name, org.osgi.framework.os.version © 2001-2008, D. Donsez OSGi 74
  • 66. La classe d’activation du bundle Classe publique Implémente les 2 méthodes start() et stop() de BundleActivator qui reçoivent une référence sur un contexte. start(BundleContext ctxt) recherche et obtient des services requis auprès du contexte et/ou positionne des listeners sur des événements enregistre les services fournis auprès du contexte stop(BundleContext ctxt) désenregistre les services fournis relâche les services requis Cependant le FW fait ces opérations si stop() en oublie ! il peut ne pas y avoir de BundleActivator dans un bundle Livraison de classes et ressources Eclipse extension points Extender model © 2001-2008, D. Donsez OSGi 75
  • 67. BundleContext Interface vers le framework Passé lors des invocations de start() et stop() de l’Activator Permet L’enregistrement de services Le courtage de services L’obtention et la libération des services La souscription aux évènements du Framework. L’accès aux ressources du bundle L’accès aux propriétés du framework L’installation de nouveaux bundles L’accès à la liste des bundles © 2001-2008, D. Donsez OSGi 76
  • 68. BundleContext et Activator Bundle Context Service Bundles Bundle Activator •registerService() •getServiceReferences() •start(BundleContext bc) •getService() •stop(BundleContext bc) •getDataFile() •serviceChanged() •addServiceListener() •addBundleListener() •addFrameworkListener() © 2001-2008, D. Donsez OSGi 77
  • 69. Enregistrement de services (Lexmark Laser Printer) package com.lexmark.printer.laser.impl; public class Activator implements BundleActivator { private ServiceRegistration reg=null; private PrintService theService=null; public void start(BundleContext ctxt) throws BundleException { theService=new PrintServiceImpl(); Properties props=new Properties(); props.put("type", "laser"); props.put("dpi", "72,150,300,600,1200"); props.put("location", "1st floor"); reg=ctxt.registerService( "org.device.print.PrintService", theService, props); } public void stop(BundleContext ctxt) throws BundleException { if(reg != null) reg.unregister(); } } © 2001-2008, D. Donsez OSGi 78
  • 70. Recherche de services (TextEditor) package org.eclispe.texteditor.impl import org.device.print.PrintService; class Activator implements BundleActivator { public void start(BundleContext ctxt) throws BundleException { private PrintService ser; // On va voir si quelqu'un offre un PrintService ... ServiceReference[] tempRefs =ctxt.getServiceReferences ("org.device.print.PrintService","(location=1st floor)"); if(tempRefs!=null) { System.out.println("Found a PrintService! I will use it!!!"); // On prend le premier offert! ser=(PrintService) ctxt.getService(tempRefs[0]); } … } … } © 2001-2008, D. Donsez OSGi 79
  • 71. Recherche (Courtage) de services Filtrage par des expressions de condition LDAP (RFC1960) sur les propriétés enregistrées par les services Expressions de filtrage Expressions simples (attribut opérateur valeur) Valeurs de type String, Numerique, Character, Boolean, Vector, Array Attribut insensible aux majuscules/minuscules L’attribut objectClass représente le nom du service Opérateurs >=, <=, =, ~= (approximativement égal), =* (présent) Connecteurs logiques &, |, ! © 2001-2008, D. Donsez OSGi 80
  • 72. Recherche de services Tous les services d’impression refs=bundleContext.getServiceReferences("org.device.print.PrintService", null); refs=bundleContext.getServiceReferences(null, "(objectClass=org.device.print.PrintService)"); Certains services d’impression refs=bundleContext.getServiceReferences("org.device.print.PrintService", "(&(!(type=laser))(capability=double-sided)(!(dpi<=300))(location=*)" ); Tous les services de org.device refs=bundleContext.getServiceReferences(null,"(objectClass=org.device.*)"); Le service d’impression et de fax au 3ième étage refs=bundleContext.getServiceReferences(null, "(&(objectClass=org.device.print.PrintService)(objectClass=org.device.fax.FaxService)" + "(location=4th floor))" ); © 2001-2008, D. Donsez OSGi 81
  • 73. Comparaison avec le courtage de JINI JINI OSGi Typage fort sur le nom de Typage sur le nom de l’interface et la signature de l’interface ces méthodes Sous-typage des interfaces Non Propriétés de courtage Oui Distribué Centralisé (même JVM) Notion de groupe Non Bail (lease) d’un Non enregistrement © 2001-2008, D. Donsez OSGi 82
  • 74. Événements dans le Framework FrameworkEvent Notifie le démarrage et les erreurs du Framework interface FrameworkListener méthode frameworkEvent Traitement séquentiel et asynchrone des listeners (par event dispatcher) BundleEvent Notifie les changements dans le cycle de vie des bundles interface BundleListener méthode bundleChanged Traitement séquentiel et asynchrone des listeners (par event dispatcher) interface SynchronousBundleListener méthode bundleChanged Traitement séquentiel et synchrone des listeners (avant le traitement du R2 changement d’état) ServiceEvent Notifie l’enregistrement ou le retrait de services interface ServiceListener méthode serviceChanged Traitement séquentiel et synchrone des listeners © 2001-2008, D. Donsez OSGi 83
  • 75. Service Registry Hooks (RFC 126 R4.2) org.osgi.framework.hooks Hooks on the service registry operations PublishHook Bundles registering this service will be called during framework service publish (register, modify, and unregister service) operations. This method is called prior to service event delivery when a publishing bundle registers, modifies or unregisters a service and can filter the bundles which receive the event. FindHook Bundles registering this service will be called during framework service find (get service references) operations. This method is called during the service find operation by the finding bundle and can filter the result of the find operation. ListenerHook Bundles registering this service will be called during service listener addition and removal. The hook is notified of the collection of service listeners and what they may be listening for and well as future changes to that collection. © 2001-2008, D. Donsez OSGi 84
  • 76. Prendre en compte l’enregistrement et le retrait de service (i) Les bundles « requesters » doivent impérativement prendre en compte l’enregistrement et le retrait de services « importés » Exemple public class PrintListenerActivator implements BundleActivator { PrintServiceListener listener = null; public void start(BundleContext context) { PrintServiceListener listener = new PrintServiceListener(context); context.addServiceListener(listener); } public void stop(BundleContext context) { context.removeServiceListener(listener); } } © 2001-2008, D. Donsez OSGi 85
  • 77. Prendre en compte l’enregistrement et le retrait de service (ii) Exemple simpliste et inutile class PrintServiceListener implements ServiceListener { public void serviceChanged(ServiceEvent e) { ServiceReference ref = e.getServiceReference(); if(((String)ref.getProperty("objectClass").equals("org.device.print.PrintService"))){ switch (e.getType()) { case ServiceEvent.REGISTERED: println(ref + " has been registered by "+ ref.getBundle().getLocation()); break; case ServiceEvent.UNREGISTERING: Ajout de println(ref + " is being unregistered"); break; ServiceEvent.MODIFIED_ENDMATCH en R4.2 case ServiceEvent.MODIFIED: println("properties of "+ref+" have been modified:"); String[] keys = ref.getPropertyKeys(); for (int i=0; i<keys.length; i++) println(keys[i] + "=" + ref.getProperty(keys[i])); break; } }} void println(String msg) {System.out.println("events: "+msg); } } © 2001-2008, D. Donsez OSGi 86
  • 78. Prendre en compte l’enregistrement et le retrait de service (iii) Exemple 2 : public class Activator implements BundleActivator { final static String filterStr ="(&(objectClass=org.device.print.PrintService)(location=4th floor))"; Map/*<ServiceReference,PrintService>*/ printservices; BundleContext context; public void start(BundleContext context) throws BundleException { this.context=context; printservices=new HashMap(); BindingController ctlr=new BindingController(context,filterStr,printservices); ctlr.open(); context.addServiceListener(ctlr); } © 2001-2008, D. Donsez OSGi 87
  • 79. Prendre en compte l’enregistrement et le retrait de service (iv) public class BindingController implements ServiceListener { Map/*<ServiceReference,Object>*/ services; String filterStr; Filter filter; BundleContext context; public BindingController(BundleContext context, String filterStr, Map services){ this.context=context; this.filterStr=filterStr; this.services=services; filter=context.createFilter(filterStr); } © 2001-2008, D. Donsez OSGi 88
  • 80. Prendre en compte l’enregistrement et le retrait de service (v) … public void open() { // fill the services map ServiceReference[] refs=context.getServiceReferences(null,filterStr); for(int i=0;i<refs.length;i++){ Object svc = context.getService(refs[i]); if(svc!=null) services.put(refs[i],svc); } } public void close() { // release the references to service … } … © 2001-2008, D. Donsez OSGi 89
  • 81. Prendre en compte l’enregistrement et le retrait de service (vi) … public void serviceChanged(ServiceEvent e) { ServiceReference servref = e.getServiceReference(); Object ref; switch (e.getType()) { case ServiceEvent.REGISTERED: if(filter.match(servref)){ println(servref + " (from "+ servref.getBundle().getLocation() + ") is added"); services.put(servref,context.getService(servref)); }; break; … © 2001-2008, D. Donsez OSGi 90
  • 82. Prendre en compte l’enregistrement et le retrait de service (vii) …. case ServiceEvent.UNREGISTERING: ref=services.remove(servref); if(ref!=null) { println(servref + " is removed"); context.ungetService(servref); } break; case ServiceEvent.MODIFIED: ref=services.get(servref); if(ref!=null && !filter.match(servref)){ println(servref + " is removed since properties has changed"); services.remove(servref); context.ungetService(servref); } break; }} © 2001-2008, D. Donsez OSGi 91
  • 83. Prendre en compte l’enregistrement et le retrait de service (viii) Mini conclusion Vous avez suivi ? Et maintenant avec 6 services dont 3 obligatoires © 2001-2008, D. Donsez OSGi 92