试图让Declarative Services SCR在WebSphere 8.5上运行(非自由)

时间:2013-12-09 23:50:20

标签: websphere osgi blueprint-osgi declarative-services

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

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

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

根据我的理解,运行SCR所需的以下三个罐/包。

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

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

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

OSGI框架正在加载包含服务的bundle,但是服务没有被添加到注册表中,这表明没有读取定义服务的component.xml文件,实习生建议SCR不是正在运行,因为它是根据我的理解读取该文件的内容。

因此仍然坚持让SCR运行的能力。任何和所有的帮助非常感谢!我是在一个非常紧迫的期限内(我知道......谁不对?:))所有的帮助都受到了欢迎!谢谢!

1 个答案:

答案 0 :(得分:1)

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

你应该做的是:

  1. 将组合在一起的工作DS实现单独的软件包加载到OSGi环境中,这意味着:作为单独的软件包(它们已经是捆绑软件包)。
  2. 为您的代码和与Service_B相关的xml创建一个单独的包。
  3. 只有通过这种方式,SCR才能获取您的捆绑包并为其创建服务。 SCR是一个单独的包,它跟踪DS组件的其他包,并相应地处理这些声明。