OSGi声明服务与ManagedService配置服务?

oco*_*or0 11 configuration osgi declarative-services

我最近偶然发现,OSGi中的Declarative Services可以将组件的配置设置为必需,以便组件在激活时接收它,消除组件激活和配置之间的差距.我也意识到你可以通过modified-method 接收配置更新.

在我看来,这个功能非常类似于通过实现ManagedService接口和发布作为您提供的"服务"之一提供的功能.

看起来我可以完全忽略ManagedService并只使用DS配置注入.

这些技术中的一种比其他技术更受欢迎,还是还有其他我没有看到的权衡取舍?

Nei*_*ett 13

是的,你可以完全忽略ManagedService,并ManagedServiceFactory与只使用声明式服务组件.是的,我会推荐这种方法.

只需将其视为不同的抽象层次即可.MS/MSF是配置管理员的低级API,即使您没有运行DS捆绑包,它也可用.这样做的好处是您可以编写可配置的服务而不依赖于DS,这可能是某些"系统级"组件所需要的.

但是,如果您乐意依赖DS,例如"应用程序级别"组件,那么使用DS与config admin的内置集成将使您的生活更轻松.

  • @seh:通过添加"configurationPolicy:require",组件可以用作单件(即MS)或工厂(即MSF).如果使用与component.name相同的工厂PID创建工厂配置,则可以获得工厂.如果使用与component.name相同的PID创建单例配置,则会获得单例组件. (3认同)
  • @seh:请注意,DS实际上从未为您的组件创建ManagedService或ManagedServiceFactory.它通过使用ConfigurationListener监听Config Admin来工作.然而,内部细节并不重要......只需创建与PID/factoryPID匹配component.name的配置,它就"正常工作". (3认同)