OSGi将bundle监听器添加到已安装的bundle

时间:2014-05-04 13:58:20

标签: java java-ee osgi osgi-bundle

我有一个已安装的软件包。现在我想添加一个监听器(以后再开始)来查找活动状态。 我发现的唯一方法是

bundle.getBundleContext().addBundleListener(new ...);

但是,只有当bundle处于启动,停止和活动状态时,getBundleContext()才有效。那么,我能做到吗?

3 个答案:

答案 0 :(得分:2)

注册BundleListener来捕获同一个bundle发生的事件是没有意义的。实现BundleListener / BundleTracker时,通常希望捕获具有特殊属性的bundle事件。

使用BundleListener,您可以捕获框架中发生的事件。使用BundleTracker,您首先捕获框架中每个包发生的最后事件,而不是捕获新事件。通常最好使用BundleTracker,因为你想要获取那些已经激活的特殊属性的包。

应该在实现侦听器/跟踪器的bundle的BundleContext的帮助下使用BundleListener / BundleTracker。由于代码在“启动”之前不应在您的包中运行,因此当您想要注册监听器/跟踪器时,BundleContext应始终可用。

了解有关您要实现的用例的更多信息会很有用。也许你根本不需要实现BundleListener / BundleTracker,只需重新设计一下你的bundle中的代码。

答案 1 :(得分:1)

我建议使用BundleTracker来跟踪和响应捆绑状态更改。此外,您必须使用BundleContext来安装捆绑包。因此,您可以使用BundleContext创建BundleTracker。

答案 2 :(得分:0)

你想让Bundle A知道Bundle B什么时候被激活,或者你想在bundle B被激活时执行一些代码吗?在第二种情况下,Bundle Activator可以满足您的需求......