0

我有一个运行在 WebSphere v8.5(非自由配置文件)上的蓝图管理的 OSGI 应用程序,其中一个服务 Service_A 引用了另一个服务 Service_B。我希望 Service_B 由声明性服务服务组件运行时而不是蓝图容器管理,但仍然让 Service_A 被蓝图管理。

我相信我在让 SCR 运行时遇到了困难。我不确定我是否正确包含它,或者我如何检查它是否正在运行。我已经用一些打印语句在 Service_B 的实现中定义了“激活”和“停用”,据我了解,当 SCR 找到我理解的服务时,应该调用它们,但我很确定它们是没有被调用,因为断点不会停在那里,我在控制台中看不到任何输出。

到目前为止,我为包含运行时所做的努力如下:

据我了解,以下三个 jars/bundle 就是运行 SCR 所需要的。

  • org.eclipse.equinox.ds
  • org.eclipse.equinox.util
  • org.eclipse.osgi.services

我继续创建了一个包含所有上述 jar 文件的新 OSGI 包/jar,然后在这个新包中传递每个 jar 的导出。然后,我将此 DS 包添加到我的主 OSGI 应用程序中,并将这些 DS 包导出中的每一个导入到包含将由 SCR 管理的服务的包中。

这是我似乎被挂断的地方:

OSGI 框架正在加载包含该服务的包,但该服务未添加到注册表中,这表明未读取定义该服务的 component.xml 文件,这表明 SCR 未运行,因为它据我了解,是读取该文件的内容。

所以仍然坚持让 SCR 运行的能力。非常感谢任何和所有帮助!我的截止日期非常紧迫(我知道......谁错了?:))并且欢迎所有帮助!谢谢!

4

1 回答 1

1

我对 WebSphere 不熟悉,但我想问题出在您帖子的以下声明中:“我继续创建了一个新的 OSGI 包/jar,其中包含所有上述 jar 文件,然后只是传递了这个新包中的每个罐子”。这是不正确的。

你应该做的是:

  1. 将构成工作 DS 实现的捆绑包分别加载到您的 OSGi 环境中,这意味着:作为单独的捆绑包(它们已经是捆绑包)。
  2. 为与 Service_B 相关的代码和 xml 创建一个单独的包。

只有这样,SCR 才能获取您的捆绑包并为其创建服务。SCR 是一个单独的包,它跟踪 DS 组件的其他包并相应地处理这些声明。

于 2013-12-10T07:09:39.670 回答