【问题标题】:Component inside a fragment never activated片段内的组件从未激活
【发布时间】:2012-01-25 10:39:54
【问题描述】:

当我使用 OSGi 声明式服务方式在片段内创建组件时,该组件没有被激活,但我在主机包中的组件被激活。 我错过了什么吗?我的片段有正确的 meta-inf 文件条目作为主机包符号名称。

我这样声明一个组件

@Component(immediate = true)

【问题讨论】:

  • 我也有一个 bnd.bdn ,它在 fragment 中指定组件。我是否必须为 bnd 文件中的片段组件指定更多内容?

标签: java osgi osgi-fragment


【解决方案1】:

因为包片段永远不会启动,只有解析,其中的声明性服务组件永远不会被激活。规范明确指出片段中的服务组件标头(注释被转换为的内容)将被忽略。

您可以使声明式服务适用于片段,但只能通过从主机中的 Service-Component 标头引用片段中的 XML 文件。不幸的是,让主机包知道片段中的内容可能与您所追求的架构模式相反。我什至不确定是否可以使用 SCR 注释进行这样的安排。一种选择是使用蓝图从片段中以声明方式注册服务,这确实有效。 http://aries.apache.org/documentation/tutorials/blueprinthelloworldtutorial.html 有一个蓝图教程。

--

Enterprise OSGi in Action: www.manning.com/cummins

【讨论】:

  • 感谢您的回复。我认为通过将服务组件保留在片段中来进行正确的设计。
  • 了解您为什么一开始就尝试在片段中执行此操作会很有帮助。片段的用例非常有限,因此最好发布一个问题来描述导致您使用它们的原始问题;也许我们可以找到更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 2021-06-13
  • 1970-01-01
  • 2013-11-28
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多