Composants orienté Service pour OSGi Clément ESCOFFIER LSR ADELE 19 Mai 2006 Réunion du OSGi Users Group France
Sommaire Introduction Points de comparaison Modèle à composant au dessus d OSGi Service Binder / Service Component Runtime FROGi (Fractal Over OSGi ) Dependency Manager ipojo Conclusion 2
Programmation sur OSGi Extrêmement difficile à maitriser Dynamisme Ecouter les arrivées et les départs de services Gérer le cycle de vie des services fournis Relâcher les références L Activateur Accès au framework Non-fonctionnel Mélange entre l implémentation du service et la gestion du dynamisme et du cycle de vie 3
Composant & Composant à Service Séparation des préoccupations Conteneur Gestion des besoins non-fonctionnels Contenu Implémentation fonctionnelle Composant à services Peut utiliser des services Peut implémenter un ou plusieurs service 4
Composants à service sur OSGi Objectifs Séparation des préoccupations Implémentation du service (partie applicative) Gestion du dynamisme et du cycle de vie (partie OSGi ) Faciliter l implémentation de services sur OSGi 5
Points de comparaison Gestion des dépendances Multiple? Optionnelle? Injection? Gestion des services implémentés Cycle de vie (publication, retrait, création de l objet de service) Obtention des services Extensibilité du modèle Description des composants 6
Service Binder / Service Component Runtime 7 Notion de composant orienté service [Cervantes2004] Chaque composant est décrit de manière déclarative les services requis Les services fournis Un composant ~= Un bundle Service Binder gère le cycle de vie des services et les liaisons Les composants s exécutent dans un instance manager Gestion des objets de service (singleton) Conteneur par réflexion : Non extensible Maintenance difficile Intégrer à la R4 sous le nom de Service Component Runtime
Service Binder / Service Component Runtime Gestion des dépendances multiples & optionnelles Objets de services gérés dans le code Gestion des services fournis Mais singleton seulement pour Service Binder Publication / Retrait / Création géré par le conteneur Obtention des services Méthode bind & unbind dans le code du composant Non extensible Format de description : XML 8
FROGi : Fractal Over OSGi 9 Fractal : modèle à composant générique, hiérarchique, extensible (http://fractal.objectweb.org) Notion de membrane Conteneur Membrane composé de contrôleur Un contrôleur par aspect non-fonctionnel Objectif : Packager et Déployer une application Fractal en plusieurs bundles OSGi Séparation Contrat-Implémentation Mise à jour partielle Dynamique Composants partagés
FROGi FROGi : Modification du mixin de Julia (implémentation de référence de Fractal) «Binding Controller à service» B1 B2 Client Server 10
FROGi Gestion des dépendances simple Pas de gestion des multiples, ni des optionnelles Gestion des services fournis (singleton) Obtention des services Binding Fractal Modèle extensible (Fractal) Jamais testé 11
Dependency Manager [Offermans03] Proposition de gestion automatique des dépendances de services dans OSGi Contribution à FELIX Conteneur sous la forme d un manager gérant les services fournis et les dépendances Construction du conteneur à partir d une API Récupération des services requis via le conteneur Service fournit par le conteneur 12
Dependency Manager Gestion des dépendances Multiples Optionnelles (Null Object Pattern) Gestion des services fournits (singleton) Publication / Retrait / Création géré par le conteneur Obtention des services Utilisation d un objet «conteneur» (manager) Modèle non-extensible 13
ipojo 14 ipojo : injected POJO http://www-adele.imag.fr/~escoffie/dev/ipojo Extensible Service Container A POJO instance runs in the ipojo service container The container manage non functional aspects ipojo Container Content («POJO») C1 C2
ipojo Dependency Provided Service Lifecycle Callbacks Configuration Architecture Handlers manage non functional aspects ipojo Core Manages Component Lifecycle & Instance creation 15
ipojo Gestion des dépendances Multiples : Tableau Optionnelle : Null Object Pattern Gestion des services fournis (singleton & factory) Publication / Retrait / Création géré par le conteneur Vérification Obtention des services Champ de la classe Description du composant en XML (et texte) Modèle extensible 16 Contribution à Felix (en cours de vote), Relation avec Spring 2
Conclusion / Comparatif 17 Dépendances Services Fournis Obtention des services Description du composant Modèle extensible Service Binder (SCR) Multiple, Optionnelle FROGi Simple Dependency Manager Multiple, Optionnelle ipojo Multiple, Optionnelle Singleton Singleton Singleton Singleton & Factory Méthodes bind & unbind dans le code Binding Fractal Objet spécial dans le code Champ de la classe XML XML Non XML & Manifest Non Oui mais non testé Non Oui