使用白羊座蓝图时的服务动态

时间:2013-04-28 08:29:06

标签: dynamic osgi blueprint-osgi

我正在我的OSGI应用程序中构建一个缓存系统,我最初的想法是,当注册服务时我想要应用缓存,我只是代理该服务并注册具有非常高的服务等级的代理。 / p>

这几乎可以使用,具体取决于我的捆绑包的启动顺序。 如果消费者最后一切都正常工作,并且如果我停止缓存包,则消费者将回退到原始实现如果我重新启动缓存包,则消费者不会获得代理版本服务。

为了举一个简单的例子来证明这一点,我制作了一个简单的捆绑包,用一个更高的排名(即不创建代理等)手工注册一个已知服务,当排名较高的服务开始时,问题仍然存在消费者仍然使用排名较低的服务。

蓝图的活力是否仅适用于某些情况?

  1. 初始接线 - >选择排名最高的服务
  2. 当有线服务消失时 - >选择排名最高的服务
  3. 当出现新服务时 - >什么都不做
  4. 有没有办法在3:d情况下获得1和2的行为?

    还是有更好的方法来完成我想要做的事情? IE浏览器。与HookEvent或类似?

    由于

    修改 我通过在代理注册后更新使用的bundle来解决这个特殊问题,这似乎更新了服务接线。

    Bundle[] usingBundles = reference.getUsingBundles();
    for(.....)
    {
       b.update();
    }
    

1 个答案:

答案 0 :(得分:1)

嗯,服务排名仅在寻找服务的时间有效。也就是说,您可能需要一些其他方式来通知您的消费包,您正在寻找的服务再次使用缓存功能。您可以尝试在注册专用代理服务时触发特殊事件,并使用服务 - 使用者服务器中的服务。如果看到这些事件,则对受欢迎的服务进行“重新绑定”。虽然所有这些可能需要的不仅仅是蓝图xml。