一种支持软件动态更新的服务构件架构方法

文档序号:6505715阅读:242来源:国知局
一种支持软件动态更新的服务构件架构方法
【专利摘要】本发明公开了一种支持软件动态更新的服务构件架构方法。本发明通过扩展现有的服务构件架构SCA(Service?ComponentArchitecture)规范,增加了支持动态更新的事务模型、构件生命周期模型,最终在SCA的一个开源实现Apache?Tuscany上实现支持动态更新的Conup平台,使其能一致、高效地支持构件动态更新。
【专利说明】一种支持软件动态更新的服务构件架构方法
【技术领域】
[0001]本发明涉及一种支持软件动态更新的服务构件架构技术,属于软件维护【技术领域】。
【背景技术】
[0002]基于构件的软件开发CBSD (Component-Based Software Development)技术被认为是提高软件开发效率和质量的有效途径,并获得广泛的关注与应用,产生了诸多构件模型和构件框架。但随着Internet/WWW逐步演化为开放的计算平台,源于传统静态环境的CBSD难以充分应对开放网络环境下用户需求和软件平台的动态、多变性。
[0003]应对需求和环境变更的一个有效途径是允许运行中的构件系统能够动态地更新。主流的构件模型和构件框架对动态更新支持薄弱,而学术界研究所假设的模型过于简化难以实际应用。为此,本发明扩展了服务构件架构SCA(Service Component Architecture),使其能完整的支持高效、一致的构件动态更新。

【发明内容】

