28

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

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

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

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

替代文字

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

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

4

2 回答 2

25

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 兼容服务器。

于 2010-04-02T16:51:43.633 回答
3

延斯,

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

而是从Eclipse RCP(富客户端平台)开始。

如果您在此处下载 Eclipse IDE for RCP and RAP Developers edition,您不仅可以获得 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”会比从头开始更顺利。

祝詹斯好运!

PS 我也在我的 Java EE 博客上写过这些东西,虽然并不总是专门针对 OSGi。

于 2010-07-17T13:16:52.130 回答