2012-08-08 2 views
1

Supposons qu'il existe deux packages d'exportation A et B du groupe OSGi, respectivement. S'il y a un cas où A dépend de l'exportation de B et de l'exportation de B sur A, il faut commencer par le faire. Et supposons que l'on veuille obtenir le ServiceReference du registre partagé dans une classe différente (c'est-à-dire pas dans la classe Activator) puis comment initialiser l'objet BundleContext avec le contexte du bundle actuel.Interdépendance entre deux bundles OSGi

Cela pourrait résoudre le cas que j'ai mentionné ci-dessus, à propos de l'interdépendance. Comme A peut utiliser l'exportation de B dans sa méthode de démarrage d'activateur et B peut utiliser l'exportation de A dans une méthode de classe différente lorsqu'il est invoqué

+0

Si A dépend de B et B dépend de A, pouvez-vous démarrer les deux paquets? Pour bundlecontext je pense que nous avons une interface BundleContextAware –

+0

BundleContext bundleContext = FrameworkUtil.getBundle (JasperService.class) .getBundleContext(); ServiceReference empServiceReference = bundleContext.getServiceReference (nom_classe.class.getName()); – Nilesh

+0

Cela fonctionne très bien pour obtenir le bundlecontext du bundle actuel dans une classe autre que l'activateur. – Nilesh

Répondre

2

La résolution de package (résolution) est différente de celle des ensembles de démarrage et d'exécution. Il est très important de ne pas confondre les deux. Une structure OSGi peut résoudre des cycles dans les dépendances de package. Ainsi, une fois les paquets résolus, ils peuvent être démarrés dans un certain ordre. Vous devez vous assurer que vous ne concevez pas de bundles en fonction de leur ordre de départ relatif. C'est pourquoi vous utilisez des services et quelque chose comme DS. Les cycles dans les dépendances de service ne peuvent pas être résolus. Alors assurez-vous d'éviter de tels cycles.

+0

Ajout peut-être utile: les cycles de dépendances de service * peuvent * fonctionner tant que l'un au moins des liens du cycle est facultatif et dynamique. –

+0

Merci. La seule solution pour un tel cas d'utilisation est de fusionner les deux paquets s'ils sont interdépendants. Même la création d'un troisième paquet ne semblait pas faisable. – Nilesh

Questions connexes