[0004]本发明所要解决的技术问题是在不中断系统正常运行的需求下,提供一种支持构件动态更新的方法,使得能够支持高效、一致的构件动态更新。
[0005]本发明所述的一种支持软件动态更新的服务构件架构方法,包含如下特征:
[0006]步骤1、为分布式事务定义具体的事务状态、事务状态跳转语义以及事务状态传递等,以抽象的描述构件业务逻辑在运行时刻的进展情况,从而可以根据当前构件上的事务上下文判断构件是否达到可更新的安全状态;
[0007]步骤2、当事务依赖信息和状态发生改变时,通知事务管理器进行处理;
[0008]步骤3、定义构件生命周期器,支持完整的构件更新过程,它包括了更新所需的构件状态、构件状态跳转语义;
[0009]步骤4、当目标构件收到更新请求,通知构件生命周期管理器;
[0010]步骤5、更新完成,返回更新结果。
[0011]上述步骤I具体包括:
[0012]步骤1-1、将分布式事务区分为根事务和本地事务;
[0013]步骤1-2、对于根事务,当根构件接收到来自外界客户端的业务逻辑请求时,一旦该请求被允许在根构件上运行,则该事务进入Initiated状态;当根事务一旦开始执行,该事务即进入RootTxStarted状态;在根构件恰好准备第一次调用远程构件之前,该事务即被标记为FirstRequest,其含义为根构件将要第一次发生远程调用;根事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,根事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦根事务正在等待的一个远程事务结束返回,根事务即转入RemoteTxEnded状态,用于标识根事务刚结束了一次远程调用;根事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当根事务结束时,它便转入Ended状态;
[0014]步骤1-3、对于本地事务,当一个构件被其他构件要求在本地发起一个子事务时,一旦该子事务被允许在本地发起,该本地事务即进入Initiated状态;当构件上的本地子事务一旦开始执行,该事务即被标记为LocalTxStarted状态;本地事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,本地事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦本地事务正在等待的一个远程事务结束返回,该事务即转入RemoteTxEnded状态,用于标识事务刚结束了一次远程调用;本地事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当本地事务结束时,它便转入Ended状态;本地事务进入Ended状态,贝丨J意味着执行结束返回,该状态将会触发父事务进入RemoteTxEnded状态;
[0015]步骤1-4、对于事务状态传递,当一个根事务在发起远程子事务时,需要将当前事务标记为RemoteTxStarted状态,将欲发起的子事务标记为Initiated状态并保存该子事务所在的构件,将相关的根事务信息和当前事务信息(即子事务的父事务信息)传递给相应的远程事务;当一个父事务在发起远程事务时,需要将当前事务标记为RemoteTxStarted状态,将欲发起的子事务标记为Initiated状态并保存该子事务所在的构件,将相关的根事务信息以及当前事务信息传递给相应的远程事务;当一个本地子事务Initiated时,需要为该本地事务建立事务上下文,保存从父事务传递过来的根事务信息、父事务信息、当前事务信息等;当一个本地子事务Ended时,需要将当前事务标记为Ended状态,并通知其父事务该子事务的结束;
[0016]步骤1-5、对于任一事务,均能形成其事务上下文,具体包括当前事务的状态、构件依赖信息、根事务信息、父事务信息以及所有的子事务状态。
[0017]上述步骤2具体步骤包括:
[0018]步骤2-1、当事务依赖信息发生变化时,它应通知事务依赖管理器(TxD印Monitor)进行存储变化的构件依赖信息;
[0019]步骤2-2、当事务状态发生变化时,它应通知事务生命周期管理器(TxLifeManager),事务生命周期管理器通过调用动态依赖管理器(DynamicDependenceManager)来调用当前配置的动态更新算法,进而允许更新能够根据事务状态信息动态的维护依赖信息,并借助通信器中的依赖通知服务(DepNotifyService)通知其他构件事务依赖信息的变化。
[0020]上述步骤3具体包括:
[0021]步骤3-1、将需要执行更新的构件称为目标构件,将为完成更新操作而受目标构件影响的构件统称为非目标构件,并分别为目标构件和非目标构件定义与动态更新相关的构件生命周期;
[0022]步骤3-2、对于构件状态及跳转语义,构件在没有动态更新请求的正常运行状态称之为Normal状态;目标构件从收到动态更新请求至构件采用合适的动态更新算法“按需(Ondemand) ”进行算法初始化、建立可能需要的动态依赖信息完成,将这中间的状态称之为Ondemand状态,对于Ondemand过程所执行的具体操作、依赖信息的建立与维护往往依赖于特定的动态更新算法;构件经过Ondemand设置过程之后,构件即进入Valid状态,在此状态下,构件认为接收到了动态更新请求,需要为动态更新做准备,因此构件将会根据当前采用的动态更新算法,为当前每个正在运行的事务维护事务信息和动态依赖信息;当目标构件进入Valid状态时,还存在后续状态需要转换,而对非目标构件,在进入Valid状态后,便只需一直维护事务上下文、动态依赖信息,直至目标构件通知其远程更新操作完成,才将其转换为Normal状态;构件上正在运行的事务必须满足一定的条件才允许对构件进行更新,将满足更新条件的时刻称为安全点,当允许更新时,称构件达到了 Free状态;当构件达到Free状态后,意味着可以对其执行更新操作,在开始执行更新时,需要将构件状态转换为Updating状态;更新操作完成时,需要清除为动态更新所分配的对象等,在清除工作完成时,目标构件即转入Updated状态;动态更新过程中,非目标构件往往会建立与目标构件之间的依赖关系,并且非目标构件会进入非正常运行状态,因此在更新完成之后,目标构件需要首先激活被其影响的非目标构件集合,然后目标构件将自身激活并转为Normal状态;当非目标构件收到来自目标构件的激活请求时,将清除已经维护的并放弃正在维护的动态依赖信息,然后将自身转入Normal状态。
[0023]上述步骤4具体步骤包括:
[0024]步骤4-1、当目标构件的构件更新服务(ComponentUpdateService)收到更新请求时,通知其构件生命周期管理器(CompLifecycleManager),构件生命周期管理器通过调用按需设置管理器(OndemandSetupHelper),进而调用当前配置的动态更新算法的按需设置(OndemandSetup)进行Ondemand过程,此处构件之间的Ondemand过程的协同通过通信器中的按需协议服务(OndemandProtocol)完成;
[0025]步骤4-2、按需设置完成后,动态依赖管理器将根据当前配置的算法和达到Free状态的策略,使得构件达到Free状态;
[0026]步骤4-3、在构件达到Free状态后,将触发构件生命周期管理器执行构件更新;
[0027]步骤4-4、更新完成之后,动态依赖管理器将调用更新算法激活非目标构件,最终激活目标构件自身。
【专利附图】

