2010-10-27 65 views
10

我最近偶然发现了这样一个事实,即OSGi中的Declarative Services可以将组件的配置设置为required,以便组件在激活时接收它,消除组件激活和配置之间的差距。我也意识到,您可以通过modified-方法接收配置更新。OSGi声明性服务与ManagedService配置服务?

在我看来,这个功能与实现ManagedService接口提供的功能非常相似,并且将其作为您提供的“服务”之一发布。

看来我可以完全忽略ManagedService &只是使用DS配置注入。

这些技术之一是否比其他技术更受欢迎?还是我还没有看到其他的折衷?

回答

11

是的,您可以完全忽略ManagedServiceManagedServiceFactory,只使用声明性服务组件。是的,我会推荐这种方法。

只是想到这是不同的抽象层次。 MS/MSF是config admin的低级API,即使没有运行DS软件包,它也可用。这样做的好处是你可以编写可配置的服务,而不依赖于DS,这对于某些“系统级”组件来说可能是需要的。

但是,如果您很乐意依靠DS,例如对于“应用程序级”组件,那么使用DS与config admin的内置集成将使您的生活变得更加轻松。

1)通过config admin

+0

好吧,这就是我倾向于做的事情,但我注意到/有点担心DS组件无法创建,因为它的配置无效并引发异常,因为Equinox一直尝试实例化它。的异常被抛出和记录。它看起来并不干净。 – oconnor0 2010-11-09 05:11:46

+1

如果它的activate方法抛出异常,Equinox不应该继续尝试实例化组件。如果配置更改,它应该再次尝试重新创建组件。至于日志记录 - 当然,应该记录组件引发的异常! – 2010-11-09 08:17:11

+0

什么是正确的方式来哄DS处理组件作为'ManagedServiceFactory',而不是'ManagedService'?换句话说,如果有人希望DS为每个*适用的配置实例创建一个组件的新实例,那有什么诀窍?是否需要编写一个Metatype定义? – seh 2011-07-31 15:13:15