【问题标题】:How to keep service/componnet running while update bundle OSGI如何在更新捆绑包 OSGI 时保持服务/组件运行
【发布时间】:2020-07-27 00:47:52
【问题描述】:

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

【问题讨论】:

    标签: osgi bundle apache-felix declarative-services


    【解决方案1】:

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

    或者,如果 API/接口位于单独的包中,您可以在单独的包中为 A 部署一个新的服务实现,具有更高的优先级,并重新连接服务的所有使用。这通常是相当令人困惑的,所以这是一个遥远的第二名推荐。

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

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

    【讨论】:

    • 我的主要想法是在 1 个文件 jar(包)中部署多个进程/作业,因为我的系统中有太多进程。例如,如果我的系统有 70-100 个进程/作业,我将需要部署 70-100 个 jar(包),我认为这种方法很难实施和监控。因此,我想将这些进程划分为一些“组合”包(包 A 中的 15 个进程,包 B 中的 15 个进程等等。
    • 但是,同一包中的进程可以独立更新。经过研究,我决定使用 OSGI 服务作为我的进程,也就是说我使用 OSGI 服务来启动和停止我的进程,并且看起来运行良好。
    • 您对我的想法有任何想法(OSGI 方法)吗?我提出了一些问题,但没有人可以提供帮助。请点击以下链接或直接在此主题中回复我
    • 最后一条评论实际上是一个新问题,而不是澄清恕我直言。无论如何,“一个项目的多个捆绑包”会解决什么问题?听起来很像x-y-problem。 eclipse 可以处理的项目没有限制,OSGi 运行时可以处理的包的数量也没有限制。决定您是希望您的项目彼此独立还是捆绑在一起成为一个单元,然后按照您的决定去做。但是决定一个,不要试图与系统抗争,因为你最初的想法不同。
    猜你喜欢
    • 2017-09-08
    • 2014-04-23
    • 1970-01-01
    • 2015-01-12
    • 2013-07-08
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多