Osgi 声明式服务条件绑定(bind)

标签 osgi declarative-services

我有这种情况,我有三个提供相同接口(interface)的声明性服务(比如一个阅读器接口(interface),我有 readerimpl1-database-readerimpl2-flat file-readerimpl3-memory)。我想要一个只绑定(bind)到数据库实现的消费者。在组件定义中,我们给它一个名字,所以我很确定这个名字在注册表中,所以如果我要添加一个激活方法,我可以使用这个名字从组件上下文中查找。

我想通过绑定(bind)/取消绑定(bind)来尝试它,尽管使用服务名称作为参数。我很确定可以使用组件引用元素中的“目标”参数来执行此操作,但我还没有找到如何使用它。

有没有其他人这样做过?

这类似于使用
@Reference(mapped-name="foo")

最佳答案

Target 只是一个 OSGi filter .您可以使用它按任何服务属性进行过滤。因此,如果您的服务具有名为 backend 的属性带值 filedatabase ,您可以绑定(bind)以下目标:

<scr:reference ... target="(backend=database)"/>

具有数据库后端的服务本身将注册为:
<scr:component ...>
    ...
    <property name="backend" type="String" value="database"/>
</scr:component>

关于Osgi 声明式服务条件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850444/

相关文章:

java - 启动 OSGi 包

java - 我不能点击这个 JTextField 来编辑它,为什么不呢?

java - 声明式服务组件满意和不满意

java - Eclipse 中的 OSGi 声明式服务、多个服务接口(interface)和线程安全

java - 使用 Web Start/JNLP 动态加载额外的 jar 文件

osgi - OSGi 服务的消息总线

java - 在 OSGi 中加载 native Linux 库时出现 UnsatisfiedLinkError

security - 在 OSGi 上使用 ThreadLocal 安全吗?

osgi - 中断 OSGi 组件被激活的有效方法

java - OSGi原型(prototype)组件的初始化