Tutorial OSGi avec Apache Felix - Partie 2
Jump to navigation
Jump to search
Sources du TP
TP OSGi Partie 2 : Composants OSGi
Vous manipulerez Apache iPOJO le modèle de composant orienté service Java pour OSGi utilisé industrielement
Installation
- Dézipper les sources du TP
- Changez EVENTUELLEMENT les valeurs du proxy dans le fichier tposgi\felix-framework\run.bat
Installez EVENTUELLEMENT osgi-part2\settings.xml dans C:\Documents and Settings\VotreUsername\.m2- Demarrez Felix :
cd felix
run.bat
- Lancez les commandes du shell Gogo:
- help
- lb
- obr:list
- obr:deploy -s "Apache Felix Log Service"
- felix:log debug
- obr:deploy -s "Apache Felix iPOJO"
- obr:deploy -s "Apache Felix iPOJO Gogo Command"
- obr:deploy -s "Apache Felix File Install"
- inspect requirement service
- inspect r service
- inspect capability service
- inspect c service
Cron4j
--------------- Cron4J http://www.sauronsoftware.it/projects/cron4j/ est une bibliotheque java pour dÈclencher pÈriodiquement des taches. Elle est inspirée du cron Unix http://fr.wikipedia.org/wiki/Crontab. Les taches doivent implémenter l'interface java.lang.Runnable. Regardez les exemples fournis dans osgi-part2\cron4j\cron4j-orig\examples Votre travail est d'utiliser cette bibliotheque pour dÈclencher pÈriodiquement des services OSGi dont l'interface est java.lang.Runnable et la propriÈtÈ cron4j.pattern contient le pattern cron Voir le schÈma d'architecture osgi-part2\architecture.ppt 1) Deployez les bundles Cron4J depuis le repository via FileInstall en les dÈposant dans le rÈpertoire .\load de l'installation de Felix cron4j-bundle-0.2.0-SNAPSHOT.jar cron4j-bundle.example-0.1.0.jar Que se passe t'il ? lb inspect c service inspect r service ipojo:factories ipojo:factory ipojo:handlers ipojo:instance ipojo:instances 2) completer le code du projet cron4j-bundle pour qu'il schedule des services java.lang.Runnable Moins de 20 lignes de Java 3) ajouter au composant iPOJO un requires http://felix.apache.org/site/service-requirement-handler.html vers un LogService et completer le code du composant pour journaliser les enreisgrements et desenregistrement de services (ie utiliser le LogService) inspect c service inspect r service 4) transformez ce Requires en TemporalRequires Observez ce qu'il se passe quand le LogService disparait ! inspect c service inspect r service 5) Completez le composant iPOJO pour fournir une commande Gogo Shell listant les "schedules" en cours et leurs statitisques (nombre d'invocations, temps restant jusqu'a la prochaine invocation, nombre d'invocation restante, ...) Ce complement est livrÈe dans la version cron4j-bundle-0.3.0-SNAPSHOT.jar inspect c service inspect r service Inspirez vous du code de la commande Arch d'iPOJO (voir le repertoire cron4j-cmd) http://svn.apache.org/viewvc/felix/trunk/ipojo/arch-gogo/ http://svn.apache.org/viewvc/felix/trunk/ipojo/arch-gogo/pom.xml?view=co http://svn.apache.org/viewvc/felix/trunk/ipojo/arch-gogo/src/main/java/org/apache/felix/ipojo/arch/gogo/Arch.java?view=co http://felix.apache.org/site/rfc-147-overview.html inspect c service inspect r service ---------------- Extra 1 obr:deploy -s "Apache Felix iPOJO White Board Pattern Handler" obr:deploy -s "Apache Felix iPOJO Temporal Service Dependency Handler" obr:deploy -s "Apache Felix iPOJO WebConsole Plugins" browse http://localhost:8080/system/console/bundles Username=admin Password=admin ---------------- Extra 2 Ajouter les metadonnÈes du handler JMX au composant TransientCronDeamon http://felix.apache.org/site/ipojo-jmx-handler.html Redeployez le bundle Lancez jconsole dans un shell/cmd Changez les propriÈtÈs du composant via la JConsole Minimal Gogo Command with iPOJO import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Instantiate; import org.apache.felix.ipojo.annotations.Provides; import org.apache.felix.ipojo.annotations.ServiceProperty; import org.apache.felix.service.command.Descriptor; @Component(immediate = true) @Instantiate @Provides(specifications = ListComponentsCommand.class) public class ListComponentsCommand { @ServiceProperty(name = "osgi.command.scope", value = "test") String scope; @ServiceProperty(name = "osgi.command.function", value = "{}") String[] function = new String[] { "test" }; @Descriptor("test") public void test() { System.out.println("test!"); }