这是我观察到的一个有趣的想法,它让我困惑了一段时间。
我正在使用 Glassfish 3.1.2.2,我在其上部署了多个 OSGi 包。
当我想用新版本/修订版替换 bundle 时,我必须 uninstall
然后install
bundle 。
通常情况下,我假设 Glassfish 可以重用不再存在的旧包 ID,但它只是继续。例如,假设 Glassfish bundle 的 ID 为 100,而我自己的 bundle 从 101 开始到 200。
当我卸载旧 bundle 并安装新 bundle 时,我假设 101-200 范围内的 bundle ID 是可重用的。
相反,我的新 bundle 的 ID 从 201 到 300。
我像这样卸载它们:
uninstall <bundle id>
并像这样安装:
install file:<path-to-bundle>
如何解决此问题以便 Glassfish 重用旧的包 ID?
编辑:
我找到了一个名为 bundle0
的文件夹在glassfish3\glassfish\domains\domain1\osgi-cache\felix
其中包含一个名为 bundle.id
的文件带有一个数字,这似乎类似于数据库序列,注明最后使用的 bundle ID。
为了让我能够手动更改以下 bundle 安装的起始 bundle ID,我必须按以下顺序执行以下操作:
- 通过 GoGo 控制台卸载我的 bundle
- 阻止 Glassfish
- 删除
bundle<ID>
我的 bundle 的文件夹位于glassfish3\glassfish\domains\domain1\osgi-cache\felix
- 更改
bundle.id
中的号码归档到合理的数量 - 启动 Glassfish - 它将增加
bundle.id
中的数字文件 - 安装我的软件包的新版本
正如你所想象的,我不想每次想要发布/升级时都这样做。 Glassfish 可以自己完成此操作,还是我需要创建某种脚本来为我完成此操作?
最佳答案
OSGi 规范要求 bundle ID 不能重复使用。注意:您可以就地更新 bundle ,而不是卸载/安装。当您更新时, bundle ID 会被保留。
关于java - Glassfish 3.1.2.2 和重用 Bundle ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509291/