快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
文件:computeMultiply-context.xml

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

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

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 类

ComputeServiceRef.java

该 JAVA 类负责引用部署的 service bundle 完成最终计算,其中的 computeService 由 Spring 根据 OSGi 中实际部署的 service 进行注入。本例 中,实际部署的 service 可能是 add bundle 或者 multiply bundle。

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

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

需要特别注意的是,此处体现了 Spring-DM 的动态特性。OSGi 的动态部署 能力使得 Spring 的动态服务注入成为可能。

图 13. 服务消费类

HTTPContextResgistry.java

该 JAVA 类负责在 OSGi 环境中配置和注册 HTTP 服务,其关键方法为 bean 初始化时调用的 init( ) 方法。

图 14. 在 OSGi 环境中注册 HTTP 服务

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

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

该 init 方法中,第六行的 getHTTPService(…) 调用 OSGi 的 ServiceTracker 来获取 OSGi环境中注册的 HTTP 服务的引用,如下图所示:

图 15. 使用 ServiceTracker 获取 HTTP 服务

computeWeb-context.xml

该 xml 文件主要用于配置 HTTPContextResgistry bean 类,以及导入对 Compute 服务接口的引用。标记 osgi : reference 用于声明要导入的服务接口 ,其 interface 属性标明了该接口的定义,本例中为 com.zxn.example.service.compute.Compute 接口。

图 16. Spring 声明文件:导入服务接口

computeWeb-Dispatcher.xml

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

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

该 xml 文件用于配置 ComputeControler bean类。

图 17. Spring 声明文件:配置核心 servlet 类

运行程序

以往开发 J2EE 应用通常需要将应用服务器的 runtime 集成到开发环境中才 能进行程序调试,非常麻烦。基于 OSGi 的应用完全可以脱离应用服务器运行, 这使得程序开发和调试变得非常容易,直接在 Eclipse 中调试运行就可以。我 们在 Eclipse 中将程序运行起来,如下图所示:

图18. 运行 OSGi 程序

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

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

从上图中看到,我们同时选择部署了 add bundle 和 multiply bundle,利 用 OSGi console 察看如下:

图 19. 察看部署的 OSGi bundle

当 OSGi 环境中同时部署有多个服务接口的实现 bundle 时,OSGi 会选择一 个默认的 bundle提供服务。本例中,Spring 会默认注入 add bundle。我们通 过 web 访问 compute.html 页面:

图 20. 访问页面

点 Compute 按钮之后,结果页面如下:

图 21. 访问结果

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

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

可以看出,是 add bundle 提供了计算服务。下面我们通过命令 <stop 76 > 来停止 add bundle的服务:

图 22. 停止 add bundle

图 23. add bundle 状态变为 RESOLVED

重新访问 compute.html 页面,结果得到的是两个数字的乘积。可以看出, 是 multiply bundl

提供了计算服务。如下图所示:

图 24. 再次访问页面

小结

作为当前颇具生命力的两个标准和框架,OSGi 和 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号