3

在研究 OSGi 和 OSGi 容器时,我偶然发现了这个SO question,提到 GlassFish 作为 OSGi 容器,我不得不说我很困惑。

这怎么可能?!?!

我的理解是 OGS - 一个符合 Java 的应用服务器 - 有 2 个容器:

  • Web 容器:为 Web 应用程序和服务部署 WAR 文件的位置
  • App Container:为业务逻辑部署 EJB 的地方

OSGi 捆绑包在哪里适合这种范式?!?OGS 是否允许您将 OSGi 包部署到应用程序容器并将其视为 EJB 或其他东西?如果我对 OGS 的工作方式有误,请纠正我!提前致谢!

4

3 回答 3

5

OSGi 是一个模块系统,它允许添加/删除/升级不同的包、处理依赖关系、提供有关状态的运行时信息等。

谈到 GlassFish(其中有一个 Apache Felix OSGi 容器),应用程序服务器(例如 HTTP 服务器、JMS 服务器等)的不同功能被实现为捆绑包。OSGi 容器有控制台和基于 Web 的界面,您可以在其中启动、安装、删除服务(请参阅下面的 PDF)

就 Java EE 应用程序而言,它们也可以与 OSGI 容器交互。例如,EJB 可以作为 OSGi 服务导出,EJB 也可以使用 OSGi 服务本身。

有关详细信息,请参阅http://glassfish.java.net/public/GF-OSGi-Features.pdf

于 2012-07-18T20:37:12.417 回答
5

嗯,对 OSGi 是什么的完全误解......

OSGi 是一个允许您组织代码的框架,以便您可以从可重用的组件构建它,然后这些组件可以通过服务层进行协作(不再有 Class.forName 或 XML!)。

OSGi 框架可以独立运行,可以在应用程序内部运行,可以在 WAR 文件中运行,也可以在应用程序服务器内部运行。您甚至可以在 OSGi 中的 OSGi 中运行 OSGi,因为它不依赖任何地方的静态。

OSGi 联盟为模块(包)指定了一种格式,以便模块可以指定它们的依赖关系。该联盟还指定了一个 API 来安装和管理模块。最后,它指定了大量在开发应用程序时有用的接口。

Websphere、Glassfish、JBoss、Jonas 都支持部署 OSGi 包。

于 2012-07-19T11:53:22.753 回答
0

Glassfish 在内部使用 OSGi 来提供您提到的功能。除此之外,您还可以在其上部署自己的 OSGi 包。请参阅https://wikis.oracle.com/display/GlassFish/OSGi 虽然 OSGi 和 Java EE 之间没有真正的联系。您还不能在 Glassfish 上的 OSGi 包中使用 JavaEE。对于这种情况,有第一个举措,如 OSGi 上的 Weld:http : //www.slideshare.net/TrevorReznik/weldosgi-injecting-easiness-in-osgi 虽然它们还没有真正准备好生产。

于 2012-07-18T20:21:53.797 回答