与osgi bundle交互非osgi

时间:2012-07-23 10:29:52

标签: struts2 osgi bundles

我正在为我的Web应用程序使用struts2,我想使用osgi体系结构来进行服务和dao层。现在我不想将我的struts2操作包装为osgi包,但希望将服务和dao层打包为bundle。现在任何人都可以告诉我我的非osgi动作如何消耗osgi包(服务和dao层)。我想在Web容器中部署我的struts2 Web应用程序,以便在这种情况下Web容器如何与osgi容器(我的服务和dao部署)进行交互。请帮忙。

2 个答案:

答案 0 :(得分:5)

您需要在Web容器和OSGi环境之间使用所谓的“桥接器”。 Felix和Equinox都有这种能力,但对我而言,Felix的实现效果要好得多。

你基本上想做的是:

  • 向ServletContext添加上下文侦听器
  • 启动ServletContext时启动OSGi,在ServletContext被破坏时停止它。
  • 将ServletContext注册为OSGi上下文,将其注册为服务
  • 将OSGi框架对象存储在ServletContext中,方法是将其注册为属性。

所以要从OSGi访问Web上下文:检索ServletContext服务,然后从那里开始。

从webcontext访问OSGi:从ServletContext属性中检索OSGi框架并从那里开始。

检查Felix Documentation,我在GitHub

上回顾了一段时间

答案 1 :(得分:-1)

最肯定的是,这不起作用。为什么您认为将一半的应用程序移动到OSGi应该是一个好主意?要么你应该全部移动,要么都不移动。

您可以在war文件中部署struts图层,并从中访问OSGi服务。我认为在Virgo和Apache Karaf中这是可能的。这意味着要加强与OSGi结构的战争。例如在Karaf中,您可以使用wab文件,该文件是具有清单的war文件。