OSGi应用程序设计 - 我是否滥用服务框架?

时间:2012-02-27 17:50:22

标签: design-patterns service osgi

在我们正在开发的应用程序中,我有一个用于实现数据提供程序组件的通用接口,我将这些提供程序作为服务挂钩。

我的一位同事建议,最好只创建一个可以跟踪这些实现的服务(目前有多少可用,也许可以通过getter将它们提供给代码库的其他部分),我们可以注册/使用实现包的激活器取消注册它们。

虽然这通常可行,但这(几乎)完全是服务层首先提供的,对我而言,感觉就像我们正在复制功能。

您怎么看?

3 个答案:

答案 0 :(得分:12)

您的用例是服务注册表的主要OSGi用例之一。服务注册表主要用于需要在非耦合模块之间共享实例的此类应用程序。

使用服务注册表:

  1. 声明服务或蓝图等工具,允许您不与OSGi API结合使用
  2. 三项赛
  3. 反思
  4. 并发
  5. 任何模块都可以在不需要中央配置更改的情况下为池做出贡献
  6. 具有强大过滤器的可选性(可通过DS配置运行时)
  7. 使用现有shell的可调试性
  8. 标准化
  9. OSGi的主要目的始终是为其他人提供服务的独立模块,例如:黑板编程模型。这提供了非常优雅的点对点解耦编程模型。整个班级装载战争总是掩盖了这方面。

答案 1 :(得分:5)

这将是重复的功能。您管理其他服务的服务将成为服务注册表。

您现在拥有依赖于您的数据提供者的任何服务,这些服务也依赖于您的服务管理器,并且只有这样他们才能进行查找以获得他们想要的实际服务。

最好简单地将实际需要的依赖项注入到实际需要它的代码中,并且有许多工具(DS,Spring DM,Blueprint ...)将根据规范中定义的功能提供此功能。也就是服务注册表。

更新:如果您正在进行动态加载,正如您所暗示的那样,OSGi已经为此提供了ServiceListener,消费者需要了解这种性质并进行适当编码。上述工具也可以处理这些情况。

答案 2 :(得分:0)

您可以查看以下页面:http://www.ibm.com/developerworks/websphere/techjournal/1007_charters/1007_charters.html

希望对你有所帮助