无法理解整个OSGi网络生态系统

Jen*_*ens 28 tomcat osgi equinox apache-felix

我是整个Java和OSGi世界的新手,我无法理解OSGi Web应用程序的生态系统.

更确切地说,我目前正试图了解生态系统的所有部分是如何相互关联的:

  • OSGi框架(例如Apache Felix,Equinox,Knoplerfish)
  • OSGi运行时(例如Spring DM Server,Pax Runner,Apache Karaf)
  • Web Extender(例如Pax Web Extender,Spring Web Extender)
  • Web容器(例如Apache Tomcat,Jetty)

为了让您直观地了解我对他们的关系的实际理解,请查看此图片:

alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png

据我所知,OSGi框架是OSGi规范的一个实现.运行时是一种分发,它在OSGi规范之上添加了额外的功能,例如日志记录.由于OSGi和Web容器(如Tomcat)的类路径机制似乎存在一些差异,因此您需要某种翻译器.这部分由"Web Extender"处理.

请你澄清一下这件事吗?我理解一切正确吗?

Ale*_*ing 25

OSGi是用于交互软件模块的API和包装的标准.这类似于JPA或Java EE等其他API标准.

OSGi运行时是遵循OSGi标准的服务器,它是标准的实现.你提到一些常见的:Knopflerfish,Eqinox.这些让你运行OSGi包.

Web容器通常是指Java EE(servlet)的Web特定部分的实现.servlet标准还定义了一个API和包装,就像OSGi一样,只是不同的.

您需要一台服务器来运行Java EE Web应用程序.您将应用程序打包为Java Web Archive(WAR),并要求应用程序服务器启动它.正如你所提到的,有几个服务器,如Tomcat,Jetty,还有更大的服务器,它们涵盖了Java EE标准的更大部分,比如Glassfish和JBoss.

Web扩展程序尝试将servlet标准与OSGi统一起来.通过向已打包的WAR添加一些特定于OSGi的数据,WAR将自动解析并由OSGi运行时启动.您的WAR servlet将由Web扩展器发布到OSGi http服务.使用Web扩展程序,您可以仅使用OSGi运行时运行标准OSGi应用程序和WAR,而无需像Tomcat这样的Java EE兼容服务器.

  • 感谢您的快速回复.如果我理解正确,Web扩展程序将获取WAR文件,这些文件通常会部署到像tomcat这样的Web容器中,并使它们在OSGi运行时上运行.然后,OSGi HttpService将通过HTTP协议"在Web上"提供它们.正确?总结:我不需要像Tomcat这样的Web容器? (4认同)
  • 是的,正确地说它是如何组合在一起的.您的服务将通过OSGi http服务提供.但是,在实践中,Web扩展程序使用Web容器来无论如何都要部署WAR.您获得的好处是可以使用OSGi框架的正常启动脚本启动WAR,并且WAR可以参与OSGi框架的正常依赖关系管理(即,您可以依赖于WAR:s和WAR:s可以依赖于其他OSGi捆绑包). (2认同)