Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi-按名称(id)获取ds服务_Java_Jakarta Ee_Osgi_Declarative Services - Fatal编程技术网

Java OSGi-按名称(id)获取ds服务

Java OSGi-按名称(id)获取ds服务,java,jakarta-ee,osgi,declarative-services,Java,Jakarta Ee,Osgi,Declarative Services,我是OSGi的新手。我在谷歌上搜索了几个小时,但没有找到答案。也许我的理解是错误的。所以问题来了。假设我有一个组件 <component name="sample.component" immediate="true"> <implementation class="sample.SampleComparator" /> <service> <provide interface="java.util.Comparator" />

我是OSGi的新手。我在谷歌上搜索了几个小时,但没有找到答案。也许我的理解是错误的。所以问题来了。假设我有一个组件

<component name="sample.component" immediate="true">
  <implementation class="sample.SampleComparator" />
  <service>
    <provide interface="java.util.Comparator" />
  </service>
</component>

但是我得到了
null
。错在哪里?过滤器
(name=sample.component)
正确吗?或者如何设置服务的id并通过它进行查找?

服务属性的名称是“component.name”,而不是“name”

如果您这样做,它将工作:

getServiceReferences(java.util.Comparator.class.getName(),"(component.name=sample.component)");

非常感谢你!如果您知道这是设置服务id(名称)的唯一方法吗?我的意思是我们只能使用component.name?最好使用service.pid,因为它是唯一的,即使您以基于配置多次实例化组件的方式创建组件(请参见configurationFactory=true)。service.pid是一个持久id,在重新启动后将保持不变。service.pid上的筛选也应该来自持久配置(请参阅组件配置中的referenceName.target)
getServiceReferences(java.util.Comparator.class.getName(),"(component.name=sample.component)");