【问题标题】:OSGi add bundle listener to installed bundleOSGi 将捆绑侦听器添加到已安装的捆绑包
【发布时间】:2014-05-04 13:58:20
【问题描述】:
我有一个已安装的捆绑包。现在我想向它添加监听器(稍后开始)以查找它何时进入活动状态。
我找到的唯一方法是
bundle.getBundleContext().addBundleListener(new ...);
但是 getBundleContext() 仅在 bundle 处于启动、停止、活动状态时才有效。那么,我可以这样做吗?
【问题讨论】:
标签:
java
jakarta-ee
osgi
osgi-bundle
【解决方案1】:
注册一个 BundleListener 来捕获同一个包发生的事件是没有意义的。当您实现 BundleListener / BundleTracker 时,您通常希望捕获具有特殊属性的包的事件。
使用 BundleListener,您可以捕获框架中发生的事件。使用 BundleTracker,您首先捕获框架中每个捆绑包发生的最后事件,然后才能捕获新事件。通常最好使用 BundleTracker,因为您想获取具有那些已经处于活动状态的特殊属性的捆绑包。
BundleListener / BundleTracker 应该在实现监听器 / 跟踪器的包的 BundleContext 的帮助下使用。由于代码在“开始”之前不应在您的包中运行,因此当您要注册侦听器/跟踪器时,BundleContext 应该始终可用。
了解更多有关您想要实现的用例的信息会很有用。也许你甚至根本不需要实现 BundleListener / BundleTracker,只需重新设计你的包中的代码。
【解决方案2】:
我建议使用 BundleTracker 来跟踪和响应包状态更改。此外,您必须使用 BundleContext 来安装捆绑包。所以你可以使用你的 BundleContext 来创建 BundleTracker。
【讨论】:
-
感谢您的帮助。我将阅读什么是 BundleTracker 以及如何使用它。你知道,你总是帮我解决我的 osgi 问题。非常感谢你。我再问你一次,你能看一下一个问题吗?我必须解决的最后一个最重要的问题,我必须为我当前的项目构建架构。这个问题stackoverflow.com/questions/23174582/…是什么问题?也许我是一个愚蠢的白痴,提出了完全错误的问题?因为没有人回答。
【解决方案3】:
您是否希望 Bundle A 知道 Bundle B 何时激活,或者您想在 bundle B 激活时执行一些代码?在第二种情况下,Bundle Activator 可以满足您的需求...