【发布时间】:2017-08-25 19:12:07
【问题描述】:
过去两年我在不同的任务中使用 Karaf(2.4.* 和 4.0.*),每次在卸载/安装 API 包时遇到缓存问题。
让我们想象以下场景:
- 我安装(1)service-api/1.0.0,导出com.service.api
- 我安装了 (2) service-core/1.0.0,它导入了 com.service.api
- 我卸载了 service-api/1.0.0。
- 我安装了 (3) service-api/1.1.0,它添加了新接口。
当我使用 bundle:install -s 安装捆绑包时会出现不同的行为,卸载以卸载它们:
-core 并不总是停止。实际上,他使用的是 service-api 的缓存版本。当我执行导入 -i (2) 时,我什至可以看到捆绑包 ID (1)。执行“解决 (2)”并不能解决问题,只能“停止 (2)”然后重新启动。
当我安装 service-api/1.1.0 时,仍然会出现 3 中的错误,并且我的 service-core 再次使用旧的 -api。最大的问题是如果我安装一个新的 service-soap,它将使用 bundle (3),而 (2) 使用 (1),因此它会在类加载器之间产生冲突。
我在互联网上找不到任何关于这件事的资源,我已经尝试过 Equinox & Felix,但我没有看到任何解决该问题的方法。 bundle:install 是安装 bundle 的好方法吗?使用 deploy 是更好的解决方案吗?
Bonus : 在 OSGI 规范中,在释放所有引用之前不应卸载捆绑包,但在 Karaf 中,捆绑包会直接自行卸载。这可能是上述问题的原因吗?
【问题讨论】:
标签: java osgi apache-karaf osgi-bundle karaf