Java OSGi-按名称(id)获取ds服务
我是OSGi的新手。我在谷歌上搜索了几个小时,但没有找到答案。也许我的理解是错误的。所以问题来了。假设我有一个组件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" />
<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)");