当具有更高排名的OSGI服务可用时,如何重新连接?

时间:2014-09-23 09:49:38

标签: osgi service-reference blueprint

我有两个osgi服务,它使用不同的服务质量实现相同的接口。一个的默认排名为0,另一个的排名为3.

我正在搜索蓝图配置,其中默认服务充当后备。因此,每个其他捆绑包应使用最佳可用服务(最高排名),如果更好的服务消失,则必须回退到默认服务。

现在正在运作。

缺少的部分是当它再次联机时自动重新连接到更好的服务。有没有办法在不改变消费者的情况下配置服务(实现ServiceTrackers等)?

2 个答案:

答案 0 :(得分:1)

Declarative Services通过贪婪的策略选项支持此功能。我不知道蓝图是可能的。

答案 1 :(得分:0)

我认为这不可能直接作为一个简单的蓝图<reference>

您可以使用<reference-listener>元素。

 <reference-listener bind-method=”bind” unbind-method=”unbind”>
   <bean class=“MyListenerClass”/>        
  </reference-listener>

它允许在引用更改时对其进行回调并对其作出反应。因此,您可以为您的服务创建一个代理,以确保调用正确的服务。这不是很漂亮的代码。因此,像BJ建议的声明性服务可以为这种情况提供更清晰的解决方案。