2012-07-18 80 views
3

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

这怎么可能?!?!

我的理解是,OGS - 兼容Java的应用服务器 - 有2个集装箱:

  • Web容器:你在哪里部署WAR文件的Web应用和服务
  • 应用程序容器:在您部署用于业务逻辑的EJB

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

+0

基本问题将是 - 1)OSGi是各种OGS内容的运行时间吗?2)是否还向用户/开发人员公开了OSGi容器,以添加可由其他J2EE组件访问的bundle模块? – chad 2012-07-18 16:31:43

+0

@chad - 我很欣赏你的意见,但不幸的是,你的评论让我感到困惑的比我更多;你能否详细说明或发表更详细的答案? – IAmYourFaja 2012-07-18 16:44:54

+0

它看起来像其他人提供了更全面的答案。我建议OSGi是那种看起来很简单的东西,如果你只是阅读文献和嗡嗡声,但它的用例实际上是相当具有挑战性的。一个非常有经验的建筑师的电动工具,我自己排除了。 – chad 2012-07-19 19:07:02

回答

5

嗯,是什么样的OSGi相当个误会......

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

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

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

Websphere,Glassfish,JBoss,Jonas都支持部署OSGi捆绑软件。

+0

谢谢@Peter Kriens(+1) - 但是如果我没有弄错,一个bundle只是一个内部结构和元数据不同的JAR,是的?如果是这样,并且它可以部署到OGS,那么OGS *中的某种容器必须*为部署的包提供服务,是的?这是我的问题的根源:** OGS是否具有第三个容器,用于提供OSGi包的“OSGi容器”,还是通过WARs/EJB以某种方式提供OSGi?** – IAmYourFaja 2012-07-19 15:04:36

+0

OSGi不是一个包含所有容器的容器。 .. OSGi在WAR中运行,它甚至可以在另一个OSGi fw内运行,许多App服务器都基于OSGi。由于OSGi不使用静态(就像其他人似乎在Java中所做的那样,即使他们在幼儿园被告知不要使用全局变量)。如果你不使用静力学,你会获得灵活性。所以OSGi可以与App服务器并排运行,或者应用服务器建立在OSGi之上。所以GF有办法安装你的捆绑软件,然后和WAR一起玩:http://www.slideshare.net/wwwsahoo/osgi-java-ee-in-glassfish-3553192 – 2013-07-18 08:27:20

+0

玻璃鱼文档里面你可能会发现玻璃鱼基础架构的链接。 http://felix.apache.org/ – 2013-11-02 04:29:42

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 尽管如此,它们并不是真正的生产准备。

+2

这不是事实。可以一起使用Java EE和OSGi。 GlassFish支持它,WebSphere也支持它。阅读http://glassfish.java.net/public/GF-OSGi-Features.pdf。 - Sahoo – sahoo 2012-07-26 00:38:55

+0

听起来不错。我以前没有看到这个。将不得不测试它:-) – 2012-07-26 19:20:45

4

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

当涉及到GlassFish(其具有在Apache菲利克斯OSGi容器它),应用程序服务器(例如HTTP服务器,JMS服务器等)的不同功能以捆绑方式实现。有OSGi容器的控制台和基于Web的界面,您可以在其中启动,安装和删除服务(请参见下面的PDF)

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

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

+0

谢谢@Istvan(+1) - 是否有办法制作OOSGi包并将其部署到GlassFish上?如果是这样,怎么样? – IAmYourFaja 2012-07-18 22:01:55

+0

首先,学会为Apache Felix创建一个包http://felix.apache.org/site/apache-felix-osgi-tutorial.html,然后尝试为Glassfish创建一个特定的包,请参阅这里http://java.com/java .dzone.com/news/from-osgi-glassfish-5-steps – 2012-07-19 05:54:48

+0

pnongrata:您没有阅读Istvan引用的pdf文件。先去检查一下。 – sahoo 2012-07-26 00:39:53

相关问题