【问题标题】:OSGi declarative-services does not bind services when manually installing bundlesOSGi 声明式服务在手动安装包时不绑定服务
【发布时间】:2019-08-05 17:19:28
【问题描述】:

我正在努力实现的目标

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

  • 模块 A - 提供服务 A 和 B
  • 模块 B - 提供服务 C、参考服务 A 和 B
  • 模块 C - 提供服务 D,处理模块 A 和 B 的安装
  • 模块 D - 参考服务 D 和 B。

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

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

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

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

  • 模块 A 是“TCP 服务器 OSGi Bundle”
  • 模块 B 是“游戏世界 OSGi 捆绑包”
  • 模块 C 是“依赖控制器 OSGi 捆绑包”
  • 模块 D 是“服务器引擎 OSGi 捆绑包”。

到目前为止我已经尝试过什么

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

额外问题

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

这种构建应用程序的方式是否可行,还是我们应该采用另一种方式?如果是这样?

【问题讨论】:

  • OSGi 没有开始排序,Felix SCR 在这方面做得很好。美妙之处在于所有依赖项都是动态绑定的。一个顺序很重要的系统是一个糟糕的 OSGi 系统。您可以使用 Apache Felix gogo 并使用 scr:list ad scr:info 命令查看您的服务不满意的原因。

标签: java osgi apache-felix equinox declarative-services


【解决方案1】:

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

使用reluctant,当以后注册额外/更好的服务时,引用将不会被反弹,例如提供服务的bundle在bundle消费服务之后开始。使用greedy,引用将被反弹。

【讨论】:

  • 我找不到确切的方法,但是否只是通过将 policy="dynamic" policy-option="greedy" 添加到每个参考用法?
  • policy-option="greedy" 是您所需要的。如果您想使用 policy="dynamic",那么您的代码需要随时准备好进行注入,而不仅仅是在组件激活期间。
  • 我认为你是对的,但是我的项目还没有准备好处理添加策略选项的新版本,我使用 v.1.1.0 我需要在 xmlns 中使用 v1.4.0 :scr。所以我不能在不更新项目依赖项的情况下立即使用它。但是我在这样做时遇到了麻烦......
  • policy-option="greedy" 在 DS v1.2.0 中添加。
  • 感谢 BJ,这是问题的一部分,但我们必须将整个项目转换为纯 OSGi,因为我们无法更新依赖项以将更新的 OSGi 与 Equinox 一起使用。切换到 apache Felix gogo 后,在修复了更多错误后,它运行顺利。
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 2010-09-23
  • 2012-04-27
  • 1970-01-01
  • 2011-11-16
  • 2013-10-09
  • 2018-05-20
  • 1970-01-01
相关资源
最近更新 更多