gpt4 book ai didi

java - 使用配置属性为 DS 组件选择依赖项

转载 作者:行者123 更新时间:2023-11-30 10:33:24 26 4
gpt4 key购买 nike

考虑这种情况:

  • 在完全基于 OSGi 并大量采用服务层 SOA 概念的网络管理系统中,决定将 NE 管理模块转换为 DS 组件。
  • 在跟踪网络资源的配置子代理角色中有一个 DS 组件,在适当的时候,它会根据 Neil's article 通过工厂配置配置管理组件来处理该资源。 .
  • 组件集未知,但它们的配置工厂 PID 由安装管理组件的专用包发布。
  • 假设其中一些管理组件之间存在静态不情愿强制依赖关系,例如C2 需要 C1。由于 NMS 正在跟踪许多资源,因此可能存在许多 C1C2 实例。因此,C2 必须绑定(bind)到其匹配的 C1
  • 此选择的标准是一个键,例如,resource-key,它由配置代理为每个资源生成,并通过它们的(工厂)配置属性提供给每个组件。

现在,这是我的问题:

问题:由于配置属性仅在组件激活后可用,C2 如何在激活前绑定(bind)到适当的 C1,给定他们关系的性质?

我知道有人问这个问题有不同的口味,并且有一些机智的答案,例如 Dynamic target queries in OSGi with DShere .但所有这些答案中缺少的是,在某些情况下组件的每个实例的动态配置不是先验已知的,或者至少在它被激活之前是未知的。

提案:由于我们必须解决这个问题,所以我能想到的唯一优雅OSGi可接受的答案是在引用绑定(bind)时引入动态宏扩展对于 C2 允许这样的事情:

@Reference(target="(resource-key=${resource-key})")
protected void bindC1(C1 c1)
{
// some binding code
}

我们暂时选择坚持使用 Equinox DS(是的,我知道!),因此,我已经修补了他们的 SCR,现在 C2 将绑定(bind)通过扩展 ${resource-key,将 C1resource-key 属性匹配到 C2 的正确实例-value} 使用 C2 自己的配置。此值(尚)不可在 C2.bindC1() 中访问。

我想知道为什么我测试过的每个 SCR 都缺少这样一个方便的工具。我在这里演示的内容可以很好地扩展以使用各种来源,而不仅仅是组件的配置属性。但是,为什么至少没有证据表明有针对此类功能的正式提案?请赐教!

最佳答案

我看不出您需要这样的功能。由于您通过组件属性提供了 resource-key,为什么不只为 C1 引用提供 target 属性,C1.target(请参阅 DS 规范中的 112.6.2.1) , 以相同的方式引用资源键值?

C1.target = (resource-key=xxx)

C1.target 组件属性的值将覆盖 C1 Reference 注释中的 target 信息。

确定值 (resource-key=xxx)xxx 复杂一点,但这比一些宏扩展功能容易得多。

关于java - 使用配置属性为 DS 组件选择依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226083/

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