首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个带有ds注释的目标服务的多个PID

一个带有ds注释的目标服务的多个PID
EN

Stack Overflow用户
提问于 2015-07-05 13:51:41
回答 3查看 929关注 0票数 1

我想知道是否有可能利用osgi企业规范中使用声明性服务注释的第104.7.5段(使用多个位置)解释的内容。引用规范:

Bundles还可能对一个目标服务的多个PID感兴趣,因此它们可以为一个服务注册多个PID。..。 对主机配置感兴趣的绑定将使用以下属性注册托管服务: service.pid = "com.acme.host","com.acme.system“ com.acme.hostcom.acme.system PID的绑定将被召回,因此必须区分这两种情况。因此,此托管服务将有一个回调,类似于:

代码语言:javascript
复制
volatile URL url;
public void updated( Dictionary d ) {
if ( d.get("service.pid").equals("com.acme.host"))
    this.url = new URL( d.get("host"));
if ( d.get("service.pid").equals("com.acme.system"))
   ...
}

我尝试使用以下语法:

代码语言:javascript
复制
@Component(
    immediate = true,
    configurationPid = "[com.mycompany.ws.rest,com.mycompany.endpoints]",
    configurationPolicy = ConfigurationPolicy.REQUIRE
) 
public class TestImpl implements Test {
    // ...
}

但这失败了。当然,您可以获得对配置管理的引用,并基于所需的pids浏览配置,但这对我来说似乎有点不雅观,因为理论上可以将其委托给ds注释。

有可能吗?正确的语法是什么?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-05 15:19:06

我认为使用configurationPidconfigurationPolicy值是不可能的。我要做的是:

  • 将服务工厂pid定义为服务属性。
  • 实现ManagedService接口。

示例:

代码语言:javascript
复制
@Component(property = {Constants.SERVICE_PID + "=com.acme.host", 
                       Constants.SERVICE_PID + "=com.acme.system"})
public class TestComponent implements ManagedService {

    @Override
    public void updated(Dictionary<String, ?> dict) {
    ...
    }

当然,这有一个缺点,就是即使没有配置,组件也会被激活,但是您可以使用两个PID。

票数 2
EN

Stack Overflow用户

发布于 2015-07-05 20:22:12

在即将发布的DS1.3规范中支持多个PID。有关下载第6版规范草稿的链接,请参见http://www.osgi.org/Specifications/Drafts

票数 0
EN

Stack Overflow用户

发布于 2018-12-22 17:13:24

新版本解决了这个问题..。

来自:https://osgi.org/specification/osgi.cmpn/7.0.0/service.component.html#org.osgi.service.component.annotations.Component

112.13.4.11 String[] configurationPid默认为"$“-配置此组件的配置PID。 每个值指定此组件的配置PID。 如果未指定值,则使用此组件的名称作为此组件的配置PID。 可以使用一个特殊的字符串("$")将组件的名称指定为配置PID。名称常量保存这个特殊的字符串。例如: ( @Component(configurationPid={"com.acme.system",Component.NAME})从该注释创建组件描述的工具必须用该组件的实际名称替换特殊字符串。 还请参见组件描述的组件元素的配置-pid属性。 自1.2以来

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31231054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档