Après le premier test d'OSGi, il est maintenant temps d'essayer de faire de l'utile et du concret. J'ai plusieurs idées en tête... Mais avant de m'y attaquer, je veux mettre en place ce qui servira de base à la suite.
Le premier élément à considérer est le service de log.
La documentation de référence du service de log se trouve dans le document OSGi Service Platform - Service Compendium - Release 4 - August 2005. Une implémentation de ce service est fournie par le projet Equinox.
Pour récupérer l'implémentation Equinox du service de log, d'abord faire un checkout depuis le repository Eclipse, en utilisant Eclipse :
File / New / Project...
CVS / checkout projects from CVS...
Next
Host : dev.eclipse.org Repository path : /cvsroot/eclipse User : anonymous Password : [laisser vide] Connection type : pserver
Next
Use an existing module
, ce qui permet d'obtenir la liste de tous les modules CVS disponiblesorg.eclipse.equinox.log
Next
Check out as a project in the workspace
, Project Name : org.eclipse.equinox.log
Finish
Nous voilà avec le projet Eclipse qui va bien, pour le service de log.
Comme pour le premier test d'OSGi, construire le jar, lancer OSGi, démarrer le framework, puis installer le bundle :
jar cfm log.jar META-INF/MANIFEST.MF -C src org/eclipse/equinox/log java -jar /home/pascalb/eclipse/plugins/org.eclipse.osgi_3.1.1.jar -console launch install file:/home/pascalb/workspace/org.eclipse.equinox.log/log.jar start 7 # id retournée par la commande install
Et là, comme le laissait présager le contenu de MANIFEST.MF, on se récupère une erreur liée aux paquetages importés par le bundle :
org.osgi.framework.BundleException: The bundle could not be resolved. Reason: missing imported package org.osgi.service.cm_1.0.0,imported package org.osgi.service.log_1.2.0
Les paquetages nécessaires sont disponibles dans le bundle org.eclipse.osgi.services
. Le récupérer depuis Eclipse (voir ci-dessus). Puis, depuis le répertoire /home/pascalb/workspace/org.eclipse.osgi.services
, passer la commande
jar cfm services.jar META-INF/MANIFEST.MF org/osgi/service/
Ensuite, depuis la console OSGi, installer le bundle résultant, puis le bundle log.
Il est possible de générer le jar depuis Eclipse. Pour cela :
File / Export ... / Deployable plug-ins and fragments
Finish
A noter que le contexte d'OSGi est persistant : si un bundle est installé et démarré, et que la plate-forme est arrêtée sans que le bundle soit arrêté, le bundle sera redémarré par la plate-forme dès qu'elle sera relancée.