快速业务通道

基于OSGi和Spring开发Web应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

基于OSGi和Spring开发Web应用

时间:2011-06-21 IBM / 张晓宁

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

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

一个简单的 Web 应用

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

图 1. 一个简单例子

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

1.下载 Eclipse 3.4

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

1.打开 Eclipse, 设置 target platform 为上述插件集合

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

时间:2011-06-21 IBM / 张晓宁

基本模块设计

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

图 3. 基本框架

模块程序实现

Step 1 :实现 Service Layer

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

图 4. 服务层

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

时间:2011-06-21 IBM / 张晓宁

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

1.com.zxn.example.service.compute

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

图 5. 服务层接口 bundle

1.com.zxn.example.service.compute.add

bundle com.zxn.example.service.compute.add 的基本程序结构如下图所示 :

图 6. 接口实现 bundle :add

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

图 7. 接口实现代码 :Add 类

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

时间:2011-06-21 IBM / 张晓宁

注意到我们在 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 实现的服务接口。

1.com.zxn.example.service.compute.multiply

按照与add bundle 同样的方法,实现 multiply bundle,如下图所示:

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

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

图 10. Spring 声明

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号