2013-04-28 63 views
0

当我建立一个缓存系统,在我的OSGi应用程序在那里我最初的想法是,确定当服务被注册我想申请缓存来,我只是代理该服务,并与注册代理非常高的服务排名。活力使用白羊座蓝图

这几乎工程,这取决于其中为了我的束开始。 如果消费者开始最后一切正常,并且如果我停止缓存捆绑,如果我重新启动缓存束那么消费者没有得到服务的代理版的消费者fallbacking原来的执行

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

做蓝本的活力只适用于某些情况下?

  1. 初始布线 - >选择排名最高的服务
  2. 当有线服务消失 - >选择排名最高的服务
  3. 当一个新的服务出现 - >不做任何事

有没有办法在3:d情况下获得1和2的行为?

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

感谢

编辑: 我通过代理注册,这似乎是更新服务布线后更新包用于解决这方面的问题。

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

回答

1

那么,服务排名仅适用于寻找服务的时间。这就是说你可能需要一些其他的方式来告诉你的消费包,你正在寻找的服务又回到了缓存功能。您可以尝试在注册专用代理服务时触发特殊事件,并在服务使用者包中使用这些服务。如果发现这些事件对受欢迎的服务“重新绑定”。尽管所有这些可能需要的不仅仅是一个蓝图xml。