【问题标题】:Programmatically adding declarative services以编程方式添加声明性服务
【发布时间】:2012-05-28 23:01:52
【问题描述】:

是否可以使用某种 api 添加声明式服务?

一点背景:

我有一个基于动态脚本的服务器应用程序(可以随时添加、编辑或删除它们)。 这些脚本依赖于 OSGi 服务,并且可能相互依赖。每当脚本获取 编辑后,脚本被编译为 javascript,并检测到它的依赖关系。

那时,我想(重新)将其注册为声明性服务,因此当它被激活/停用时 依赖关系来来去去。

  • 这甚至可能吗?还是我缺少什么重要的东西?
  • 如果 OSGi 标准无法实现,是否有针对 Felix 或 Equinox 的特定解决方案?
  • 你能在其他框架中做到这一点吗,比如 iPojo 或 blueprint?

【问题讨论】:

  • 您确定不能使用“正常”的 OSGi 服务吗?即较低级别的 API - BundleContext.registerService() 等?
  • 是的,这是可能的,但是“正常”的 OSGi 服务没有依赖于其他服务的概念,因此这将涉及重建 DS 的很大一部分。我最终生成了捆绑包,并安装/更新了这些捆绑包,并让 DS 处理其余的。我在 ApacheCon 2012 上讨论过这个问题:slideshare.net/FrankLyaruu/scripting-languages-in-osgi

标签: osgi equinox apache-felix declarative-services


【解决方案1】:

没有 API 可以强制添加声明式服务。您可以使用普通的 OSGi api 来注册和使用服务。也许这就是你想要的?

您可能需要查看Dependency Manager,它可能会提供一个 API 模型,为您提供所需的依赖支持。

【讨论】:

  • "没有 API 可以强制添加声明性服务。"哇! (我的重点)但是,设想这样一个 API 并不难,不是吗?可能非常强大。
  • 如果您想这样做,请为包含类的捆绑包创建一个片段,并将 DS XML 添加到该片段中。动态创建这样一个简单的 JAR 文件非常容易,因为清单只需要几行代码。
  • 是的,听起来确实有点像悖论,不是吗。 @PeterKriens我已经考虑过了,但问题是,我将拥有很多这些服务(2000+)。为了能够单独添加/删除它们,我需要 2000 多个捆绑包或片段,我觉得这不是一个好主意。
  • 我会看看 Felix 依赖管理器,看看它会把我引向何方。我从来不明白它的功能,但它可能是我需要的。我会在这里发布任何有趣的结果。至于使用常规服务实现,这将起作用,但是我需要“滚动我自己的”依赖管理器。我想我可以做到,但我很确定现有的 DS 实现要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多