【发布时间】:2017-11-16 09:54:27
【问题描述】:
为了优先考虑某些服务实现,我编写了java.util.ServiceLoader 的可定制版本(通过非 OSGi 代码的首选项文件为实现添加优先级和启用/禁用标志)。
客户很高兴并希望对 OSGi 服务实现进行同样的定制。
设计的解决方案基于在BundleContext 上调用getServiceReferences(Class<S> clazz, String filter) 并使用null 过滤器来检索所有实现。
尽管如此,在如此低的级别上摆弄 OSGi 会留下不好的味道。有很多样板代码(例如 BundleActivator 的强制子类型),并且使用的方法也会阻碍对声明式服务和某些时间点的平滑升级。
我也阅读了SERVICE_RANKING 属性,但与上述方法中的首选项文件相比,它的缺点是每个实现都设置了自己的排名属性,之后无法更改排名。
所以我的问题是:反对这种低级方法的好论据是什么?为什么要使用声明式服务?
【问题讨论】:
-
考虑将
SERVICE_RANKING与排名策略一起使用,例如标准代码排名 1000。这可行吗?
标签: java osgi apache-felix declarative-services