Karaf:功能:安装重启以前的捆绑

时间:2018-05-30 13:45:06

标签: apache-camel osgi karaf blueprint

我面对来自我的karaf服务器的恼人行为:标题说明了一切,当我使用feature:install命令时,已安装的软件包重新启动。

*项目背景*

  • 我处理的大多数捆绑包都是骆驼路线,其他捆绑包是路由共享的常用工具。

  • 因此,我有一个2级项目:首先安装的公共部分,以及所有依赖于公共部分的驼峰路径(取决于Maven的观点)。

    < / LI>

*情景*

  • 开始一个新的karaf实例
  • 安装常用功能
  • 安装驼峰路线功能:到目前为止没有麻烦
  • 安装第二个驼峰路由功能:以前安装的功能中的捆绑包将重新启动。

*突破*

所有捆绑包都声明了一个公共配置文件,选项&#34; update-strategy = reload&#34;。这意味着karaf会通知每个捆绑包对该文件的任何修改,捆绑包将重新启动以将其考虑在内。

事实上,当我安装了一个依赖于该文件的新bundle时,它将被读取以初始化bundle的属性,而karaf认为它是一个文件修改。因此,安装新捆绑包会使所有其他捆绑包重新启动。

正如您所料,我通过删除update-strategy选项解决了这个问题,而且我的大部分功能现在都很干净。

*剩菜*

但是,其中一些仍然存在错误:安装任何这些麻烦的功能将重新启动所有其他已安装的功能。这是一个单向问题,安装一个干净的捆绑包不会有麻烦的重启。

无论如何我检查了,但没有其他配置文件可以对此负责。

任何帮助或建议都将不胜感激,我还可以提供任何有助于您理解的文件的匿名示例,例如osgi-context或功能的pom.xml

最后一件事:我的功能重新组合了大约50个捆绑包,因此我几乎无法理解karaf日志,并且我无法确定哪个捆绑包首先重新启动。

感谢您的时间和关注!

1 个答案:

答案 0 :(得分:1)

我认为你所描述的内容存在一些误解。

update-strategy = reload不会导致bundle重新加载。它会导致蓝图上下文重新加载。

你也不应该在捆绑包之间共享一些配置,因为它已经搞乱你的部署。

捆绑包可能会重新启动还有其他原因。 karaf功能安装尝试提供karaf中整体所需的最佳捆绑包,以满足当前安装的功能集。 典型情况是您首先使用包含可选包导入的包安装功能。此时它无法提供包装。然后安装第二个功能,该功能提供程序包的导出程序。现在可以满足bundle的可选依赖项,并且karaf将重新启动bundle。 您可以使用功能:install -v来查看此类情况。这将显示重新启动的捆绑包以及原因。所以这可能会帮助您调试重启的原因。