|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Bonjour à tous,
Voici mon problème. Pour mon projet, j'utilise OSGI et l'implémentation Felix d'OSGI. Je me suis basé sur les codes de la page suivante : http://felix.apache.org/site/apache-...-tutorial.html. Mon souci qui va surement paraitre idiot (hein George7 ? Dois-je rajouter quelque chose dans mon code ? Code :
Merci
__________________
https://www.weetool.com |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : août 2006 Messages : 1 234 ![]() |
Salut,
Pour stopper le framework OSGi il faut arrêter le bundle core (qui a l'ID 0). Pour Felix, tu peux aussi regarder là. De plus depuis la version 4 il y a un moyen standard de gérer le framework (sections 4.2 et 6.2 de la specification core) ce qui pourrait être intéressant pour toi (au lieu de nommer Felix explicitement). Ensuite que veut dire "après l'exécution de mes bundles" ? Tes bundles ont une tâche qui est exécutée une fois et se finissent ensuite ? Je ne suis pas bien sûr de comprendre… Tu peux donner ton cas d'utilisation ici ?
__________________
"Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy" -- Mario Fusco Pour vos développements Java : apprenez à utiliser la javadoc |
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Salut George7
Oui, en fait, j'ai pour le moment, un seul bundle (qui est mon bundle principal). Il effectue sa tâche une fois et j'en ai plus besoin. Je suis parti de ce code pour mon bundle : Code :
Soit dit en passant, j'ai l'impression que c'est aussi le cas des exemples fournis à cet URL : http://felix.apache.org/site/apache-...-tutorial.html (si on enlève les boucles sans fin bien sûr)
__________________
https://www.weetool.com |
||
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Bon, désolé de remettre le problème sur le tapis mais je n'ai pas du tout eu le temps de m'en occuper (j'ai du à gérer une naissance notamment
Du coup, si quelqu'un à une réponse, je prends.
__________________
https://www.weetool.com |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() Inscription : août 2006 Messages : 1 234 ![]() |
Citation:
Félicitations pour la naissance Sinon pour ton problème, je résume (dis moi si je me trompe) : tu as un framework OSGi embarqué dans ton appli, tu le lances. Dedans n'est installé qu'un seul bundle. Il est démarré. Dans ton activator tu fais une tâche qui s'exécute une fois et tu voudrais qu'à la fin de cette tâche, ton framework s'arrête et te rende la main. J'ai bon ? Si oui, alors en fait ça me semble une utilisation bizarre de OSGi, mais bon passons là dessus pour le moment pour se concentrer sur ton problème (je pars du principe que le but que tu veux atteindre exactement tu le connais, et que ce comportement est celui que tu veux atteindre, on pourra en reparler plus tard si tu veux). Comme je l'ai dit plus haut, ton framework est le bundle avec l'id 0. Donc à la fin de le méthode start de ton activator, tu peux utiliser le BundleContext pour choper le Bundle d'id 0 et le stopper. Après il est possible de créer le framework avec la manière générique OSGi (depuis 4.2), ça te permet de ne pas utiliser de référence en dur à Felix, et de le lancer de manière asynchrone puis d'appeler waitForStop dans ton code (cf doc et les parties susmentionnées de la spec)
__________________
"Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy" -- Mario Fusco Pour vos développements Java : apprenez à utiliser la javadoc |
|
|
00
|
|
|
#7 | ||||||||
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Salut George7
![]() Merci pour tes félicitations (ce ne fut pas de tout repos, mais on y est arrivé Tu as parfaitement cerné ma situation. J'ai bien conscience de ne pas utiliser OSGI de façon optimale mais je suis un peu dans l'urgence actuellement (mais j'apprécie beaucoup le fait que tu comprennes qu'il me serait difficile de reprendre de zéro. Pour le moment, je vais rester sur ce schéma et il sera temps de faire quelque chose de bien plus propre plus tard). Concernant mon problème, désolé, je n'ai surement pas été assez précis. Je ne sais pas si cela suffit, mais à la fin de mon start, j'ai donc ajouté ceci : Code :
Si je fais Code :
Si je fais Code :
Code :
__________________
https://www.weetool.com |
||||||||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() Inscription : août 2006 Messages : 1 234 ![]() |
Je ne comprends pas trop là. La méthode start du framework doit démarrer OSGi sans bloquer. normalement il faudrait faire juste après le start:
Code :
Il est possible que tu aies un problème de thread non démon qui tourne toujours et donc la VM ne s'arrête pas. Il ne sert à rien d'éteindre tous tes bundles un par un. Si tu stoppes celui d'id 0, tout seras proprement arrêté.
__________________
"Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy" -- Mario Fusco Pour vos développements Java : apprenez à utiliser la javadoc |
||
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Le truc que je ne comprends pas bien aussi, c'est que, si je passe bien par la méthode start, apparemment, je ne passe pas par le stop.
__________________
https://www.weetool.com |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : juillet 2006 Messages : 690 ![]() |
Oui George7, tu as bien raison, il y a un processus qui tourne toujours à la fin de l'installation (processus que je lance moi-même et dont j'ai besoin qu'il tourne après mon installation).
Si je fais un kill -9 sauvage de ce processus, la main m'est bien rendue.
__________________
https://www.weetool.com |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com