38 votes

Meilleure technique pour obtenir le contexte du bundle OSGi ?

Chaque bundle de mon projet OSGi a son propre BundleActivator, ce qui me semble normal. Cela permet de passer le BundleContext actuel, qui est utile pour obtenir des références de service et autres.

Cependant, à partir des classes de mon bundle, comment puis-je obtenir le BundleContext ? L'assigner à un champ statique public dans le BundleActivator est nul et le faire circuler comme argument l'est aussi. Y a-t-il un moyen plus intelligent ?

54voto

Ivan Dubrov Points 2596

Vous pouvez utiliser FrameworkUtil.getBundle(ClassFromBundle).getBundleContext().

Voir FrameworkUtil JavaDoc.

18voto

RaduK Points 934

Une bonne pratique lors du développement de bundles OSGi à mon avis est d'essayer d'écrire le code lié à OSGi aussi centralisé que possible. De cette façon, si vous souhaitez utiliser votre code dans un environnement non-OSGi, l'effort de migration est minimum.

Par conséquent, l'utilisation de références statiques ou FrameworkUtil partout n'est pas une bonne idée imho. Ni l'un ni l'autre n'utilise le simple OSGi. Essayez de consulter iPOJO ou les Services déclaratifs.

13voto

Neil Bartlett Points 12330

Une autre alternative est d'utiliser les services déclaratifs, qui vous permettent de recevoir le BundleContext dans votre méthode d'activation. Par exemple, en supposant que vous utilisiez les annotations Bnd pour DS :

@Activate
public void activate(BundleContext context) {
    // ...
}

Cependant, comme RaduK l'a dit, il est beaucoup mieux si vous pouvez écrire la majorité de votre code dans le style POJO sans utiliser des API OSGi telles que BundleContext.

-3voto

BJ Hargrave Points 4531

Il n'y a pas de magie ici. Vous avez besoin d'un moyen de fournir l'information aux autres classes. Il est donc disponible soit via la pile d'appels, soit dans un endroit bien connu (par exemple, statique).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X