gpt4 book ai didi

osgi - 如何声明对 SCR 扩展器能力的要求?

转载 作者:行者123 更新时间:2023-12-04 15:24:50 26 4
gpt4 key购买 nike

OSGi Enterprise 第 5 版规范引入了 osgi.extender命名空间。此命名空间使假定框架中安装了诸如蓝图或声明性服务之类的扩展程序的包能够使用 Require-Capability 对该依赖项进行建模。标题。

第 135.2 章 osgi.extender Namespace 告诉我们每个特定扩展器的能力值应该在相应的规范中指定。为蓝图提供了一个示例:

Provide-Capability: osgi.extender;
osgi.extender="osgi.blueprint";
uses:="org.osgi.service.blueprint.container,org.osgi.service.blueprint.reflect"
version:Version="1.0"

但是,第 112 章声明性服务规范并未指定 SCR 实现提供的功能。

Peter Kriens 在 blog post on Requirements and Capabilities 中给出了一个例子这表明 SCR 的能力是 osgi.component .我假设最终这个值将在规范中正确定义。但在那之前我无法使用它。

Require-CapabilityProvide-Capability头文件是在 OSGi Core Release 4.3 中引入的,该机制已经在框架实现中可用。因此,我希望我的包表达对 SCR 的要求,以便可以从 OBR 存储库解析 SCR 实现。

我可以想象一个解决方案,我创建一个空包,一方面提供自定义功能,另一方面需要一个实现包。例如:
Provide-Capability: com.example.extender; extender=scr
Require-Bundle: org.apache.felix.scr; bundle-version=1.6.0

任何包含声明性服务的捆绑包都可以表达对此功能的需求。例如:
Require-Capability: com.example.extender; filter:="(extender=scr)"

当我部署包含声明性服务的包时,这是确保解决 SCR 的好方法吗?有没有其他办法?

这个问题的一个很好的解决方案是一个也可以应用于其他不提供功能的遗留包的解决方案。

最佳答案

该规范定义了 osgi.extender 命名空间,但需要更新各种扩展器规范(Blueprint、DS)以强制实现提供适当的扩展器功能。现在,他们可能不会。

所以现在,您的 DS 包现在有办法“要求”解析(甚至安装)DS 实现包。

OSGi 正在进行 Blueprint 和 DS 的下一次更新,这些更新将强制要求 osgi.extender 功能。

关于osgi - 如何声明对 SCR 扩展器能力的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com