3

我正在为我的 Web 应用程序使用 struts2,并且我想将 osgi 架构用于服务和 dao 层。现在我不想将我的 struts2 操作包装为 osgi 包,但希望将服务和 dao 层打包为包。现在谁能告诉我我的非 osgi 操作如何使用 osgi 包(服务和 dao 层)。我想在 web 容器中部署我的 struts2 web 应用程序,以便在这种情况下 web 容器将如何与 osgi 容器(我的服务和 dao 部署的地方)交互。请帮忙 。

4

2 回答 2

5

您需要在 Web 容器和 OSGi 环境之间建立一个所谓的“桥梁”。Felix 和 Equinox 都有这种能力,但对我来说,Felix 的实现效果要好得多。

你基本上想要做的是:

  • 将上下文侦听器添加到您的 ServletContext
  • 在启动 ServletContext 时启动 OSGi,在 ServletContext 被破坏时停止它。
  • 通过将 ServletContext 注册为服务,将其传递给 OSGi 上下文
  • 通过将 OSGi 框架对象注册为属性,将其存储在 ServletContext 中。

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

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

检查Felix 文档,我也在GitHub 上做了一个例子

于 2012-07-23T13:13:35.133 回答
-1

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

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

于 2012-07-23T13:15:33.637 回答