java - Glassfish 3.1.2.2 和重用 Bundle ID

标签 java glassfish osgi bundle

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

我正在使用 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,我必须按以下顺序执行以下操作:

  1. 通过 GoGo 控制台卸载我的 bundle
  2. 阻止 Glassfish
  3. 删除bundle<ID>我的 bundle 的文件夹位于 glassfish3\glassfish\domains\domain1\osgi-cache\felix
  4. 更改 bundle.id 中的号码归档到合理的数量
  5. 启动 Glassfish - 它将增加 bundle.id 中的数字文件
  6. 安装我的软件包的新版本

正如你所想象的,我不想每次想要发布/升级时都这样做。 Glassfish 可以自己完成此操作,还是我需要创建某种脚本来为我完成此操作?

最佳答案

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

关于java - Glassfish 3.1.2.2 和重用 Bundle ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509291/

相关文章:

osgi - 如何设置正确的春分安装

java - 获取 Eclipse RCP 应用程序中已安装功能的列表

Java 小程序没有按应有的方式重印

java - SSL 错误证书错误

docker - 使用Docker Compose运行多个GlassFish

java - Netbeans 8.0.1 找不到 shiro.ini

java - 如何取消注册 OSGi 服务

java - 客户端确认收到生产者消息

java - 在 java 中使用属性文件 *AS* static final 变量中的属性

performance - Glassfish 性能监控的开源工具