0

今天我在 OSGi Hooks 上做了一点工作,特别是服务FindHookEventListenerHook服务。我想尝试代理服务。工作正常,我的EventListenerHook服务被代理了。但是我意识到,FindHook如果服务将通过使用(Bnd 样式)注释相关setXXX方法来获取服务实现的引用,则不会调用该事件。@Reference也许这不是注释的问题,但一般来说是DS。

这很糟糕,因为注册了两项服务,一项没有代理,一项已代理。我只想从代理那里获得参考。一般来说,如果没有 DS,你可以通过调用获取引用,BundleContext.getServiceReference(java.lang.Class<S> clazz)并且事件FindHook.find将被调用,你可以在其中决定ServiceReference要返回哪个。

当我使用类似 DS 的方法(对我来说:Bnd 注释@Reference)时,将执行什么样的流程?正如我在上一节中所描述的:我想决定应该引用哪些服务。

4

3 回答 3

0

这确实是您的 DS 实施的一个问题。这取决于 DS impl 如何代表组件包管理服务访问,因为定位服务的是 DS 实现包。如果 DS 实现使用组件包的 BundleContext 来查找服务,那么您应该能够影响组件包可见的服务。

于 2012-08-02T12:28:43.153 回答
0

当框架必须在两个都满足请求的服务之间做出决定时,它首先选择具有更高服务等级的服务。该排名可以在注册服务时设置为属性。因此,在注册代理时,请确保它的服务排名高于竞争服务。

于 2012-08-02T15:41:57.147 回答
0

感谢您的回答,但我自己找到了解决方案。经过数小时的调试,我发现我的代码的条件被违反了,并且没有发生任何特别的事情。

于 2012-08-03T16:17:27.757 回答