在研究OSGi和OSGi容器时,我偶然发现了this提到GlassFish作为OSGi容器的问题,我不得不说我很困惑。
这怎么可能?!?!
我的理解是OGS--一个兼容Java的应用服务器 - 有两个容器:
OSGi捆绑包在哪里适合这种范例?!? OGS是否允许您将OSGi包部署到应用程序容器并将其视为EJB或其他内容?如果我对OGS的工作原理有误,请指正!提前谢谢!
答案 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 但他们并没有真正做好生产准备。