【发布时间】:2020-07-27 00:47:52
【问题描述】:
我在我的包中实现了 2 项服务 A、B。我想通过构建一个新的 jar 文件并执行更新命令来更改服务 A 的代码,但保持服务 B 运行而不重新启动它。
【问题讨论】:
标签: osgi bundle apache-felix declarative-services
我在我的包中实现了 2 项服务 A、B。我想通过构建一个新的 jar 文件并执行更新命令来更改服务 A 的代码,但保持服务 B 运行而不重新启动它。
【问题讨论】:
标签: osgi bundle apache-felix declarative-services
听起来您在 1 个捆绑包中有 2 个服务。部署单元是一个包,所以我的建议是将两个服务分成两个包。否则,取消部署现有的 bundle 自然也会关闭 Service B。
或者,如果 API/接口位于单独的包中,您可以在单独的包中为 A 部署一个新的服务实现,具有更高的优先级,并重新连接服务的所有使用。这通常是相当令人困惑的,所以这是一个遥远的第二名推荐。
编辑:您评论说您正在将服务组合在一个捆绑包中以最大限度地减少 jar 的数量,但您希望独立更新服务。专门用于最小化罐子的数量:您是否正在尝试解决您确实遇到的问题?我主要使用完全是 OSGi 的 Liferay,一个普通的 vanilla 安装带有 1000 多个捆绑包 - 运行时处理它就好了。确保您没有抢先优化不需要优化的内容。
如果您的组件具有不同的维护间隔,则将它们部署在不同的捆绑包中。时期。对系统工作毫无用处,它对捆绑包的数量完全没有问题。
【讨论】: