Jan*_*šni 6 osgi declarative-services
OSGi企业版第5版规范引入了osgi.extender命名空间.此命名空间使得可以在框架中安装假定扩展程序(如Blueprint或Declarative Services)的bundle,以使用Require-Capability标头对此依赖项进行建模.
第135.2章osgi.extender命名空间告诉我们应该在相应的规范中指定每个特定扩展器的功能值.蓝图给出了一个例子:
Provide-Capability: osgi.extender;
osgi.extender="osgi.blueprint";
uses:="org.osgi.service.blueprint.container,org.osgi.service.blueprint.reflect"
version:Version="1.0"
Run Code Online (Sandbox Code Playgroud)
但是,第112章声明性服务规范未指定SCR实现提供的功能.
Peter Kriens在一篇关于需求和能力的博客文章中给出了一个例子,该文章暗示了SCR的能力osgi.component.我假设最终这个值将在规范中正确定义.但在那之前我不能使用它.
由于在OSGi Core Release 4.3中引入了Require-Capability和Provide-Capability头文件,因此框架实现中已经可以使用该机制.因此,我希望我的bundle能够表达对SCR的要求,以便可以从OBR存储库中解析SCR实现.
我可以想象一个解决方案,我创建一个空包,一方面提供自定义功能,另一方面需要一个实现包.例如:
Provide-Capability: com.example.extender; extender=scr
Require-Bundle: org.apache.felix.scr; bundle-version=1.6.0
Run Code Online (Sandbox Code Playgroud)
然后,任何包含声明性服务的bundle都可以表达对此功能的要求.例如:
Require-Capability: com.example.extender; filter:="(extender=scr)"
Run Code Online (Sandbox Code Playgroud)
当我部署包含声明性服务的bundle时,这是确保SCR得到解决的好方法吗?还有其他方法吗?
这个问题的一个很好的解决方案是一个解决方案,也可以应用于其他不提供功能的传统捆绑包.
该规范定义了 osgi.extender 命名空间,但需要更新各种扩展器规范(Blueprint、DS)以强制实现提供适当的扩展器功能。现在,他们可能还没有。
因此,现在,您的 DS 捆绑包现在可以“要求”解析(甚至安装)DS 实施捆绑包。
OSGi 正在为 Blueprint 和 DS 的下一个更新进行工作,这些更新将强制要求 osgi.extender 功能。