2024年2月20日发(作者:)
计 算 机 工 程
第卷 第2期
38
Computer Engineering
V
ol.38
No.2
文章编号:文章编号:1000—3428(2012)02—0069—03
·软件技术与数据库·软件技术与数据库·
2012年1月
January 2012
文献标识码:文献标识码:A
中图分类号:中图分类号:TP311.5基于Spring的构件动态演化机制的构件动态演化机制
仇书礼,仇书礼,初佃辉,初佃辉,孟凡超
(哈尔滨工业大学(威海)计算机科学与技术学院,山东 威海 264209)
摘 要:针对Spring开源框架不支持动态演化的问题,提出一种基于Spring的构件动态演化机制。在设计开发模式上,对系统进行面向业务逻辑和配置文件的模块化划分,在体系结构上,引入演化代理,对模块间调用进行解耦,模块调用由实例管理中心进行统一管理控制。在Spring框架中实现该机制,并通过计算Π值进行实验验证,结果表明,该机制可以使软件系统在运行期间实现演化,对系统效率基本无影响。
关键词:关键词:构件;动态演化;控制反转;解耦;演化代理;实例注册中心
Component Dynamic Evolution Mechanism Based on Spring
QIU Shu-li, CHU Dian-hui, MENG Fan-chao
(School of Computer Science and Technology, Harbin Institute of Technology at Weihai, Weihai 264209, China)
【Abstract】For the issue of that Spring, the open source framework does not support dynamic evolutions, this paper comes up with a component
dynamic evolution mechanism based on Spring, from the view of the development mode and architecture of software system. This mechanism
divides the system’s business logic and configuration files into many modules from the point of development mode. In the aspect of architecture, it
leads in evolution agent to decouple the invoking among modules, while modules and their callings are managed and controlled uniformly by
instance management center. This mechanism is implemented in the Spring framework, and it is proved by calculating the value of Π. Experimental
results show that the mechanism can let system implement evolutions at run-time and does not influence the system efficiency.
【Key words】component; dynamic evolution; inversion of control; decouple; evolution agent; instance registration center
DOI: 10.3969/.1000-3428.2012.02.022
1 概述
瞬息万变的市场要求企业的灵魂、核心的业务应用系统必须迅速地适应需求变化,能够根据需求的变化快速响应需求,变更应用系统[1],同时,全天候的业务执行又要求企业软件能够7×24 h地运行,这些都凸现出动态演化在企业软件系统中的重要性。演化性是软件的基本属性[2],动态演化是指软件在执行期间的软件演化,它使软件不会存在暂时的失效,具有不间断服务的明显优点[3]。
Spring框架是目前Java企业软件开发领域最流行的软件开发技术,它是一个轻量级的控制反转和面向切面的开源容器框架。控制反转,又称依赖注入,是Spring框架的核心,即将所有对象创建的工作交由第三方(Spring容器)来控制。对控制反转的原生态支持使Spring容器具有强大的黏附力,任何一个Java应用都可以轻易地集成到Spring容器中,几乎所有的Java开源项目都提供了对Spring的支持。面向切面
是Spring框架的另一重要特点,它使Spring容器中的所有Java对象能够享受统一的无缝的切入服务,如日志、事务等。
Spring框架给企业软件开发者带来了很大便利,然而它仅将Java对象间的关系解耦,却没有提供对动态演化的支
持,造成了企业系统软件不得不在停止之后再进行升级,影响了企业的服务质量和服务效率。所以,本文针对Spring的这个不足,提出基于Spring的动态演化机制,并对这个机制进行了实现。
在面向服务方面,文献[4]提出了一个面向服务对象的动态演化模型,该模型借鉴面向服务的服务注册和查询机制,利用服务对象注册表解耦对象的引用实现软件演化;文献[5]提出一种解决OSGi平台上服务动态演化的方法,根据重定向方法来解决服务类定义的动态更新,使用实现和数据相分离的方法来解决演化中公共数据的一致性。
在构件方面,文献[6]使用了SOFA的动态构件更新(DCUP)方法,DCUP提供了一组相互正交的抽象,从而支持构件在运行的应用中进行更新;文献[7]设计出了一种3RDBA方法,可用于替换长时间运行系统中的组件,还可根据所作的演化取得各种必要的信息;文献[8]设计了网构软件系统的动态演化模型,给出了构件增加、删除和更新操作的需求算法,并引入一致性检查模型保证了演化的可靠性和安全性。
3 基于Spring的构件动态演化机制
要实现Spring框架下的动态演化,必须从软件系统的开发模式、体系结构上入手。
如图1所示,从开发模式上将系统划分为多个模块,每个模块包含相应的业务逻辑和配置文件。模块是耦合度最小基金项目:“核高基金项目:国家“863”计划基金资助项目(2008AA04Z101);基”重大专项(2009ZX01045-001-002-4);山东省科技发展计划基金资助项目(2011GGX10108, 2010GGX10104, 2010GGX10116, 2010G
ZX20126);威海市科技攻关计划基金资助项目(2011GGA00201109
22082212)
作者简介:作者简介:仇书礼(1987-),男,硕士研究生,主研方向:软件工程,软件体系结构;初佃辉,副教授;孟凡超,副教授、博士
收稿日期:收稿日期:2011-07-22 E-mail:mengfanchao74@
2 相关研究工作
目前,研究人员对软件的演化机制展开了很多深入的研究,主要集中在面向服务、构件等方面。
70 计 算 机 工 程 2012年1月20日
的单元,也是独立部署、测试的基本单位,每个模块以配置文件为基本的识别因素。配置文件是模块内各对象依赖的描述配置体,它的引入仍然是一种低层次上的解耦,配置的对象在运行过程中仍不能进行动态替换,由此提出体系结构上的解耦机制。
图1 开发模式与体系结构
如图1所示,在体系结构上引入实例管理中心和演化代理2个角色。实例管理中心负责模块之间依赖对象的注册工作,同时它以接口的形式为其他模块提供对象引用,在引用的过程中可以根据一定的选择规则进行实例的提取。演化代理位于每一个模块中,它依据配置信息自动创建实例注册和实例引用的代理,通过这个中介的作用,注册者可以动态地进行增加、替换和删除,而引用者无需关注这些处理(如图2所示)。
第38卷 第2期
仇书礼,初佃辉,孟凡超:基于
Spring
的构件动态演化机制
71
4 基于Spring的构件动态演化实现
要实现动态演化,第一要务是要能控制Spring容器,经过对源代码的分析,归纳出以下要点:
(1)获取Spring容器:创建一个Servlet监听器,该监听器从ServletContext中获取容器;
实例:获取容器的具有自动织入实例功能的实例工厂,随后为工厂创建一个配置阅读器,该阅读器可完成配置文件的读取及实例创建的工作,该工厂的removeBeanDefinition方法可根据名称删除实例。
在控制住Spring容器的基础上,即可对演化机制进行实(2)在Spring容器中动态增加实例配置文件和动态删除现,如图4所示。


发布评论