·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中国
作者
相关推荐
-
当web成为选择 开发原生移动app还值得吗?
随着iPhone的推出,其进入的代价是通过苹果应用商店流通的编译过的Objective-C二进制代码的分发。
-
十大响应式Web设计框架
对于设计师而言,网站设计中的任意一环节都不容忽视。借助网上的一些资源,只需简单的几个步骤你就可创建出更具吸引力的设计,本文将分享十款最佳的响应式Web设计。
-
开发者的黄金时代=运维人员的恶梦?
开发与运维常常被人们放在一起,而如今DevOps的流行也与他们脱不了关系。目前软件环境的变化可以说是开发者的黄金时代,而对于运维来说,这些变化正给他们带来新的挑战和期望。
-
Spring针对Java 8升级
Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。