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