基于Spring 的构件动态演化的构件动态演化机制机制
仇书礼仇书礼,,初佃辉初佃辉,,孟凡超
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/j.issn.1000-3428.2012.02.022
计  算  机  工  程 Computer Engineering 第38卷  第2期 V ol.38    No.2 2012年1月
January 2012
·软件技术与数据库软件技术与数据库·· 文章编号文章编号::1000—3428(2012)02—0069—03 文献标识码文献标识码::A
中图分类号中图分类号::TP311.5
1  概述
瞬息万变的市场要求企业的灵魂、核心的业务应用系统
必须迅速地适应需求变化,能够根据需求的变化快速响应需求,变更应用系统[1],同时,全天候的业务执行又要求企业软件能够7×24 h 地运行,这些都凸现出动态演化在企业软件系统中的重要性。演化性是软件的基本属性[2],动态演化是指软件在执行期间的软件演化,它使软件不会存在暂时的失效,具有不间断服务的明显优点[3]。
Spring 框架是目前Java 企业软件开发领域最流行的软件开发技术,它是一个轻量级的控制反转和面向切面的开源容器框架。控制反转,又称依赖注入,是Spring 框架的核心,即将所有对象创建的工作交由第三方(Spring 容器)来控制。对控制反转的原生态支持使Spring 容器具有强大的黏附力,任何一个Java 应用都可以轻易地集成到Spring 容器中,几乎所有的Java 开源项目都提供了对Spring 的支持。面向切面  是Spring 框架的另一重要特点,它使Spring 容器中的所有Java 对象能够享受统一的无缝的切入服务,如日志、事务等。
Spring 框架给企业软件开发者带来了很大便利,然而它仅将Java 对象间的关系解耦,却没有提供对动
态演化的支 持,造成了企业系统软件不得不在停止之后再进行升级,影响了企业的服务质量和服务效率。所以,本文针对Spring 的这个不足,提出基于Spring 的动态演化机制,并对这个机制进行了实现。
2  相关研究工作
目前,研究人员对软件的演化机制展开了很多深入的研
究,主要集中在面向服务、构件等方面。
在面向服务方面,文献[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@163
70 计算机工程2012年1月20日的单元,也是独立部署、测试的基本单位,每个模块以配置
文件为基本的识别因素。配置文件是模块内各对象依赖的描
述配置体,它的引入仍然是一种低层次上的解耦,配置的对
象在运行过程中仍不能进行动态替换,由此提出体系结构上
的解耦机制。
图1 开发模式与体系结构
如图1所示,在体系结构上引入实例管理中心和演化代
理2个角。实例管理中心负责模块之间依赖对象的注册工
作,同时它以接口的形式为其他模块提供对象引用,在引用
的过程中可以根据一定的选择规则进行实例的提取。演化代
理位于每一个模块中,它依据配置信息自动创建实例注册和
实例引用的代理,通过这个中介的作用,注册者可以动态地
进行增加、替换和删除,而引用者无需关注这些处理(如图2
所示)。
第38卷  第2期                                                                                            71
仇书礼,初佃辉,孟凡超:基于Spring 的构件动态演化机制 4  基于Spring 的构件动态演化实现
要实现动态演化,第一要务是要能控制Spring 容器,经过对源代码的分析,归纳出以下要点:
(1)获取Spring 容器:创建一个Servlet ,该从ServletContext 中获取容器;
(2)在Spring 容器中动态增加实例配置文件和动态删除实例:获取容器的具有自动织入实例功能的实例工厂,随后为工厂创建一个配置阅读器,该阅读器可完成配置文件的读取及实例创建的工作,该工厂的removeBeanDefinition 方法可根据名称删除实例。
在控制住Spring 容器的基础上,即可对演化机制进行实现,如图4所示。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。