一种基于事务的构件在线演化方法

文档序号:6335030阅读:260来源:国知局
专利名称:一种基于事务的构件在线演化方法
技术领域
本发明涉及一种基于事务的构件在线演化技术,属于软件维护技术领域。
背景技术
软件构件作为一种可以复用、组装的软件资源,能够降低软件系统的开发成本,缩 短软件产品推向市场的时间,因此被广泛地用来构建应用系统。同时,一些关键领域的软件 系统要求提供不间断的服务,对这些软件系统中构件进行升级演化必须在不中断运行系统 的前提下进行,即在线演化。现有的软件构件技术一般不支持在线演化,只有少数的构件技术支持在线演化, 但其演化过程只考虑单个构件的状态,缺乏对多个构件之间事务状态的考察。为此,本发明 基于相关的多个构件之间的事务关系,专门提出一种构件在线演化方法,该方法在支持构 件在线演化的同时,应用事务通信算法,能够保障更新过程的系统一致性。

发明内容
本发明所要解决的技术问题是在系统不间断运行的需求下,提供一种构件在线演 化的方法,使得系统不需要暂停服务既可以更新功能,同时保障这一演化过程不会对业务 过程不产生破坏性效果。本发明所述的基于事务的构件在线演化方法,它包含以下步骤
1) 构件部署器首先将构件部署到支持在线演化的构件容器(DUC)中,该构件容器在 构件实例基础上增加了演化管理器、通信器、依赖管理器以及事务管理器部件,以支持构件 动态演化。传统构件容器一般包括了构件实例,容器负责管理实例。与传统构件容器相比, DUC增加了演化管理器、通信器、依赖管理器以及事务管理器部件,以支持构件动态演化。2)构件管理器向DUC发送演化命令,DUC负责实施演化行为; 3) DUC向构件管理器返回演化结果。上述步骤1)中部署器部署构件的具体步骤包括 1. 1)解析构件部署信息,生成DUC,为其配置各种服务;
1. 2)解析构件的事务元信息,生成事务管理器并对事务管理器进行初始化,事务管理 器在初始化时根据事务元信息生成一个随着构件的执行会进行状态自动跳转的事务状态 机,事务状态机中包含若干不同的事务状态以及事务状态之间跳转的条件,每一个事务状 态包含了一个一致性事务列表,该列表包含构件在此状态之前和之后都要使用的其他构件 服务的接口;
1. 3)初始化依赖管理器,并根据构件所依赖的接口将自己的构件对象注册到其所依赖 构件的依赖管理器中;
1. 4)初始化通信器,由通信器构造一个用于存储被封锁调用的调用列表,包含时间和调用类型的对象。上述步骤2) DUC实施演化行为的过程为
2. 1 )DUC将演化命令交给演化管理器,演化管理器收到演化命令之后,首先查询依赖管 理器,获取当前系统中所有需要此演化构件提供服务的依赖构件列表;
2. 2)演化管理器判断依赖构件列表是否为空,是则转到2. 7),否则转到2. 3); 2. 3)演化管理器向演化构件与依赖构件的通信器发送封锁命令,通信器收到封锁命令 后对于所有对构件的请求调用,获取其调用时间,将时间和调用对象存进封锁调用列表;
2. 4)演化管理器判断演化构件是否达到事务一致状态,如果是则转到2. 7),否则转到 2. 5);
2. 5)演化管理器判断演化构件与依赖构件的通信器中存储封锁调用的列表是否都为 空,是的话等待一定时间,转到2. 4),否则转到2. 6);
2. 6)演化管理器从演化构件与依赖构件的通信器存储封锁调用的列表中取一个最早 被封锁的调用执行,转到2. 4);
2. 7)演化管理器向构件实例执行演化命令。上述步骤2. 4)中判断事务一致状态需要依赖构件的事务管理器获取构件内部一 致性事务状态。其具体步骤是
2. 4. 1)演化管理器查询演化构件的事务管理器中是否存在正在运行中的事务,如果有 的话返回否,否则转到2. 4.2);
2. 4. 2)演化管理器查询依赖管理器,获取当前系统中所有需要此演化构件提供服务的 依赖构件列表,对于其中的每一个依赖构件,执行2. 4. 3);
2. 4. 3)演化管理器查询依赖构件的事务管理器中所有的一致性事务接口列表,如果结 果为空,转到2. 4. 6),否则,转到2. 4.4);
2. 4. 4)对于一致性事务接口列表中的每一个接口,执行2. 4. 5); 2. 4. 5)如果此接口与演化构件所提供的接口相匹配,返回否; 2. 4. 6)返回是。上述步骤2. 4. . 1)中,事务管理器接到演化管理器发出的查询命令之后的步骤是 查询其中的所有事务状态机,如果存在未处于开始状态的事务,返回是,否则返回否。上述步骤2. 4. 3)中,事务管理器接到演化管理器发出的查询命令之后,步骤如 下
2. 4. 3.1)查询事务管理器中所有未处于开始状态的事务,如果不存在,返回空列表,否 则转到2. 4. 3.2);
2. 4. 3.2)查询事务其所处状态的一致性事务列表,如果不为空,返回列表给演化管理 器,否则返回空列表。步骤2. 6)中演化管理器执行最早被封锁的调用的步骤是
2. 6. 1)演化管理器向演化构件以及依赖构件的通信器查询它们的封锁调用列表 中最早的调用;
2. 6.2)通信器收到查询命令之后检查其封锁调用列表,如果为空,返回空,否则比 较封锁调用列表中所有的调用的封锁时间,返回最早封锁的调用及其封锁时间; 2. 6. 3)演化管理器比较这些调用的封锁时间,得到最早被封锁的调用。
5
2.6.4)演化管理器通知此调用的通信器释放并执行此调用;
2. 6. 5)通信器收到此命令之后,从封锁调用列表中删除此调用,然后执行这个调用。本发明与现有的技术相比,其显著优点是
1)动态性本发明实现了构件模型的开放性,管理用户可以通过控制器动态修改构 件的状态,可以在持续当前系统运行的前提下,对构件的内部结构、行为等侧面进行动态更 新,达到优化服务质量、消除系统缺陷的效果,从而大大增加软件系统的服务,为关键系统 提供不间断的服务;
2)安全性可适应构件在使用基于事务通信算法的构件交互协议,通过细粒度的状 态控制保证动态更新的安全性;
3)扩展性可适应构件控制层中的控制器可以由开发人员配置,因此用户可以按照 自己的需求手动编写自定义的控制器加入构件中完成运行时刻任意的更新。


