OSGi技术发展至今也有好几年了,然而除了在富客户端应用(以Eclipse为代表)和服务器应用(如大多数的应用服务器)方面大放光芒之外,在Web Application方面的应用和资料却少之又少。一方面,在OSGi规范中,对于Web应用方面的规划尚不成熟,即使在最新的4.2版中,也仅仅只有一个HttpService,这个简陋的service甚至不能覆盖任何一个现有的Servlet规范;另一方面,各个OSGi实现厂商对HttpService的实现也是不完全的,在开发实现一个常规的Web Application时,这些实现也是完全不够用的。本文章的目的,也就是为了探索OSGi在Web Application上的开发之路该如何走,从我的视角提出一些看法,做一些尝试,希望对大家有所帮助。
现在OSGi与Web Application的结合,大致有两个方向:
- OSGi包含Web Container:目前能完美嵌入OSGi的Web Container似乎只有jetty一个,tomcat的catalina似乎有希望能成为第二个。我们完全不能指望Websphere和Weblogic能在短期内具有能嵌入OSGi的能力,所以这个方向理所当然的被我放弃了。
- Web Container包含OSGi:这个方面目前只有equinox的Servlet Bridge这么一个著名的实现,equinox通过Servlet Bridge的方式来实现一个OSGi的HttpService服务,这个服务目前能做的事情还非常有限,还不足以覆盖Servlet规范。
我的目标是构建一个OSGi与Web Application结合的方式,它要能满足一下几点需求:
- 基于OSGi的bundle和service。
- 适合绝大对数支持Servlet 2.4和Jsp 2.0规范的Web服务器。
- 适合现有的实现OSGi 4.2规范的OSGi Framework实现:equinox、felix和knopflerfish。
- 支持大部分Servlet 2.4和Jsp 2.0规范中声明的功能。
- 提供一个基于HttpService的服务实现,以此来兼容其他使用HttpService的service。
毫无疑问,我将采用Web Container中包含OSGi的方式来实现,具体的内容将在以后陆续提供。