【问题标题】:Trouble understanding the whole OSGi web eco system无法理解整个 OSGi web 生态系统
【发布时间】:2011-02-03 19:12:21
【问题描述】:

我对整个 Java 和 OSGi 世界还很陌生,我无法理解 OSGi Web 应用程序的生态系统。

更准确地说,我目前正试图了解生态系统的所有部分是如何相互关联的:

  • OSGi 框架(例如 Apache Felix、Equinox、Knoplerfish)
  • OSGi 运行时(例如 Spring DM Server、Pax Runner、Apache Karaf)
  • Web 扩展器(例如 Pax Web 扩展器、Spring Web 扩展器)
  • Web 容器(例如 Apache Tomcat、Jetty)

为了让您直观地了解我对他们关系的实际理解,请查看这张图片:

据我所知,OSGi 框架是 OSGi 规范的一种实现。运行时是一个发行版,它在 OSGi 规范之上添加了额外的功能,例如日志记录。由于 OSGi 和 Web 容器(如 Tomcat)的类路径机制似乎存在一些差异,因此您需要某种翻译器。这部分由“Web Extender”处理。

请您为我澄清这一切好吗?我理解的一切正确吗?

【问题讨论】:

    标签: tomcat osgi equinox apache-felix


    【解决方案1】:

    OSGi 是交互软件模块的 API 和打包标准。这类似于 JPA 或 Java EE 等其他 API 标准。

    OSGi 运行时是遵循 OSGi 标准的服务器,它是标准的实现。你提到了一些常见的:Knopflerfish,Equinox。这些让您可以运行 OSGi 包。

    Web 容器通常是指 Java EE(servlet)中特定于 Web 的部分的实现。 servlet 标准还定义了 API 和封装,就像 OSGi 一样,只是不同。

    您需要一台服务器来运行您的 Java EE Web 应用程序。您将应用程序打包为 Java Web Archive (WAR),并要求应用程序服务器启动它。正如您所提到的,有几台服务器,例如 Tomcat、Jetty,还有涵盖 Java EE 标准大部分内容的大型服务器,例如 Glassfish 和 JBoss。

    Web 扩展器试图将 servlet 标准与 OSGi 统一起来。通过将一些特定于 OSGi 的数据添加到已打包的 WAR 中,您的 OSGi 运行时将自动解析和启动 WAR。 Web 扩展程序将您的 WAR servlet 发布到 OSGi http 服务。借助 Web 扩展器,您可以运行标准 OSGi 应用程序以及仅使用 OSGi 运行时的 WAR,而无需像 Tomcat 这样的 Java EE 兼容服务器。

    【讨论】:

    • 感谢您的快速回复否认。如果我理解正确,Web 扩展程序会采用 WAR 文件,这些文件通常会部署到像 tomcat 这样的 Web 容器中,并使它们在 OSGi 运行时上运行。然后,OSGi HttpService 将通过 HTTP 协议使它们“在网络上”可用。正确的?总结:我不需要像 Tomcat 这样的 Web Container?
    • 是的,它是如何组合在一起的。您的服务将通过 OSGi http 服务提供。然而,在实践中,Web 扩展器使用 Web 容器来部署 WAR。你得到的好处是WAR可以用你的OSGi框架的正常启动脚本启动,WAR可以参与OSGi框架的正常依赖管理(即你可以依赖WAR:s和WAR:s可以依赖于其他 OSGi 包)。
    • 并且所有的servlet都会注册到OSGi http服务。
    • 感谢您的回答。这对我帮助很大!我投了你一票,并将你的回答标记为对我问题的回答。再次感谢您。
    • 哇,这是对Tomcat和OSGI如何结合的最好描述!你介意看看我的问题吗? stackoverflow.com/questions/3893494/…
    【解决方案2】:

    詹斯,

    由于我对 OSGi 有一些经验,我真的建议你从简单的 OSGi 开始。

    请以 Eclipse RCP (Rich Client Platform) 开头。

    如果您download Eclipse IDE for RCP and RAP Developers edition here,您不仅可以获得 OSGi 运行时,还可以获得功能齐全的集成 IDE。

    我们大家都很幸运,您可以得到这本书 Eclipse Rich Client Platform (2nd Edition),它仅在几个月前发布,其中包含有关 Eclipse RCP 的更新信息/指南。

    OSGi 是 Eclipse RCP 的基本构建块,但是 OSGi 本身就是令人困惑和无聊的(至少对于初学者而言)。在 Eclipse RCP 上快速上手要容易得多且令人愉快,您可以在数小时内构建一个功能强大的“做某事”应用程序。

    使用普通的 OSGi,如果您能在最初几天内摆脱 ClassNotFound 异常,您已经很幸运了。

    在使用 Eclipse RCP 一段时间后,将您的应用程序“转换”为Eclipse RAP,以在 Java servlet 容器上将其作为 Web 应用程序运行。看看你是否喜欢它,即使你不喜欢......此时你已经掌握了 OSGi 的概念和实践,你的航行到“普通 OSGi”会比你从头开始更顺利。

    祝詹斯好运!

    附:我也在my Java EE blog 上写过这些东西,虽然并不总是专门写在 OSGi 上。

    【讨论】:

    • 嘿亨迪,谢谢您的回复。我想我不是普通的编码员,因为我认为普通的 OSGi 一点也不差。而且我只使用我的终端/控制台和一个简单的文本编辑器完成了大部分培训项目;)我喜欢保持简单。但是整个 Eclipse 环境当然也不错,对于大型项目来说,这是可行的方法。我不知道为什么所有的 OSGi 编码器都对普通的 OSGi 感到羞耻?在我看来,它让 Java 再次变得有趣。
    • 只是想在这里加我的 2 美分。我不同意 Hendy 关于不查看或使用普通 OSGi 的建议。在许多情况下,纯 OSGi 或其他一些 OSGi 组件是比 RCP 更好的选择。 RCP 肯定有它的用途,但它不是灵丹妙药。
    • @Marcel 谢谢你,我当然同意你的观点,“RCP 有它的用途,但它不是灵丹妙药。”我的意思是 Eclipse RCP 是一种更容易开始使用 OSGi 的方法(即学习阶段)。几天之内,程序员将能够做许多比使用普通 OSGi 相对容易的事情,然后“感受”一下 OSGi 是什么。一个从普通 OSGi 开始的空白程序员可能会在最初几天发现太多错误,并且很容易混淆。通过初始曲线后,开发人员可以选择 RCP 或普通 OSGi 是否更适合他们的项目。
    • Eclipse RCP 和 Equinox 有什么区别?
    • @drozzy Eclipse RCP 是一个富客户端平台(因此得名),它运行在名为 Equinox 的 OSGi 运行时之上。 Equinox 只是 OSGi 运行时。也许一个很好的技术类比是 Eclipse RCP 是 GUI,Equinox/OSGi 是内核。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2016-02-29
    • 2013-03-03
    相关资源
    最近更新 更多