Java Glassfish 3.1.2.2和重复使用捆绑ID

Java Glassfish 3.1.2.2和重复使用捆绑ID,java,glassfish,osgi,bundle,Java,Glassfish,Osgi,Bundle,我观察到了一个有趣的想法,这让我困惑了一段时间 我正在使用Glassfish 3.1.2.2,我在其上部署了多个OSGi捆绑包 当我想用新版本/修订版替换捆绑包时,我必须卸载,然后安装捆绑包 通常,我假设Glassfish可以重用不再存在的旧bundle ID,但它仍在继续。例如,假设Glassfish捆绑包的ID为100,我自己的捆绑包的ID从101到200 当我卸载旧的bundle并安装新的bundle时,我假设101-200范围内的bundle ID是可重用的 相反,我的新捆绑包的ID从2

我观察到了一个有趣的想法,这让我困惑了一段时间

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

当我想用新版本/修订版替换捆绑包时,我必须
卸载
,然后
安装
捆绑包

通常,我假设Glassfish可以重用不再存在的旧bundle ID,但它仍在继续。例如,假设Glassfish捆绑包的ID为100,我自己的捆绑包的ID从101到200

当我卸载旧的bundle并安装新的bundle时,我假设101-200范围内的bundle ID是可重用的

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

我将按如下方式卸载它们:

uninstall <bundle id>
install file:<path-to-bundle>
卸载
然后像这样安装:

uninstall <bundle id>
install file:<path-to-bundle>
安装文件:
如何解决这个问题,使Glassfish重用旧的bundle id

编辑:

我在
glassfish3\glassfish\domains\domain1\osgi cache\felix
中找到了一个名为
bundle 0
的文件夹,其中包含一个名为
bundle.id
的文件,该文件带有一个数字,似乎类似于DB序列,并记录了最后使用的bundle id

为了使我能够使用以下捆绑包安装手动更改起始捆绑包id,我必须按以下顺序执行以下操作:

  • 通过GoGo控制台卸载我的捆绑包
  • 阻止玻璃鱼
  • 删除
    bundle
    glassfish3\glassfish\domains\domain1\osgi cache\felix中我的bundle文件夹
  • bundle.id
    文件中的数字更改为合理的数字
  • 启动Glassfish-它将增加
    bundle.id
    文件中的数字
  • 安装我的捆绑包的新版本
  • 正如您可以想象的那样,我不想在每次发布/升级时都这样做。
    Glassfish可以自己完成这项工作吗,或者我需要创建某种脚本来为我完成这项工作吗?

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

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

    为什么要保留相同的id?正如BJ提到的,您不应该这样做,因此您可能以错误的方式处理另一个问题。

    为什么要保留相同的ID?正如BJ提到的,您不应该这样做,因此您可能以错误的方式处理了另一个问题。

    当您想用更高版本更新捆绑包时会发生什么,当您想用相同版本更新捆绑包时会发生什么?它会在两种情况下更新捆绑包,还是只在第一种情况下更新捆绑包?OSGi框架在更新捆绑包时不关心版本。它将用您在更新调用中提供的任何内容替换捆绑包。因此,您可以通过更新升级和降级捆绑包。当您想用更高版本的捆绑包更新捆绑包时会发生什么情况,当您想用相同版本的捆绑包更新捆绑包时会发生什么情况?它会在两种情况下更新捆绑包,还是只在第一种情况下更新捆绑包?OSGi框架在更新捆绑包时不关心版本。它将用您在更新调用中提供的任何内容替换捆绑包。因此,您可以通过更新升级和降级捆绑包。