图1显示了本发明的参与者包括构件部署器、构件管理器和DUC的交互顺序, 图2显示了构件演化管理器执行的演化流程图。
具体实施例方式本实施例给出一个在JBoss应用服务器上的实现。JBoss应用服务器处于操作系统之上,应用系统之下,为EJB等JavaEE构件提供 支持。基于Java的构件为EJB (Enterprise JavaBean)构件,EJB构件由构件容器进行管 理。JBoss中支持动态增加、删除或者替换构件构件的热部署演化,但这种热部署并不考虑 其他构件事务状态。完成构件演化需要定义新的容器DUC,该容器继承了 JBoss中的EJBContainerJI 加了用于支持动态演化的演化管理器、通信器、依赖管理器以及事务管理器部件。演化管理器负责接收构件管理器的演化命令,并实施演化操作。通信器实现为容器的拦截器(Interc印tor),在正常状态下拦截器对调用不作处 理,继续拦截器链的执行,在封锁状态下,将调用线程挂起等待,并将调用存入封锁调用列 表。依赖管理器在构件部署时初始化为空列表,并向其依赖构件的依赖管理器中注册 自己,以表明其依赖关系。事务管理器在部署时刻根据构件事务配置信息初始化,生成事务状态机,事务状 态机的默认状态为初始状态。随着构件业务逻辑的运行,触发状态的跳转。事务管理器还 需要负责向演化管理器提供构件的事务信息。下面以一个网上购物系统在结算购物车中商品时的替换购物车构件的过程为例 来说明本发明的一次执行过程。Client代表正在购物的顾客,Shopping_Cart代表包含了 顾客所选商品的购物车。Client在进行结算的业务逻辑如表1所示
表1 购物顾客的结算业务逻辑
权利要求
一种基于事务的构件在线演化方法,其特征在于它包含以下步骤1)构件部署器首先将构件部署到支持在线演化的构件容器,即DUC中,该DUC在构件实例基础上增加了演化管理器、通信器、依赖管理器以及事务管理器部件,以支持构件动态演化; 2)构件管理器向DUC发送演化命令,DUC负责实施演化行为;3)DUC向构件管理器返回演化结果。
2.根据权利要求1所述的基于事务的构件在线演化方法,其特征在于步骤1)中构件部 署器部署构件的具体步骤包括1. 1)解析构件部署信息,生成DUC,为其配置各种服务;1. 2)解析构件的事务元信息,生成事务管理器并对事务管理器进行初始化,事务管理 器在初始化时根据事务元信息生成一个随着构件的执行会进行状态自动跳转的事务状态 机,事务状态机中包含若干不同的事务状态以及事务状态之间跳转的条件,每一个事务状 态包含了一个一致性事务列表,该列表包含构件在此状态之前和之后都要使用的其他构件 服务的接口;1. 3)初始化依赖管理器,并根据构件所依赖的接口将自己的构件对象注册到其所依赖 构件的依赖管理器中;1.4)初始化通信器,由通信器构造一个用于存储被封锁调用的调用列表,包含时间和 调用类型的对象。
3.根据权利要求1所述的基于事务的构件在线演化方法,其特征在于步骤2)DUC实施 演化行为的过程为2.1 )DUC将演化命令交给演化管理器,演化管理器收到演化命令之后,首先查询依赖管 理器,获取当前系统中所有需要此演化构件提供服务的依赖构件列表;2. 2)演化管理器判断依赖构件列表是否为空,是则转到2. 7),否则转到2. 3);2. 3)演化管理器向演化构件与依赖构件的通信器发送封锁命令,通信器收到封锁命令 后对于所有对构件的请求调用,获取其调用时间,将时间和调用对象存进封锁调用列表;2. 4)演化管理器判断演化构件是否达到事务一致状态,如果是则转到2. 7),否则转到 2. 5);2. 5)演化管理器判断演化构件与依赖构件的通信器中存储封锁调用的列表是否都为 空,是的话等待一定时间,转到2. 4),否则转到2. 6);2. 6)演化管理器从演化构件与依赖构件的通信器存储封锁调用的列表中取一个最早 被封锁的调用执行,转到2. 4);2. 7)演化管理器向构件实例执行演化命令。
4.根据权利要求3所述的基于事务的构件在线演化方法,其特征在于步骤2.4)中一致 性事务状态的判断具体步骤是`2. 4. 1)演化管理器查询演化构件的事务管理器中是否存在正在运行中的事务,如果 有的话返回否,否则转到2. 4.2);`2. 4. 2)演化管理器查询依赖管理器,获取当前系统中所有需要此演化构件提供服务的 依赖构件列表,对于其中的每一个依赖构件,执行2. 4. 3);`2. 4. 3)演化管理器查询依赖构件的事务管理器中所有的一致性事务接口列表,如果结果为空,转到2. 4. 6),否则,转到2. 4. 4);2. 4. 4)对于一致性事务接口列表中的每一个接口,执行2. 4. 5); 2. 4. 5)如果此接口与演化构件所提供的接口相匹配,返回否; 2. 4. 6)返回是。
5.根据权利要求4所述的基于事务的构件在线演化方法,其特征在于步骤2.4. 1)中, 事务管理器接到演化管理器发出的查询命令之后的步骤是查询其中的所有事务状态机, 如果存在未处于开始状态的事务,返回是,否则返回否。
6.根据权利要求4 所述的基于事务的构件在线演化方法,其特征在于步骤2.4. 3)中, 事务管理器接到演化管理器发出的查询命令之后,步骤如下2. 4. 3.1)查询事务管理器中所有未处于开始状态的事务,如果不存在,返回空列表,否 则转到2. 4. 3.2);2. 4. 3.2)查询事务其所处状态的一致性事务列表,如果不为空,返回列表给演化管理 器,否则返回空列表。
7.根据权利要求3所述的基于事务的构件在线演化方法,其特征在于步骤2.6)中演化 管理器执行最早被封锁的调用的步骤是,2. 6. 1)演化管理器向演化构件以及依赖构件的通信器查询它们的封锁调用列表中最 早的调用;,2. 6.2)通信器收到查询命令之后检查其封锁调用列表,如果为空,返回空,否则比较 封锁调用列表中所有的调用的封锁时间,返回最早封锁的调用及其封锁时间; 2. 6. 3)演化管理器比较这些调用的封锁时间,得到最早被封锁的调用; 2.6.4)演化管理器通知此调用的通信器释放并执行此调用; 2. 6. 5)通信器收到此命令之后,从封锁调用列表中删除此调用,然后执行这个调用。
全文摘要
本发明公开了一种基于事务的构件在线演化方法,该方法通过扩展现有构件容器,增加演化管理器、通信器、依赖管理器以及事务管理器等部件,在此基础上建立起基于多构件事务状态的构件演化管理方法,从而保证了演化过程系统的一致性。本发明实现了构件模型的开放性,管理用户可以通过控制器动态修改构件的状态,可以在持续当前系统运行的前提下,对构件的内部结构、行为等侧面进行动态更新,达到优化服务质量、消除系统缺陷的效果,从而大大增加软件系统的服务,为关键系统提供不间断的服务,并具有安全性和扩展性。
文档编号G06F9/445GK101963913SQ20101053057
公开日2011年2月2日 申请日期2010年11月4日 优先权日2010年11月4日
发明者吕建, 曹春, 马晓星 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1