OSGi declarative-services 在手动安装包时不绑定服务

OSGi declarative-services does not bind services when manually installing bundles

我想要达到的目标

使用 netbeans 模块化系统为我们准备应用程序,因为我们通过 apache felix 使用声明性服务在 OSGi 中实现模块。这是模块设置:

模块C通过以下代码安装模块:

BundleContext context = FrameworkUtil.getBundle(class).getBundleContext();
Bundle tcp = context.installBundle("file:Location");
tcp.start();

一切都安装和启动没有错误。 但是,声明的引用未绑定到服务。

为了更具体地了解所有内容如何结合在一起,我将代码添加到 github https://github.com/jonaslagoni/server。请记住将文件中的行:模块 C,dk.sdu.ace.dp.Controller,第 27-28 行更改为模块 B 和 A 的位置。

到目前为止我尝试了什么

  1. Based on the active issue 我尝试确保安装的构建顺序,以便模块 A 在模块 B 之前安装,甚至反之亦然。在第二个包达到 "started" 状态后,我什至尝试安装包。
  2. 模块A启动后调用模块B更新
  3. 如果我需要在安装捆绑包时手动注册和提供不同的服务,我找不到任何东西,或者根本不明白答案..
  4. 我已经尝试了很多愚蠢的事情,在这里尝试或描述可能没有意义。

补充问题

声明式服务是否应在通过 bundlecontext 安装和启动时自动将提供程序与引用绑定?

这种构建应用程序的方式是否可行,或者我们应该采用其他方式吗?如果是哪个?

您的 DS 引用使用了可选基数,但未使用 greedy policy option。 (reluctant 策略选项是默认的历史向后兼容性原因。)

使用reluctant,当稍后注册additional/better 服务时,例如提供服务的bundle 在使用服务的bundle 之后开始,引用将不会被反弹。使用greedy,参考将被反弹。