试图让声明性服务SCR在WebSphere 8.5上运行(非liberty)

试图让声明性服务SCR在WebSphere 8.5上运行(非liberty),websphere,osgi,blueprint-osgi,declarative-services,Websphere,Osgi,Blueprint Osgi,Declarative Services,我有一个blueprint管理的OSGI应用程序运行在WebSphere v8.5(非Liberty概要文件)上,其中一个服务service_a引用了另一个服务service_B。我希望该服务由声明性服务服务组件运行时管理,而不是blueprint容器,但仍需管理服务蓝图 我相信我在运行SCR时遇到了困难。我不确定我是否正确地包括它,或者如何检查它是否正在运行。我在Service_B的实现中用一些打印语句定义了“activate”和“deactivate”,据我所知,当SCR找到我所理解的服务时

我有一个blueprint管理的OSGI应用程序运行在WebSphere v8.5(非Liberty概要文件)上,其中一个服务service_a引用了另一个服务service_B。我希望该服务由声明性服务服务组件运行时管理,而不是blueprint容器,但仍需管理服务蓝图

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

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

据我所知,以下三个jar/bundle是运行SCR所需的全部

  • org.eclipse.equinox.ds
  • org.eclipse.equinox.util
  • org.eclipse.osgi.services
我继续创建了一个新的OSGI bundle/jar,其中包含上述所有jar文件,然后在这个新bundle中传递每个jar的导出。然后,我将这个DS捆绑包添加到我的主OSGI应用程序中,并将每个DS捆绑包导出导入包含由SCR管理的服务的捆绑包中

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

OSGI框架正在加载包含该服务的捆绑包,但该服务没有添加到注册表中,这表明没有读取定义该服务的component.xml文件,而intern则表示SCR没有运行,因为据我所知,正是它读取了该文件


因此,仍然坚持让SCR运行的能力。非常感谢所有的帮助!我在一个非常紧迫的期限内(我知道…谁是对的?:),欢迎所有的帮助!谢谢

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

你应该做的是:

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

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

    谢谢您的回答!然而,我有一个问题:对于步骤1,如果我错了,请纠正我,但您指的是WebSphere的内部OSGI运行时吗?它用来运行它托管的OSGI应用程序的那个?因为如果你是,我不知道怎么做(…我一直在尝试!),我想你也不会,因为你说你不熟悉WebSphere。我相信我已经准备好了第二步,但是如果没有第一步,我想第二步是没有效果的:)。再次感谢。哦,我只想提一下WAS有一个“共享包存储库”,我将这些SCR包加载到其中,但没有任何效果:(。