GlassFish是一个OSGi容器



在研究OSGi和OSGi容器时,我偶然发现了一个SO问题,提到GlassFish是OSGi容器,我不得不说我很困惑。

这怎么可能

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

  • Web容器:用于部署Web应用程序和服务的WAR文件
  • 应用程序容器:在其中为业务逻辑部署EJB

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

嗯,对OSGi是什么完全误解。。。

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

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

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

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

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

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

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

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

Glassfish在内部使用OSGi来提供您提到的功能。此外,您还可以在上面部署自己的OSGi捆绑包https://wikis.oracle.com/display/GlassFish/OSGi不过OSGi和JavaEE之间并没有真正的联系。您还不能在Glassfish上的OSGi捆绑包中使用JavaEE。对于这种情况,有第一个像Weld-onOSGi这样的计划:http://www.slideshare.net/TrevorReznik/weldosgi-injecting-easiness-in-osgi不过,他们还没有真正做好生产准备。

最新更新