【发布时间】: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 捆绑包”。
到目前为止我已经尝试过什么
- Based on the active issue 我尝试确保安装的构建顺序,以便模块 A 在模块 B 之前安装,甚至可以反过来安装。我什至尝试在第二个捆绑包达到“开始”状态后安装捆绑包。
- 模块 A 启动后在模块 B 上调用更新。
- 查找我是否需要在安装捆绑包时手动注册和提供不同服务,但我找不到任何东西,或者根本不明白答案..
- 我尝试了很多愚蠢的事情,在这里尝试或描述可能没有意义。
额外问题
在通过 bundlecontext 安装和启动时,声明式服务是否应该自动将提供程序与引用绑定?
这种构建应用程序的方式是否可行,还是我们应该采用另一种方式?如果是这样?
【问题讨论】:
-
OSGi 没有开始排序,Felix SCR 在这方面做得很好。美妙之处在于所有依赖项都是动态绑定的。一个顺序很重要的系统是一个糟糕的 OSGi 系统。您可以使用 Apache Felix gogo 并使用 scr:list ad scr:info 命令查看您的服务不满意的原因。
标签: java osgi apache-felix equinox declarative-services