Glassfish 3.1.2.2并重用Bundle ID

时间:2014-03-19 14:38:48

标签: java glassfish osgi bundle

这是一个有趣的想法,我已经观察过,现在已经困扰了我一段时间。

我正在使用Glassfish 3.1.2.2,我在其上部署了多个OSGi包。

当我想用新版本/修订版替换捆绑包时,我必须uninstall然后install捆绑包。

通常情况下,我假设Glassfish可以重复使用不再存在的旧捆绑ID,但它只会继续。例如,假设Glassfish捆绑包的ID为100,而我自己的捆绑包从101开始变为200.

当我卸载旧捆绑包并安装新捆绑包时,我假设101-200范围内的捆绑包ID可以重复使用。

相反,我的新捆绑包的ID为201到300.

我正在卸载它们:

uninstall <bundle id>

并安装如下:

install file:<path-to-bundle>

如何解决此问题,以便Glassfish重用旧的捆绑包ID?

编辑:

我在bundle0找到了一个名为glassfish3\glassfish\domains\domain1\osgi-cache\felix的文件夹,其中包含一个名为bundle.id的文件,其中包含一个数字,似乎类似于数据库序列,注意到最后一个包ID使用

为了让我使用以下软件包安装手动更改起始软件包ID,我必须按以下顺序执行以下操作:

  1. 通过GoGo控制台卸载我的软件包
  2. 停止Glassfish
  3. bundle<ID>
  4. 中删除我的捆绑包的glassfish3\glassfish\domains\domain1\osgi-cache\felix个文件夹
  5. bundle.id文件中的号码更改为合理的数字
  6. 启动Glassfish - 它将增加bundle.id文件
  7. 中的数字
  8. 安装我的捆绑包的新版本
  9. 您可以想象,每次我想要发布/升级时,我都不想这样做。 Glassfish可以单独执行此操作,还是需要创建某种可以为我执行此操作的脚本?

2 个答案:

答案 0 :(得分:4)

OSGi规范要求捆绑ID不能重复使用。注意:您可以就地更新捆绑包而不是卸载/安装。更新时,将保留包ID。

答案 1 :(得分:2)

为什么要保留相同的ID?正如BJ所说,你不应该这样做,所以你可能错误地接近另一个问题。