【发布时间】:2015-09-09 07:47:49
【问题描述】:
我目前面临一个问题,即如何根据 OSGi 服务的配置属性动态“连接”它们。我想通过声明式服务做到这一点。
举个具体的例子: 我有两个不同的 OSGi 服务 A 和 B,它们都是 ManagedServiceFactories 并且需要配置。所以我可以有多个 A 实例和多个 B 实例,每个实例都有单独的配置。
我使用 Felix FileInstall、DS/SCR 和 BNDTools,我的配置看起来像这样(简化):
a-one.cfg: b.id = foo
a-two.cfg: b.id = 条形
b-one.cfg: id = foo
b-two.cfg: id = 条形
现在我想将服务 b-one 连接/绑定到 a-one,将服务 b-2 连接到 a-2(取决于它们匹配的配置属性 b.id = id)。
目前我可以看到两种方法来实现这一点:
- 将服务 B 的所有个可用实例绑定到服务 A 的实例,并根据其 ID 选择合适的服务 B。
- 为服务 A 实现一个自己的 ManagedServiceFactory,它创建一个 LDAP 过滤器来查找服务 B 的正确实例。
对于解决方案 1.) 我不喜欢我需要将服务 B 的所有实例绑定到服务 A 的每个实例。我喜欢只绑定满足我的配置属性约束的服务 B 的实例。
对于解决方案 2。)我不喜欢这样,我需要深入挖掘:拥有 ManagedServiceFactory 并通过手动查找正确的(LDAP 过滤)服务实例绕过 DS。
有谁知道更好的解决方案或“最佳实践”如何实现? 我不确定 WireAdmin 规范是否可以帮助我?
欢迎使用 BNDTools/BND 注释的解决方案 ;)
tia
干杯 萨沙
【问题讨论】: