gpt4 book ai didi

spring - 找不到服务,因为 OSGi bundle 未激活

转载 作者:行者123 更新时间:2023-12-04 18:53:52 25 4
gpt4 key购买 nike

我在发现某些未激活的 OSGi bundle 提供的服务时遇到问题。让我描述一下情况:

  • Bundle A 定义了接口(interface) X
  • Bundle B、C 和 D 提供实现接口(interface) X 的服务
  • 这些包的服务是通过 Spring DM 注册的,因此它们仅在包被激活并且 Spring DM 初始化包中定义的应用程序上下文时创建
  • Bundle A 被激活,并且在某些时候向服务注册中心询问接口(interface) X 的服务。它没有找到任何服务,因为 bundle B、C 和 D 尚未进入 ACTIVE 状态(它们只是 RESOLVED)。

  • 我似乎无法启动 bundle B、C 或 D,因此无法注册它们的服务。通过将它们添加到 config.ini 来强制它们开始不是一个选项,因为可以在应用程序中安装任意数量的包(通过类似 Eclipse p2 的更新机制)实现接口(interface) X。

    该应用程序是基于 Eclipse 3.5 的 RCP 应用程序,使用 Spring 2.5.6 和 Spring DM 1.2.1。

    如何强制激活这些 bundle ?

    最佳答案

    您真正拥有的是依赖层次结构问题,您提出的 hacky 解决方案实际上只是潜在问题的创可贴。

    您真正应该考虑的是系统的体系结构,实际上您所拥有的是循环依赖(回复:在您的原始帖子的评论中进行讨论)。你有(喜欢与否)A 需要来自(并且在某种意义上依赖于)B 和 C 的服务。同时,B 和 C 直接依赖于 A,因此在 A 出现之前无法启动。

    在最好的情况下,您可以在 B 和 C 中编写代码来监听 A 的存在,但这充其量掩盖了(正如我所提到的)根本问题。您真正应该考虑的是将 A 拆分为两个 bundle ,我们称它们为 A1 和 A2。

    A1 应该提供 B 和 C 需要(依赖)的接口(interface)。 A2 应该有 B 和 C 所依赖的服务的监听器。在启动时,如果 B 和 C 是必需的服务,则必须运行 A1,但 A2 可能会在稍后启动,并且一切正常。

    关于spring - 找不到服务,因为 OSGi bundle 未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009309/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com