2016-09-19 122 views
1

我有一个关于卡拉夫和功能加载的问题。我有一个包含我的应用程序的所有捆绑包的kar文件。它在PROD环境中发布。它是一个基于4.0.4版本的离线Karaf自定义构建 - 而KAR文件位于部署文件夹中。我想制作一个覆盖一个或多个相同捆绑的补丁。由于某些政策,无法发布新版本的卡尔。我的问题是:Karaf包加载优先级

  1. 引用特定版本的bundle的功能文件。如果我将它们放入/部署到相同版本,JAR将被使用,还是不确定?
  2. 当我将更新的版本(次版本更改)绑定到/ deploy时,它是使用还是特定功能定义的版本?或者,也许行为是非确定性的?
  3. 当1或2没有确定性的解决方案时,还有其他吗?

回答

2

1a。要素文件中的引用包将从可用存储库(通常是maven存储库)加载。部署/文件夹不是存储库。部署/文件夹中的任何内容都会立即加载。

1b。如果已经加载了具有匹配符号名称+版本的包,则Karaf将不会加载第二个版本,如果一个功能文件指定的话。请考虑加载哪些功能和软件包的功能定义为“如果它尚未存在,请加载”

  1. 如果是第二个文件,则会将其部署为第二个文件束。可以说是一个包的唯一“钥匙”是基于MANIFEST.MF中的值的符号名称+版本。

  2. 不适用。这是确定性的。

+0

1a - 好的。但是当版本相同时,karaf重新启动后将部署哪个版本?或在卡拉OK干净后? 1b - 谢谢,这很有道理。 2.好的。因此,当服务不愿意进行声明式服务时,它不会改变 - 所以它不是一个解决方案。 3.好的。谢谢。 –