我目前面临的问题是如何动态地" wire" OSGi服务取决于其配置属性。我想用Declarative Services做到这一点。
举一个具体的例子: 我有两个不同的OSGi服务A和B,它们都是ManagedServiceFactories并需要配置。所以我可以有多个A实例和多个B实例,每个实例都有不同的配置。
我使用Felix FileInstall,DS / SCR和BNDTools,我的配置看起来像这样(简化):
一个-one.cfg: b.id = foo
一个-two.cfg: b.id = bar
B-one.cfg: id = foo
B-two.cfg: id = bar
现在我想将服务b-one连接到a-one并将服务b-two连接到a-two(取决于它们匹配的配置属性b.id = id)。
目前,我可以看到两种方法来实现这一目标:
对于解决方案1.)我不喜欢我需要将Service B的所有实例绑定到Service A的每个实例。我只想绑定满足配置属性约束的Service B实例。
对于解决方案2.)我不喜欢我需要深入到较低级别:拥有ManagedServiceFactory并通过手动查找正确的(LDAP过滤的)服务实例来绕过DS。
有人知道更好的解决方案或者最佳实践"怎么实现呢? 我不确定WireAdmin规范是否可以帮助我?
欢迎使用BNDTools / BND Annotation的解决方案;)
TIA
干杯 的Sascha
答案 0 :(得分:1)
如果为组件注册服务,则DS始终将所有配置信息作为服务属性。您应该在A和B ManagedServiceFactory中执行相同操作,以便可以搜索服务。
另一方面,如果您使用“.target”后缀为引用指定属性,则可以通过配置指定要提取的服务。
用你的例子: