【问题标题】:OSGI creating modular web applicationOSGI 创建模块化 Web 应用程序
【发布时间】:2011-11-08 03:31:49
【问题描述】:

我一直在寻找一种创建模块化 Web 应用程序的解决方案,它是模块化的,因为用户可以以简单 jar 的形式提供自己的插件,然后将其自己的数据提供给我的 Web 应用程序和我的 Web 应用程序将负责展示它。

现在要注意的是,我希望我的 Web 应用程序尽可能通用,而不依赖于 j2ee Web 容器来支持任何东西。即我不能依赖我的 web 容器来提供 osgi 支持并将 web 应用程序部署为 osgi 包本身(这确实使事情变得非常简单,例如 glassfish 和 WAS)。

我计划使用 Equinox,我目前看到的唯一解决方案是他们在其官方网站上提供的 servlet 桥,但对我来说,将所有内容委托给一个 servlet 真的很痛苦,它反过来解释请求并找到一个适当的捆绑类,然后再次以某种方式仅将数据传回给 Web 应用程序。

对我来说,如果我的网络应用程序也是一个捆绑包,那就太好了。 有什么接近我可以尝试的理想解决方案的吗?或者osgi和web应用(容器)这两个relam之间有什么其他的通信方式?

【问题讨论】:

    标签: java web-applications jakarta-ee osgi


    【解决方案1】:

    OSGi spec 详细介绍了 WAB(Web 存档包)格式。

    并且Pax Web 为 WAB/WAR webapps 提供了很好的支持(PAX Web 在 Equinox、Felix 等上运行良好)

    使用 pax web 可以通过 ServletContext 获取 BundleContext,例如:

    BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext");
    

    对于您提到的用户驱动的可插入性,我建议您为插件包提供一些服务接口来实现,并在您的 web 应用程序中使用 ServiceTracker 来监听它们的注册(除非您使用的是声明式服务)。您还可以轻松地从上传 servlet 中 install bundles

    我猜测上传插件的用户必须登录并获得授权,因此此时会遇到安全问题。


    编辑:在此处回复评论,因为评论字段空间不足

    抱歉,我想我误解了你的问题 - 你有一个现有的 webapp 容器并且你想部署一个带有 OSGi 功能的 WAR?如果是这种情况,那么要么像其他人提到的那样使用 ServletBridge,要么将 OSGi 框架嵌入到您的 WAR 中(这相对容易,例如参见 this)。

    您甚至可以通过尝试从 ServletContext 获取 BundleContext 来将其设为可选,如果返回 null 则启动您自己的嵌入式框架。这样,它将在本机 OSGi 容器(例如 Glassfish)或 Java EE 应用服务器中运行。

    否则,PaxWeb 是 HttpService 和 WebApp OSGi 规范的实现,但有许多扩展以使生活更轻松 - 但您将其部署到 OSGi 容器。

    【讨论】:

    • 您好,您的回复很有趣,我了解 WAB,这就是我在问题“我不能依靠我的 Web 容器来提供 osgi 支持并将 Web 应用程序作为 osgi 包本身部署”中提到的内容。但是我不知道 pax 网络,您提供的官方链接表明它是码头的扩展,可以将战争部署为 wab?你能进一步解释一下吗?
    【解决方案2】:

    您可能想查看Apache Sling。它是一个具有嵌入式 OSGi 容器的 Web 框架。 OSGi 容器名为Apache Felix,相当不错。

    【讨论】:

    • 这看起来不错,但我不想受到框架支持的限制,例如我想将 JSF 用于我的 Web 应用程序。也许我应该在我的问题中提到这一点。
    【解决方案3】:

    ServletBridge 用于在 Web 容器中嵌入 OSGI 容器。另一种选择是在 OSGI 容器中嵌入一个 Web 容器(作为一个包)。以下文章详细介绍了如何实现这一点。

    http://java.dzone.com/articles/osgi-and-embedded-jetty

    【讨论】:

    • 谢谢我知道这一点,但我不想被限制在任何特定的 Web 容器中,并且嵌入大多数服务器的 afaik 不是一个选项。
    【解决方案4】:

    您可能想尝试 ChonCMS - http://www.choncms.com

    它的架构完全基于您的要求,它带有几个插件来启用基本的 CMS 功能,它是模块化平台,带有使用 felix 的小型 Web 应用程序容器,并且还可以在运行时添加/删除插件。

    缺点可能是它缺乏文档,但你可能会问,它是开源的,我相信他们会很乐意回答问题,甚至更好的是你可以贡献 - 它仍处于孵化阶段。

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2018-09-06
      • 2011-03-27
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2011-09-06
      • 2014-02-15
      相关资源
      最近更新 更多