我有两个osgi服务,它使用不同的服务质量实现相同的接口。一个的默认排名为0,另一个的排名为3.
我正在搜索蓝图配置,其中默认服务充当后备。因此,每个其他捆绑包应使用最佳可用服务(最高排名),如果更好的服务消失,则必须回退到默认服务。
现在正在运作。
缺少的部分是当它再次联机时自动重新连接到更好的服务。有没有办法在不改变消费者的情况下配置服务(实现ServiceTrackers等)?
答案 0 :(得分:1)
Declarative Services通过贪婪的策略选项支持此功能。我不知道蓝图是可能的。
答案 1 :(得分:0)
我认为这不可能直接作为一个简单的蓝图<reference>
。
您可以使用<reference-listener>
元素。
<reference-listener bind-method=”bind” unbind-method=”unbind”>
<bean class=“MyListenerClass”/>
</reference-listener>
它允许在引用更改时对其进行回调并对其作出反应。因此,您可以为您的服务创建一个代理,以确保调用正确的服务。这不是很漂亮的代码。因此,像BJ建议的声明性服务可以为这种情况提供更清晰的解决方案。