Java GlassFish如何成为OSGi容器?

Java GlassFish如何成为OSGi容器?,java,jakarta-ee,glassfish,osgi,Java,Jakarta Ee,Glassfish,Osgi,在研究OSGi和OSGi容器的过程中,我偶然发现了一个关于GlassFish作为OSGi容器的问题,我不得不说我很困惑 这怎么可能 据我所知,OGS(一种兼容Java的应用服务器)有两个容器: Web容器:为Web应用程序和服务部署WAR文件的地方 应用程序容器:在其中部署用于业务逻辑的EJB OSGi捆绑包在哪里适合这个范例?!?OGS是否允许您将OSGi捆绑包部署到应用程序容器中,并将其视为EJB或其他东西?如果我误解了OGS的工作原理,请纠正我!提前谢谢 Glassfish内部使用OS

在研究OSGi和OSGi容器的过程中,我偶然发现了一个关于GlassFish作为OSGi容器的问题,我不得不说我很困惑

这怎么可能

据我所知,OGS(一种兼容Java的应用服务器)有两个容器:

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

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

Glassfish内部使用OSGi提供您提到的功能。此外,您还可以在其上部署自己的OSGi捆绑包。看见 不过,OSGi和JavaEE之间没有真正的联系。您还不能在Glassfish的OSGi包中使用JavaEE。在这种情况下,有像OSGi上的Weld这样的第一个计划:
不过,它们并没有真正做好生产准备。

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

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

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


有关更多信息,请参见

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

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

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

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


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

基本问题是——1)OSGi是各种OGS的运行时吗?2)OSGi容器是否也公开给用户/开发人员,让他们添加其他J2EE组件可以访问的捆绑模块?@chad-我感谢您的输入,但遗憾的是,您的评论让我比最初更困惑;你能详细解释一下或者发表一个更详细的答案吗?看起来其他人提供了更全面的答案。我认为OSGi是一种看起来足够简单的东西,如果你只是阅读文献和buzz,但是它的用例实际上是相当具有挑战性的。对于经验丰富的架构师来说,这是一个强大的工具,不包括我自己。谢谢@Istvan(+1)-有没有办法制作OOSGi包并将其部署到GlassFish上?如果是,怎么做?首先,学习为ApacheFelix创建一个包,然后尝试为Glassfish创建一个特定的包,请参见此处pnongrata:您没有阅读Istvan引用的pdf文件。先去看看。谢谢@Peter Kriens(+1)-但如果我没有弄错的话,bundle只是一个内部结构不同的JAR和一些元数据,是吗?如果是这样,并且如果它可以部署到OGS,那么OGS中的某种容器必须为部署的捆绑包提供服务,是吗?这是我问题的根源:OGS是否有第三个容器,即“OSGi容器”,用于服务OSGi捆绑包,还是通过WARs/EJB服务OSGi?OSGi不是一个包罗万象的容器。。。OSGi在战争中运行,甚至可以在另一个OSGi fw中运行,许多应用服务器都基于OSGi。因为OSGi不使用静态(就像Java中的其他人一样,尽管幼儿园里告诉他们不要使用全局变量)。如果不使用静力学,则可以获得灵活性。因此,OSGi可以与应用服务器并行运行,或者应用服务器构建在OSGi之上。因此,GF有一种方法可以安装您的捆绑包,然后与战争并肩作战:在glassfish文档中,您可能会找到glassfish基础架构的链接。JBoss EAP 7.x不支持OSGit这不是真的。可以一起使用JavaEE和OSGi。GlassFish和WebSphere都支持它。读。-萨胡听起来不错。我以前没见过这个。将很快进行测试:-)