【问题标题】:Karaf : feature:install restarts previous bundlesKaraf : feature:install 重新启动以前的包
【发布时间】:2018-05-30 13:45:05
【问题描述】:

我的 karaf 服务器遇到了一个恼人的行为:标题说明了一切,当我使用以下功能时,已安装的捆绑包会重新启动:安装命令。

* 项目上下文 *

  • 我处理的大部分bundle都是骆驼路由,其他的都是常用工具,路由共享。

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

* 场景 *

  • 开始一个新的 karaf 实例
  • 安装常用功能
  • 安装骆驼路线功能:目前没有问题
  • 安装第二个骆驼路线功能:之前安装的功能中的捆绑包将重新启动。

*取得突破*

所有包都声明了一个通用配置文件,带有选项“update-strategy=reload”。这意味着 karaf 会通知每个包对该文件的任何修改,并且该包将重新启动以将其考虑在内。

事实上,当我安装一个依赖于这个文件的新包时,会读取它以初始化包的属性,并且 karaf 认为它是文件修改。因此,安装一个新的捆绑包会导致所有其他捆绑包重新启动。

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

* 剩菜 *

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

我还是检查了,但没有其他配置文件可以对此负责。

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

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

感谢您的时间和关注!

【问题讨论】:

    标签: apache-camel osgi karaf blueprint


    【解决方案1】:

    我认为您的描述存在一些误解。

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

    您也不应该在已知会扰乱您的部署的包之间共享某些配置。

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

    【讨论】:

    • 这看起来很有希望!我将查看 -v 输出,看看重新启动的包是否是导入/导出机制的结果。作为记录,共享配置是我的客户提出的要求,我不能这样做^^
    猜你喜欢
    • 2015-12-03
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多