用版本解析osgi服务

1 versioning service binding osgi

我目前正在评估osgi(使用felix 4.3实现)来管理服务的版本.

我一直在创建以下捆绑包:

bundle-api(版本1.0.0)定义接口xyzSomeService:它在版本1.0.0中导出xyz

实现SomeService(v 1.0.0)的bundle-impl(版本1.0.0),在规范版本1.0.0中导入包xyz并注册服务

bundle-api(版本2.0.0)定义接口xyzSomeService:它在版本2.0.0中导出xyz

实现SomeService(v 2.0.0)的bundle-impl(版本2.0.0),在规范版本2.0.0中导入包xyz并注册服务

现在,我有一个客户端,bundle-client(版本1.0.0),它在版本规范-1.0.0中导入bundle-api的xyz.

如何在版本1.0.0中获取xyzSomeService的服务?

目前,在安装/激活时:bundle-api 1.0.0 bundle-impl 1.0.0 bundle-api 2.0.0 bundle-impl 2.0.0 bundle-client 1.0.0

当启动bundle-client时,它会查询可用的xyySomeService.我得到了可用服务的答案:bundle-impl 1.0.0和bundle-impl 2.0.0

我想只获得与版本1.0.0匹配的服务实现.

我该怎么办?

ps:目前,我将null设置为过滤值.

Nei*_*ett 5

您使用什么代码或机制来查询服务?OSGi的自动提供服务的兼容性过滤,这意味着,如果你的客户进口1.0版API的那么它将只能看到工具1.0版本,和服务,如果您的客户端进口API的2.0版本,那么它只能看到实现2.0版服务....等

但是,有一个方法调用getAllServiceReferences()显式关闭此兼容性检查,并可用于获取所有版本的所有服务.在99%的情况下,这不是你想要做的.如果您已经使用过,请getAllServiceReferences()尝试更改为getServiceReferences().

如果您正在以其他方式查找服务,那么我需要更多细节来帮助您.