我对整个Java和OSGi世界都很陌生,我无法理解OSGi Web应用程序的生态系统。
更准确地说,我目前正试图了解生态系统的所有部分是如何相互关联的:
为了让您直观地了解我对他们关系的真正理解,请查看此图片:
alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png
据我所知,OSGi框架是OSGi规范的一个实现。运行时是一种分发,它在OSGi规范之上添加了额外的功能,例如日志记录。由于OSGi和Web容器(如Tomcat)的类路径机制似乎存在一些差异,因此您需要某种翻译器。这部分由“Web Extender”处理。
请您为我澄清这整件事吗?我理解一切正确吗?
答案 0 :(得分:25)
OSGi是用于交互软件模块的API和包装的标准。这类似于其他API标准,如JPA或Java EE。
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兼容服务器。
答案 1 :(得分:3)
延,
由于我对OSGi有一些经验,我真的会不建议你从普通的OSGi开始。
首先从Eclipse RCP (Rich Client Platform)开始。
如果download Eclipse IDE for RCP and RAP Developers edition here,您不仅可以获得OSGi运行时,还可以使用功能齐全的集成IDE。
幸运的是,您可以获得最近几个月前发布的书籍Eclipse Rich Client Platform (2nd Edition),其中包含有关Eclipse RCP的最新信息/指南。
OSGi是Eclipse RCP的基本构建块,但OSGi本身就令人困惑和无聊(至少对于初学者而言)。快速掌握Eclipse RCP更加轻松愉快,您可以在几小时内构建功能强大的“do-something”应用程序。
使用简单的OSGi,如果你能在最初的几天内摆脱ClassNotFound异常,你就已经很幸运了。
使用Eclipse RCP一段时间后,将您的应用程序“转换”为Eclipse RAP,以将其作为Java servlet容器上的Web应用程序运行。看看你是否喜欢它,即使你没有...到这个时候你已经掌握了OSGi概念&你从“普通的OSGi”航行的做法会比你从头开始做得更顺畅。
祝你好运Jens!
P.S。我也在my Java EE blog上写了这些东西,但并不总是专门针对OSGi。