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

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

  ·ComputeServiceRef.java

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

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

                     

  图13. 服务消费类
 
  ·HTTPContextResgistry.java

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

             

  图14. 在OSGi环境中注册HTTP服务
 
  该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

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

         

  图17. Spring声明文件:配置核心servlet类
 
  运行程序

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

               

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

                

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

               

  图20. 访问页面
 
  点Compute按钮之后,结果页面如下:

              

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

         

  图22. 停止add bundle

               
 
  图23. add bundle状态变为RESOLVED
 
  重新访问compute.html页面,结果得到的是两个数字的乘积。可以看出,是multiply bundl

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

               

  图24. 再次访问页面
 
  小结

  作为当前颇具生命力的两个标准和框架,OSGi和Spring已经初步融合在一起。二者的结合,为开发企业级的Web应用同时提供了巨大的灵活性和动态部署能力。本文通过一个简单的例子,描述如何开发一个基于OSGi和Spring的Web应用,并说明了开发过程中涉及到的技术关键点。

  关于作者

  张晓宁,目前在IBM中国软件开发中心工作,主要负责Business Intelligence与数据仓库方面产品的开发工作。

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 当web成为选择 开发原生移动app还值得吗?

    随着iPhone的推出,其进入的代价是通过苹果应用商店流通的编译过的Objective-C二进制代码的分发。

  • 十大响应式Web设计框架

    对于设计师而言,网站设计中的任意一环节都不容忽视。借助网上的一些资源,只需简单的几个步骤你就可创建出更具吸引力的设计,本文将分享十款最佳的响应式Web设计。

  • 开发者的黄金时代=运维人员的恶梦?

    开发与运维常常被人们放在一起,而如今DevOps的流行也与他们脱不了关系。目前软件环境的变化可以说是开发者的黄金时代,而对于运维来说,这些变化正给他们带来新的挑战和期望。

  • Spring针对Java 8升级

    Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。