【附图说明】
[0028]图1显示了本发明的根事务状态定义与跳转语义。
[0029]图2显示了本地事务状态定义与跳转语义。
[0030]图3显示了目标构件的状态定义与跳转语义。
[0031]图4显示了非目标构件的状态定义与跳转语义。
[0032]图5显示了本发明增加的动态更新模块。
【具体实施方式】
[0033]以下结合附图和具体实施例对本发明作进一步详细说明。
[0034]对于更新的目标构件,其构件生命周期存在的状态与跳转语义如图3所示,具体解释如下:[0035]I)构件没有收到动态更新请求时,处于Normal状态;
[0036]2)构件收到更新请求时,进行更新初始化的过程中,处于Ondemand状态;
[0037]3)更新初始化完成,构件进入Valid状态;
[0038]4)构件达到可以进行更新的安全状态,构件进入Free状态;
[0039]5)正在执行更新过程中,构件处于Updating状态;
[0040]6)更新完成、但在清除更新相关的数据过程中,构件处于Updated状态。
[0041]对于非目标构件,其构件生命周期存在的状态与跳转语义如图4所示,具体解释如下:
[0042]I)构件没有收到更新请求,也没有收到来自其他构件的Ondemand设置请求,则构件处于Normal状态;
[0043]2)构件收到来自其他构件的Ondemand设置请求,则构件进入Ondemand状态;
[0044]3) Ondemand设置完成,则构件进入Valid状态。
[0045]在没有动态更新请求时,构件系统的运行特征如下:
[0046]I)所有构件均处于Normal状态;
[0047]2)将分布式事务区分为根事务和本地事务;
[0048]3)对于根事务,其存在的事务状态及状态跳转语义具体如图1所示。当根构件接收到来自外界客户端的业务逻辑请求时,一旦该请求被允许在根构件上运行,则该事务进入Initiated状态;当根事务一旦开始执行,该事务即进入RootTxStarted状态;在根构件恰好准备第一次调用远程构件之前,该事务即被标记为FirstRequest,其含义为根构件将要第一次发生远程调用;根事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,根事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦根事务正在等待的一个远程事务结束返回,根事务即转入RemoteTxEnded状态,用于标识根事务刚结束了一次远程调用;根事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当根事务结束时,它便转入Ended状态;
[0049]4)对于本地事务,其存在的事务状态及状态跳转语义具体如图2所示。当一个构件被其他构件要求在本地发起一个子事务时,一旦该子事务被允许在本地发起,该本地事务即进入Initiated状态;当构件上的本地子事务一旦开始执行,该事务即被标记为LocalTxStarted状态;本地事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,本地事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦本地事务正在等待的一个远程事务结束返回,该事务即转入RemoteTxEnded状态,用于标识事务刚结束了 一次远程调用;本地事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当本地事务结束时,它便转入Ended状态;本地事务进入Ended状态,则意味着执行结束返回,该状态将会触发父事务进入RemoteTxEnded状态;[0050]5)对于任一事务,当其状态发生变化时,只会调用事务管理器维护事务依赖信息和事务状态?目息,如图5所;
[0051]6)对于任一事务,当其试图发起远程调用时,实现的trace拦截器会在远程调用请求中附加当前事务信息、根事务信息;当一个构件接收到事务请求时,trace拦截器从请求消息中读取本地事务的父事务、根事务信息,将其作为本地事务上下文的部分信息。
[0052]当目标构件收到更新请求时,其具体步骤如下:
[0053]I)目标构件收到更新请求后,构件生命周期管理器首先加载新版本构件并生成与更新相关的对象;
[0054]2)目标构件的构件生命周期管理器会通过SPI调用动态依赖管理器,动态依赖管理器则调用当前配置的动态更新算法相关的Ondemand过程实现,进行Ondemand设置,最终目标构件与非目标构件均进入Valid状态;
[0055]3)目标构件进入Valid状态后,会根据当前配置的更新策略,使得目标构件达到允许更新的Free状态(在达到Free状态的过程中,trace拦截器将会通过动态依赖管理器间接调用动态更新算法以判断是否需要对特定请求进行拦截);
[0056]4)目标构件达到Free状态后,构件生命周期管理器负责对构件执行更新、清除与更新相关的?目息和数据等,最终构件达到Updated状态;
[0057]5)目标构件更新、清除完成后,向非目标构件发送激活通知,非目标构件和目标构件依次将其转为Normal状态,至此更新完成;
[0058]6)从Free状态至Normal状态过程中,trace通过动态依赖管理器间接调用动态更新算法以判断是否需要对特定请求进行拦`截。
[0059]以上实施例只是对于本发明的部分功能进行描述,但实施例和附图并不是用来限定本发明的。在不脱离本发明之精神和范围内,所做的任何等效变化或润饰,同样属于本发明之保护范围。因此本发明的保护范围应当以本申请的权利要求所界定的内容为标准。
【权利要求】
1.一种支持软件动态更新的服务构件架构方法,其特征在于: 步骤1、为分布式事务定义具体的事务状态、事务状态跳转语义以及事务状态传递等,以抽象的描述构件业务逻辑在运行时刻的进展情况,从而可以根据当前构件上的事务上下文判断构件是否达到可更新的安全状态; 步骤2、当事务依赖信息和状态发生改变时,通知事务管理器进行处理; 步骤3、定义构件生命周期器,支持完整的构件更新过程,它包括了更新所需的构件状态、构件状态跳转语义; 步骤4、当目标构件收到更新请求,通知构件生命周期管理器; 步骤5、更新完成,返回更新结果。
2.根据权利要求1所述的服务构件架构方法,其特征在于,步骤I具体包括: 步骤1-1、将分布式事务区分为根事务和本地事务; 步骤1-2、对于根事务,当根构件接收到来自外界客户端的业务逻辑请求时,一旦该请求被允许在根构件上运行,则该事务进入Initiated状态;当根事务一旦开始执行,该事务即进入RootTxStarted状态;在根构件恰好准备第一次调用远程构件之前,该事务即被标记为FirstRequest,其含义为根构件将要第一次发生远程调用;根事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,根事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦根事务正在等待的一个远程事务结束返回,根事务即转入RemoteTxEnded状态,用于标识根事务刚结束了一次远程调用;根事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当根事务结束时,它便转入Ended状态; 步骤1-3、对于本地事务,当一个构件被其他构件要求在本地发起一个子事务时,一旦该子事务被允许在本地发起,该本地事务即进入Initiated状态;当构件上的本地子事务一旦开始执行,该事务即被标记为LocalTxStarted状态;本地事务可能需要向远程构件发起远程事务请求,一旦该请求发送出去,本地事务即转入RemoteTxStarted状态,用于标识当前构件正在等待一个远程事务结束的过程中;一旦本地事务正在等待的一个远程事务结束返回,该事务即转入RemoteTxEnded状态,用于标识事务刚结束了一次远程调用;本地事务发起的远程事务结束返回则意味着构件过去曾使用过某个远程构件,即该事务对构件的动态依赖关系发生了变化,事务进入DependenceChanged,在该状态下,如果该构件后面还会发起其他远程调用时,则该事务的后续状态会转为RemoteTxStarted,否则该事务等待进入Ended状态;当本地事务结束时,它便转入Ended状态;本地事务进入Ended状态,则意味着执行结束返回,该状态将会触发父事务进入RemoteTxEnded状态; 步骤1-4、对于事务状态传递,当一个根事务在发起远程子事务时,需要将当前事务标记为RemoteTxStarted状态,将欲发起的子事务标记为Initiated状态并保存该子事务所在的构件,将相关的根事务信息和当前事务信息(即子事务的父事务信息)传递给相应的远程事务;当一个父事务在发起远程事务时,需要将当前事务标记为RemoteTxStarted状态,将欲发起的子事务标记为Initiated状态并保存该子事务所在的构件,将相关的根事务信息以及当前事务信息传递给相应的远程事务;当一个本地子事务Initiated时,需要为该本地事务建立事务上下文,保存从父事务传递过来的根事务信息、父事务信息、当前事务信息等;当一个本地子事务Ended时,需要将当前事务标记为Ended状态,并通知其父事务该子事务的结束; 步骤1-5、对于任一事务,均能形成其事务上下文,具体包括当前事务的状态、构件依赖信息、根事务信息、父事务信息以及所有的子事务状态。
3.根据权利要求1所述的服务构件架构方法,其特征在于,步骤2具体步骤包括: 步骤2-1、当事务依赖信息发生变化时,它应通知事务依赖管理器(TxDepMonitor)进行存储变化的构件依赖信息; 步骤2-2、当事务状态发生变化时,它应通知事务生命周期管理器(TxLifeManager),事务生命周期管理器通过调用动态依赖管理器(DynamicDependenceManager)来调用当前配置的动态更新算法,进而允许更新能够根据事务状态信息动态的维护依赖信息,并借助通信器中的依赖通知服务(DepNotifyService)通知其他构件事务依赖信息的变化。
4.根据权利要求1所述的服务构件架构方法,其特征在于,步骤3具体包括: 步骤3-1、将需要执行更新的构件称为目标构件,将为完成更新操作而受目标构件影响的构件统称为非目标构件,并分别为目标构件和非目标构件定义与动态更新相关的构件生命周期;` 步骤3-2、对于构件状态及跳转语义,构件在没有动态更新请求的正常运行状态称之为Normal状态;目标构件从收到动态更新请求至构件采用合适的动态更新算法“按需(Ondemand) ”进行算法初始化、建立可能需要的动态依赖信息完成,将这中间的状态称之为Ondemand状态,对于Ondemand过程所执行的具体操作、依赖信息的建立与维护往往依赖于特定的动态更新算法;构件经过Ondemand设置过程之后,构件即进入Valid状态,在此状态下,构件认为接收到了动态更新请求,需要为动态更新做准备,因此构件将会根据当前采用的动态更新算法,为当前每个正在运行的事务维护事务信息和动态依赖信息;当目标构件进入Valid状态时,还存在后续状态需要转换,而对非目标构件,在进入Valid状态后,便只需一直维护事务上下文、动态依赖信息,直至目标构件通知其远程更新操作完成,才将其转换为Normal状态;构件上正在运行的事务必须满足一定的条件才允许对构件进行更新,将满足更新条件的时刻称为安全点,当允许更新时,称构件达到了 Free状态;当构件达到Free状态后,意味着可以对其执行更新操作,在开始执行更新时,需要将构件状态转换为Updating状态;更新操作完成时,需要清除为动态更新所分配的对象等,在清除工作完成时,目标构件即转入Updated状态;动态更新过程中,非目标构件往往会建立与目标构件之间的依赖关系,并且非目标构件会进入非正常运行状态,因此在更新完成之后,目标构件需要首先激活被其影响的非目标构件集合,然后目标构件将自身激活并转为Normal状态;当非目标构件收到来自目标构件的激活请求时,将清除已经维护的并放弃正在维护的动态依赖信息,然后将自身转入Normal状态。
5.根据权利要求1所述的服务构件架构方法,其特征在于,步骤4具体包括: 步骤4-1、当目标构件的构件更新服务(ComponentUpdateService)收到更新请求时,通知其构件生命周期管理器(CompLifecycleManager),构件生命周期管理器通过调用按需设置管理器(OndemandSetupHelper),进而调用当前配置的动态更新算法的按需设置(OndemandSetup)进行Ondemand过程,此处构件之间的Ondemand过程的协同通过通信器中的按需协议服务(OndemandProtocol)完成; 步骤4-2、按需设置完成后,动态依赖管理器将根据当前配置的算法和达到Free状态的策略,使得构件达到Free状态; 步骤4-3、在构件达到Free状态后,将触发构件生命周期管理器执行构件更新; 步骤4-4、更新完成之后,动态依赖 管理器将调用更新算法激活非目标构件,最终激活目标构件自身。
【文档编号】G06F9/44GK103500084SQ201310290619
【公开日】2014年1月8日 申请日期:2013年7月11日 优先权日:2013年7月11日
【发明者】吕建, 马晓星, 曹春 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1