基于OSGi和Spring开发Web应用 - 编程入门网
文件: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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |