我想知道是否有可能利用声明性服务注释来利用osgi企业规范的参数104.7.5(使用多地点)所解释的内容。引用规范:
Bundles也可能对一个目标服务的多个PID感兴趣,因此他们可以为一个服务注册多个PID。 [...]
对主机配置感兴趣的Bundle将注册具有以下属性的托管服务:
GREAT!
对于
service.pid = [ "com.acme.host", "com.acme.system" ]
和com.acme.host
PID,将回叫Bundle,因此必须区分这两种情况。因此,此托管服务将具有回调,如:
com.acme.system
我尝试使用以下语法:
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"))
...
}
但这失败了。当然,人们可以获得对config admin的引用并根据所需的pid浏览配置,但这对我来说似乎有点不合适,因为理论上可以将其委托给ds注释。
有可能吗?什么是正确的语法?
谢谢!
答案 0 :(得分:2)
我认为使用configurationPid
和configurationPolicy
值不可能。我的工作如下:
ManagedService
界面。示例:
@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。
答案 1 :(得分:0)
即将发布的DS 1.3规范支持多个PID。有关下载草案版本6规范的链接,请参阅http://www.osgi.org/Specifications/Drafts。
答案 2 :(得分:0)
较新的版本解决了该问题...
112.13.4.11 String [] configurationPid默认值“ $”□用于此组件配置的配置PID。
每个值都为此组件指定一个配置PID。
如果未指定任何值,则将此组件的名称用作 该组件的配置PID。
可以使用特殊字符串(“ $”)来指定 组件作为配置PID。 NAME常量保留此特殊设置 串。例如:
@Component(configurationPid = {“ com.acme.system”,Component.NAME}) 根据此注释创建组件描述的工具必须 用该组件的实际名称替换特殊字符串。
另请参见a的component元素的configuration-pid属性。 组件说明。
自 1.2