Osgi 以编程方式添加声明性服务

Osgi 以编程方式添加声明性服务,osgi,equinox,apache-felix,declarative-services,Osgi,Equinox,Apache Felix,Declarative Services,是否可以使用某种api添加声明性服务 一点背景: 我有一个基于动态脚本的服务器应用程序(可以随时添加、编辑或删除)。 这些脚本与OSGi服务有依赖关系,并且可能相互依赖。每当脚本 编辑后,脚本将编译为javascript,并检测其依赖项 此时,我希望(重新)将其注册为声明性服务,以便在其 依赖关系来来往往 这可能吗?还是我遗漏了什么重要的东西 如果OSGi标准无法实现,是否有针对Felix或Equinox的特定解决方案 在其他框架中,比如iPojo或blueprint,您能做到这一点吗 没有A

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

一点背景:

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

此时,我希望(重新)将其注册为声明性服务,以便在其 依赖关系来来往往

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

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


      您可能需要签出,它可能会提供一个API模型,为您提供所需的依赖性支持。

      “没有API可以强制添加声明性服务。”哇!(我的重点)然而,设想这样一个API并不困难,是吗?如果您想这样做,请为包含类的bundle创建一个片段,并将DS XML添加到片段中。动态创建这样一个简单的JAR文件非常容易,因为清单只需要几行代码@我已经考虑过了,但问题是,我会有很多这样的服务(2000+)。为了能够单独添加/删除它们,我需要2000多个捆绑包或片段,我觉得这不是一个好主意。我将看一看Felix Dependency Manager,看看它会给我带来什么。我一直不明白它的功能,但它可能是我所需要的。我将在这里发布任何有趣的结果。至于使用常规的服务实现,这是可行的,但是我需要“使用我自己的”依赖关系管理器。我想我可以做到,但我很确定现有的DS实现要好得多。你确定不能使用“普通”的OSGi服务吗?i、 e.较低级别的API-
      BundleContext.registerService()
      等?是的,这是可能的,但“普通”OSGi服务没有依赖于其他服务的概念,因此这将涉及重建大部分DS。我最终生成了bundle,并安装/更新了这些bundle,剩下的就交给DS处理。我在2012年ApacheCon大会上谈到了这一点: