【问题标题】:Interacting Non osgi with osgi bundles将非 osgi 与 osgi 捆绑包交互
【发布时间】:2023-03-03 00:12:01
【问题描述】:

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

【问题讨论】:

    标签: struts2 osgi bundles


    【解决方案1】:

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

    你基本上想做的是:

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

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

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

    检查Felix Documentation,我也曾在GitHub上做了一个例子

    【讨论】:

    • 你能给我一些我可以遵循的教程的链接吗?会有很大帮助
    • 不是,我只能找到 felix bridge 文档。这不是一个真正的教程,但它确实解释了它是如何工作的。遗憾的是,它不能帮助您获得一个功能性的应用程序,它只会让您知道您有一个正在运行的 OSGi 框架,而这并不能做太多事情。从那里开始,您唯一能做的就是显式安装新包(使用 BundleContext.installBundle)。这仅适用于小型项目。
    • 我在我的示例中所做的是(在 FrameworkService2 类中)以编程方式循环遍历 WEB-INF/bundles 目录中的所有 jar 文件,并将它们安装到框架中,所以你有一个排序- 添加捆绑包的简单方法。
    • 这不是将包部署到 OSGi 中的最佳方式(例如 OBR 更好),但它应该足以让您继续前进。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2015-06-05
      • 2012-06-26
      • 2015-08-13
      • 2015-05-22
      相关资源
      最近更新 更多