我有一个在WebSphere v8.5(非Liberty Profile)上运行的蓝图管理的OSGI应用程序,其中一个服务Service_A引用另一个服务Service_B。我希望Service_B由声明性服务服务组件运行时而不是蓝图容器管理,但仍然要对Service_A进行蓝图管理。
我相信我在让SCR运行时遇到了困难。我不确定我是否正确包含它,或者我如何检查它是否正在运行。我已经在Service_B的实现中使用一些打印语句定义了'activate'和'deactivate',根据我的理解,应该由SCR在我按照它理解它找到服务时调用它,但我很确定它们是没有被调用,因为断点不会停在那里,我在控制台中看不到输出。
到目前为止,我的努力包括运行时如下:
根据我的理解,运行SCR所需的以下三个罐/包。
我继续创建了一个包含所有上述jar文件的新OSGI包/ jar,然后只传递了这个新包中每个jar的导出。然后,我将此DS捆绑包添加到我的主OSGI应用程序,并将每个DS捆绑包导出导入到包含要由SCR管理的服务的捆绑包中。
这是我似乎被挂断的地方:
OSGI框架正在加载包含服务的bundle,但是服务没有被添加到注册表中,这表明没有读取定义服务的component.xml文件,实习生建议SCR不是正在运行,因为它是根据我的理解读取该文件的内容。
因此仍然坚持让SCR运行的能力。任何和所有的帮助非常感谢!我是在一个非常紧迫的期限内(我知道......谁不对?:))所有的帮助都受到了欢迎!谢谢!
答案 0 :(得分:1)
我不熟悉WebSphere,但问题是,我猜你的帖子中有以下声明:"我继续创建了一个包含所有上述jar的新OSGI包/ jar文件,然后只传递了这个新包中的每个jar的导出" 。这是不正确的。
你应该做的是:
只有通过这种方式,SCR才能获取您的捆绑包并为其创建服务。 SCR是一个单独的包,它跟踪DS组件的其他包,并相应地处理这些声明。