这是一个有趣的想法,我已经观察过,现在已经困扰了我一段时间。
我正在使用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,我必须按以下顺序执行以下操作:
bundle<ID>
glassfish3\glassfish\domains\domain1\osgi-cache\felix
个文件夹
bundle.id
文件中的号码更改为合理的数字bundle.id
文件您可以想象,每次我想要发布/升级时,我都不想这样做。 Glassfish可以单独执行此操作,还是需要创建某种可以为我执行此操作的脚本?
答案 0 :(得分:4)
OSGi规范要求捆绑ID不能重复使用。注意:您可以就地更新捆绑包而不是卸载/安装。更新时,将保留包ID。
答案 1 :(得分:2)
为什么要保留相同的ID?正如BJ所说,你不应该这样做,所以你可能错误地接近另一个问题。