如何在更新捆绑包 OSGI 时保留 service/componnet 运行

How to keep service/componnet running while update bundle OSGI

我已经在我的包中实现了 2 个服务 A、B。我想通过构建一个新的 jar 文件并执行更新命令来更改服务 A 的代码,但保留服务 B 运行 而不重新启动它。

听起来您在 1 个捆绑包中有 2 个服务。部署单位是一个bundle,所以我的建议是把这两个服务拆分成两个bundle。否则,取消部署现有的捆绑包自然也会拆除服务 B。

或者,如果 API/interface 驻留在一个单独的包中,您可以在一个单独的包中为 A 部署一个新的服务实现,具有更高的优先级,并重新连接该服务的所有使用。这通常是相当混乱的,所以它是一个遥远的第二名推荐。

编辑:您评论说您正在将服务组合成一个包以尽量减少 jar 的数量,但您希望独立更新服务。专门用于最小化罐子的数量:您是否正在尝试解决您确实遇到的问题?我主要使用 Liferay,它完全是 OSGi,一个普通的 vanilla 安装带有 1000 多个包——运行时处理得很好。确保您没有抢先优化不需要优化的内容。

如果您的组件具有不同的维护间隔,则将它们部署在不同的包中。时期。对抗系统没用,捆绑数量完全没有问题