我正在我的 OSGI 应用程序中构建一个缓存系统,我最初的想法是,好的,当注册服务时我想应用缓存,我只是代理该服务并注册具有非常高的服务排名的代理。
这几乎可以工作,具体取决于我的捆绑包的启动顺序。如果消费者最后启动一切正常,并且如果我停止缓存包,消费者将回退到原始实现但是如果我重新启动缓存包,那么消费者不会获得服务的代理版本。
为了举一个简单的例子来证明这一点,我制作了一个简单的捆绑包,它手动注册了一个排名更高的已知服务(即不创建代理等),问题仍然存在,当更高排名的服务启动时,消费者仍然使用排名较低的服务。
蓝图的活力是否只适用于特定情况?
- 初始接线 -> 选择排名最高的服务
- 当有线服务消失时 -> 选择排名最高的服务
- 当新服务出现时 -> 不做任何事情
有没有办法在 3:d 的情况下获得 1 和 2 的行为?
还是有更好的方法来完成我想做的事情?IE。与 HookEvent 或类似?
谢谢
编辑: 我通过在代理注册后更新使用的捆绑包解决了这个特殊问题,这似乎更新了服务线路。
Bundle[] usingBundles = reference.getUsingBundles();
for(.....)
{
b.update();
}