2

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

我正在寻找默认服务作为后备服务的蓝图配置。因此,所有其他捆绑包都应使用最佳可用服务(排名最高),并且如果更好的服务消失,则必须回退到默认服务。

现在正在工作。

缺少的部分是在再次联机时自动重新连接到更好的服务。有没有办法通过只配置服务而不改变消费者(实现 ServiceTrackers 等等)来做到这一点?

4

2 回答 2

1

声明式服务通过贪婪策略选项支持这一点。我不知道这在蓝图中是可能的。

于 2014-09-23T10:23:16.333 回答
0

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

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

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

它允许在引用更改并对其做出反应时被回调。因此,您可以例如为您的服务创建一个代理,以确保调用正确的服务。虽然这不是很漂亮的代码。因此,像 BJ 建议的声明式服务可能会为这种情况提供更清洁的解决方案。

于 2014-09-24T07:50:46.537 回答