Suche senden
Hochladen
La plateforme de services dynamiques OSGi
•
6 gefällt mir
•
3,730 views
Didier Donsez
Folgen
cours en français sur la technologies OSGi
Weniger lesen
Mehr lesen
Technologie
Bildung
Melden
Teilen
Melden
Teilen
1 von 223
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Présentation OSGI
Présentation OSGI
Cynapsys It Hotspot
Elsass JUG - OSGi
Elsass JUG - OSGi
François Fornaciari
#2 Architecture OSGi
#2 Architecture OSGi
Guillaume Sauthier
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
Geoffray Gruel
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
Cyrille Le Clerc
Annotations pour les Geeks
Annotations pour les Geeks
jviet
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
Eric SIBER
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
François Le Droff
Empfohlen
Présentation OSGI
Présentation OSGI
Cynapsys It Hotspot
Elsass JUG - OSGi
Elsass JUG - OSGi
François Fornaciari
#2 Architecture OSGi
#2 Architecture OSGi
Guillaume Sauthier
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
Geoffray Gruel
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
Cyrille Le Clerc
Annotations pour les Geeks
Annotations pour les Geeks
jviet
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
Eric SIBER
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
François Le Droff
Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGi
Madjid KETFI
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
BordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets Java
Camblor 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 ...
ENSET, Université Hassan II Casablanca
J2ee
J2ee
Université de Sherbrooke
GWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
Arnaud Héritier
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
SmartnSkilled
Spring 3.0
Spring 3.0
Spring User Group France
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
PALO IT
Architecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
Présentation Maven
Présentation Maven
SOAT
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
Presentation JEE et son écossystéme
Presentation JEE et son écossystéme
Algeria JUG
Spring & SpringBatch FR
Spring & SpringBatch FR
Marouan MOHAMED
Les dessous du framework spring
Les dessous du framework spring
Antoine Rey
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 moodle
Dorothée Danedjo Fouba
Weitere ähnliche Inhalte
Was ist angesagt?
Composants Adaptables au dessus d'OSGi
Composants Adaptables au dessus d'OSGi
Madjid KETFI
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
BordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets Java
Camblor 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 ...
ENSET, Université Hassan II Casablanca
J2ee
J2ee
Université de Sherbrooke
GWT Principes & Techniques
GWT Principes & Techniques
Rachid NID SAID
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
Arnaud Héritier
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
SmartnSkilled
Spring 3.0
Spring 3.0
Spring User Group France
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
PALO IT
Architecture java j2 ee a partager
Architecture java j2 ee a partager
aliagadir
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
Présentation Maven
Présentation Maven
SOAT
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
Presentation JEE et son écossystéme
Presentation JEE et son écossystéme
Algeria JUG
Spring & SpringBatch FR
Spring & SpringBatch FR
Marouan MOHAMED
Les dessous du framework spring
Les dessous du framework spring
Antoine Rey
Was ist angesagt?
(20)
Composants 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 Maven
BordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets Java
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
J2ee
J2ee
GWT Principes & Techniques
GWT Principes & Techniques
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
20081113 - 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 Docker
Spring 3.0
Spring 3.0
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
Architecture java j2 ee a partager
Architecture java j2 ee a partager
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Pré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 Mobile
Java 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éme
Spring & SpringBatch FR
Spring & SpringBatch FR
Les dessous du framework spring
Les dessous du framework spring
Andere mochten auch
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 moodle
Dorothée Danedjo Fouba
Joyería contemporánea
Joyería contemporánea
YOGENY
Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2
Elvis Live
Presentación equipo no 2 (1)
Presentación equipo no 2 (1)
IvetTe Eli
curso de html
curso de html
Javier Araneda
“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011
mind(21)factory
Final Thesis
Final Thesis
Charles Mace
Top 10 senior construction property & recruitment roles in London
Top 10 senior construction property & recruitment roles in London
Tara Lescott - Rec2Rec Finance, HR, Inhouse
1898 09
1898 09
Dalv Alem
OTP c200 How To
OTP c200 How To
Cyber Security Alliance
ejemplo
ejemplo
Arian Gal
eStrategy Magazin Ausgabe 03-2016-Leseprobe
eStrategy Magazin Ausgabe 03-2016-Leseprobe
TechDivision GmbH
The business journey partner presentations_the auto-enrolment journey
The business journey partner presentations_the auto-enrolment journey
Martin Jack
Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013
Enrique Avogadro
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
Maurvi04
Big data
Big data
TaniaQu
Shaban CV (1)
Shaban CV (1)
Shaban Ali
Manual de identidad hit baby1
Manual de identidad hit baby1
Daniela R. Dioses
PORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEB
mishelldana
Andere mochten auch
(20)
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 moodle
Joyería contemporánea
Joyería contemporánea
Musicas cifradas nivel_2 vol 2
Musicas cifradas nivel_2 vol 2
Presentación equipo no 2 (1)
Presentación equipo no 2 (1)
curso de html
curso de html
“Cities and Science – New Challenges” 12th-14th April 2011
“Cities and Science – New Challenges” 12th-14th April 2011
Final Thesis
Final Thesis
Top 10 senior construction property & recruitment roles in London
Top 10 senior construction property & recruitment roles in London
1898 09
1898 09
OTP c200 How To
OTP c200 How To
ejemplo
ejemplo
eStrategy 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 journey
Foro Barranquilla Creativa - Julio 2013
Foro Barranquilla Creativa - Julio 2013
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
FAULT TOLERANCE OF RESOURCES IN COMPUTATIONAL GRIDS
Big data
Big data
Shaban CV (1)
Shaban CV (1)
Manual de identidad hit baby1
Manual de identidad hit baby1
PORTAFOLIO DE SERVICIO WEB
PORTAFOLIO DE SERVICIO WEB
Ähnlich wie La plateforme de services dynamiques OSGi
M1 presentation OSGi
M1 presentation OSGi
Velossity
Introduction JavaEE
Introduction JavaEE
Mourad HASSINI
Chap 02 poo en java
Chap 02 poo en java
Yassine Badri
Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012
Didier Durand
#1 Introduction
#1 Introduction
Guillaume Sauthier
J2EE vs .NET
J2EE vs .NET
Ghazouani Mahdi
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
OW2
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
Catherine Nuel
Architecture .net
Architecture .net
Institut supérieur des études technologiques de Radès
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
Guillaume Laforge
Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0
telosys
Sogeti telosys@md day2011
Sogeti telosys@md day2011
MDDAY11
Javaoop
Javaoop
javaexpert
201003 OSGi
201003 OSGi
lyonjug
JavaRMI.pdf
JavaRMI.pdf
ngombeemmanuel
French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0
XebiaLabs
Javavs net
Javavs net
Nicolas De Loof
CV_Bilel CHAOUADI
CV_Bilel CHAOUADI
Bilel Chaouadi
Gradle_LyonJUG
Gradle_LyonJUG
Gregory Boissinot
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
Microsoft
Ähnlich wie La plateforme de services dynamiques OSGi
(20)
M1 presentation OSGi
M1 presentation OSGi
Introduction JavaEE
Introduction JavaEE
Chap 02 poo en java
Chap 02 poo en java
Présentation Eranea à Open Source Now 2012
Présentation Eranea à Open Source Now 2012
#1 Introduction
#1 Introduction
J2EE vs .NET
J2EE vs .NET
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
Jonas5 Serveur Applications Solutions Linux Ow2
Architecture .net
Architecture .net
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
Mdday 2011-telosys-v1.0
Mdday 2011-telosys-v1.0
Sogeti telosys@md day2011
Sogeti telosys@md day2011
Javaoop
Javaoop
201003 OSGi
201003 OSGi
JavaRMI.pdf
JavaRMI.pdf
French Webinar: XL Deploy 4.0
French Webinar: XL Deploy 4.0
Javavs net
Javavs net
CV_Bilel CHAOUADI
CV_Bilel CHAOUADI
Gradle_LyonJUG
Gradle_LyonJUG
Java 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
31.
OSGi Conditionnement, Déploiement
et Service
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
Jetzt herunterladen