基于OSGi和Spring开发Web应用(一)

日期: 2009-04-14 作者:张晓宁 来源:TechTarget中国 英文

  作为一个新的事实上的工业标准,OSGi已经受到了广泛的关注,其面向服务(接口)的基本思想和动态模块部署的能力,是企业级应用长期以来一直追求的目标。Spring是一个著名的轻量级J2EE开发框架,其特点是面向接口编程和非侵入式的依赖注入。将OSGi和Spring结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。Spring开发组织在2008年发布了将OSGi和Spring结合的第一个版本:Spring-DM。本文通过一个简单实例,介绍如何利用Spring-DM开发基于OSGi和Spring架构的Web应用,同时探讨其中用到的关键技术及其基本思想。

  开发一个简单的OSGi Web应用实例

  一个简单的Web应用

  我们写一个简单的Web应用compute.html:计算两个数字的和或乘积。如下图所示:

            

  图1. 一个简单例子
 
  一个简单例子.bmp

  为了体现OSGi bundle的动态部署能力,我们写两个service bundle,其中一个计算两个数字的和(称为add bundle),另外一个计算两个数字的积(称为multiply bundle)。当我们点击“Compute”按钮的时候,如果此时add bundle被部署,则页面将返回两个数字的和,否则如果此时multiply bundle被部署,则页面将返回两个数字的积。

  开发环境准备

  ·下载Eclipse 3.4

  ·获取所有OSGi, Equinox和Spring的插件, 如下图所示:

          

  图2. 相关插件列表
 
  ·打开Eclipse,设置target platform为上述插件集合

  基本模块设计

  该应用主要包含两个层次: 服务层和Web层。Web层基于Spring-MVC实现,包含处理Web访问相关的bundle(本例中只有一个)。服务层包含处理数字计算的bundle,本例中包含一个声明服务接口的compute interface bundle和两个实现该服务接口的bundle:add bundle和multiply bundle。基本模块结构如下图所示:

                    

  图3. 基本框架
 
  模块程序实现

  Step 1 :实现Service Layer

  服务层的三个OSGi bundle实现完毕之后如下图所示:

             

  图4. 服务层
 
  服务层.bmp

  其中com.zxn.example.service.compute是声明服务接口的bundle。com.zxn.example.service.compute.add和com.zxn.example.service.compute.multiply是实现了服务接口的两个bundle。

  ·com.zxn.example.service.compute

  声明一个Compute接口,其中包含一个接口方法computeNums(),如下图所示:

              

  图5. 服务层接口bundle
 
  ·com.zxn.example.service.compute.add
bundle com.zxn.example.service.compute.add的基本程序结构如下图所示:

               

  图6. 接口实现bundle:add
 
  在该add bundle中,添加一个Add类,实现Compute接口,如下图所示:

                

  图7. 接口实现代码:Add类
 
  注意到我们在META-INF下建了一个spring目录,并且添加了一个computeAdd-context.xml文件。系统启动时,Spring将利用该xml文件创建一个bean实例,并把该bean输出为一个OSGi service,如下图所示:

               

  图8. Spring声明文件:computeAdd-context.xml
 
  该xml文件中,osgi: service是Spring-DM输出OSGi service的标记,其中的interface属性标明了该service实现的服务接口。

  ·com.zxn.example.service.compute.multiply
按照与add bundle同样的方法,实现multiply bundle,如下图所示:

             

  图9. 接口实现代码:Multiply类
 
  接口实现代码-Multiply类.bmp

  类似的,添加一个computeMultiply-context.xml输出OSGi service,如下图所示:

            

  图10. Spring声明文件:computeMultiply-context.xml
 
  Step 2:实现Web Layer

  Web层只包含一个bundle:com.zxn.example.web,采用Spring-MVC和OSGi构建,基本程序结构如下图所示:

                     

  图11. Web Layer程序结构
 
  ·ComputeControler.java

  该JAVA类实现了org.springframework.web.servlet.mvc.Controller,是本web应用中核心的servlet,负责接受并处理web请求。该类调用ComputeServiceRef的方法实现业务逻辑。该类关键的方法是handleRequest(…),如下图所示:

             

  图12. 核心servlet类

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