GlassFish如何成为OSGi容器?

时间:2012-07-18 16:00:27

标签: java java-ee glassfish osgi

在研究OSGi和OSGi容器时,我偶然发现了this提到GlassFish作为OSGi容器的问题,我不得不说我很困惑。

这怎么可能?!?!

我的理解是OGS--一个兼容Java的应用服务器 - 有两个容器:

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

嗯,对OSGi是什么的一个相当完全的误解......

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

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

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

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

答案 2 :(得分:0)

Glassfish内部使用OSGi来提供您提到的功能。除此之外,您可以在其上部署自己的OSGi包。见https://wikis.oracle.com/display/GlassFish/OSGi 但是OSGi和Java EE之间没有真正的联系。您还不能在Glassfish上的OSGi包中使用JavaEE。对于这种情况,首先有像Weld on OSGi这样的举措:http://www.slideshare.net/TrevorReznik/weldosgi-injecting-easiness-in-osgi 但他们并没有真正做好生产准备。