我有两个 osgi 服务,它们实现了具有不同服务质量的相同接口。一个的默认排名为 0,另一个的排名为 3。
我正在寻找默认服务作为后备服务的蓝图配置。因此,所有其他捆绑包都应使用最佳可用服务(排名最高),并且如果更好的服务消失,则必须回退到默认服务。
现在正在工作。
缺少的部分是在再次联机时自动重新连接到更好的服务。有没有办法通过只配置服务而不改变消费者(实现 ServiceTrackers 等等)来做到这一点?
我有两个 osgi 服务,它们实现了具有不同服务质量的相同接口。一个的默认排名为 0,另一个的排名为 3。
我正在寻找默认服务作为后备服务的蓝图配置。因此,所有其他捆绑包都应使用最佳可用服务(排名最高),并且如果更好的服务消失,则必须回退到默认服务。
现在正在工作。
缺少的部分是在再次联机时自动重新连接到更好的服务。有没有办法通过只配置服务而不改变消费者(实现 ServiceTrackers 等等)来做到这一点?
声明式服务通过贪婪策略选项支持这一点。我不知道这在蓝图中是可能的。
我认为这不能直接作为一个简单的蓝图<reference>
。
您可以使用该<reference-listener>
元素。
<reference-listener bind-method=”bind” unbind-method=”unbind”>
<bean class=“MyListenerClass”/>
</reference-listener>
它允许在引用更改并对其做出反应时被回调。因此,您可以例如为您的服务创建一个代理,以确保调用正确的服务。虽然这不是很漂亮的代码。因此,像 BJ 建议的声明式服务可能会为这种情况提供更清洁的解决方案。