OSGi et les Components

Les Components

Définition

Un Component permet de gérer les services plus facilement et de manière dynamique. Il équivaut à une couche supplémentaire au dessus de la couche "Service". Le code des bundles devient également moins dépendant d'OSGi, car il n'est plus nécessaire d'utiliser des classes spécifique au framework comme les BundleActivator, les ServiceReferences, etc ...

La publication et la recherche de service ne se fait plus dans le code, mais se déclare dans un fichier XML. Plus de registerService, getServiceReference et getService. Ce fichier XML doit être référencé dans le fichier manifest, pour que le framework prenne en compte ses informations.

Publication d'un service

Comme dit précédemment, les BundleActivator ne sont plus nécessaire et les service peuvent être enregistrer directement par l'intermédiaire du fichier xml. Le bundle fournissant un service ne possède donc plus que l'implémentation du service, le fichier manifest et des fichier .xml qui vont décrire des composant fournit par notre bundle.
Sur l'image suivante, vous pouvez voir le nouveau fichier manifest et un fichier .xml décrivant notre composant qui va fournir un service

Le fichier manifest et le fichier .xml du fournisseur

Ce fichier component.xml précise au framework que HelloWorldImpl est l'implémentation de notre composant, et qu'elle répond également au contrat, l'interface, HelloWorld. Dés que le bundle est "Active" au sein du framework, ce service est accessible par tout les autres bundles.

Utilisation d'un service

Pour utiliser un service, la logique est la même que lors de ça publication. Plus de ServiceReference ni de BundleActivator. On va créé un composant actif.

Pour celà, dans le fichier xml, on va indiquer l'implémentation de notre composant, et renseigner deux champs supplémentaire : "activate" et "deactivate", qui indique au framework quel méthodes de l'implémentation doivent être appelé lorsque notre composant est activé (équivalent au start du BundleActivator) et désactivé (équivalent au stop du BundleActivator).

Notre composant doit également avoir accès à un service remplissant le contrat HelloWorld. Pour celà, on utilise la balise reference possèdant les champ suivant :

Le fichier .xml du consommateur