java - OSGi 蓝图:如何从 BundleListener 接口调用 onBundleChanged() 方法?
问题描述
我正在尝试在类中实现 BundleListener 接口以检索捆绑更改。我试图让它工作,但我的 onBundleChanged() 方法似乎没有被调用。也许是因为它没有在“激活器”类中实现。我没有任何线索。
我想获得最新的捆绑包更改,因为我想开发一个可以在运行时将捆绑包作为插件安装的应用程序。我想通过使用 BundleListener 接口,我可以授权可以安装在我的 Apache Karaf 环境中的 Bundle。
摘自 Blueprint.xml
<bean id="MyBundleListener" class="com.hallo.service.MyBundleListener"/>
我的课
public class MyBundleListener implements BundleListener {
@Override
public void bundleChanged(BundleEvent event) {
System.out.println("bundleChanged() -> Just to test if it works");
}
}
在 Apache Karaf 中,我使用
log:tail
查看该方法是否被调用,但到目前为止还没有结果。
解决方案
对于 BundleListener,创建 bean 是不够的。您还必须将 BundleListener 添加到 BundleContext。
您可以在 bean 的 init 方法中执行此操作。看
bundleContext.addBundleListener
也不要忘记在destroy方法中再次删除监听器。
https://osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html
推荐阅读
- selenium - chromedriver解压后没有.exe
- angular - 如何从父组件刷新我的数据?
- python - 选中复选框禁用输入字段
- angular - 单元测试取消订阅 fromEvent(this.document, 'click')
- selenium - 如何在 selenium hub 中运行测试时上传文件
- javascript - 如何将值从子弹出窗口填充到父窗口?
- angularjs - 使用离子InApp浏览器实现时,为什么在android应用程序的外部浏览器中打开链接
- algorithm - 编写一个程序来测试给定的数字是否是 Scheme 中不同平方的和
- git - 在单个存储库上工作的并发 git 进程
- c# - NLog 文件的自定义文件名