软件动态更新中确定实例对象转换次序的方法及系统技术方案

技术编号:2916965 阅读:296 留言:0更新日期:2012-04-11 18:40
一种计算机应用技术领域的软件动态更新中确定实例对象转换次序的方法及系统,本发明专利技术方法中,获取对象引用信息和引用终止信息;比较并删除冗余的对象引用信息以及互相匹配的两类信息;区分对象引用属性,得到系统运行时所有活跃对象的依赖关系信息;运用类型检查规则验证更新的完整性;验证安全对象更新条件,得到合理的构件更新次序。本发明专利技术的系统包括:服务调用监听模块、引用信息更新模块、构件依赖分析模块、完整性验证模块、更新次序选择模块。本发明专利技术能够在系统运行过程中动态获取构件实例对象的动态依赖关系,并在构件动态更新时据此给出合理的实例对象转换次序。

【技术实现步骤摘要】

本专利技术涉及一种计算机应用
的方法,具体是一种软件动态更新中确定实例对象转换次序的方法及系统
技术介绍
软件构件技术的产生,使得可以依据一些关注分离规则将一个完整的应用程序划分成适当数目的软件构件模块。这些构件可以在不同的环境下独立开发和编译,并通过合适的组装方式来搭建实际的应用系统,由此使构件得以重用和共享,其使用寿命也不再像传统代码模块一样受限于某个应用程序。由于生存周期的延长,构件在其服役期间将可能需要得到更新,以便改进构件实现、提供新的功能、纠正设计错误及适应运行时环境的变化等。更为重要的是,在一些任务关键型应用领域,诸如金融数据处理系统、空中交通控制系统、航天探测器控制软件、网格和自治计算系统等,由于具有比较高的可用性需求,软件构件的更新必须在运行时完成而不导致系统的中断,也就是需要进行动态更新。动态更新将用构件运行时实例的新版本来取代旧版本,而构件的运行时实例是通过某些服务对象(或直接称对象)来实现的。因此,动态构件更新将被具体化为活跃对象的更新。通常,对单一构件而言,动态更新就是在运行时为其提供新版本构件实例,并由对应的转换函数依据各旧版本对象的当前状态,来初始化从属于该构件的所有新对象。但是,由于构件之间存在的交互依赖关系,完整的系统更新将往往包含不止一个构件的更新,而是要求转换相关旧版本构件提供的所有对象。并且由于高可用性需求,在更新过程中应当尽量避免应用的延迟。一种较为合理的更新方式是懒更新(lazy upgrade),对于每个活跃对象,都恰好在应用过程或者其他更新过程访问它之前进行转换,从而确保在更新开始之后才启动的应用不会访问到未被更新的对象,也使得应用过程不会因整个系统的更新而被极大地延迟。构件的关注分离特性表现在接口与实现的分离,因而构件更新可以包括内部实现的改进和接口的改变,而接口的改变有时可以是不兼容的。并且,构件更新时,用-->于提供状态转换等功能的转换函数,其实现不仅取决于被更新的对象本身,而且往往还依赖于构件的其他对象甚至其他构件所提供的对象。因此,为不致使在更新实际对象时因碰到不兼容的更新而导致失败,一种比较合理的方式是在更新实施之前,确定各个对象被转换的次序,以保证安全的构件更新。目前大多数与构件化软件动态更新相关的工作都重点关注新版本构件模块的加载和替换操作,而往往把合理对象转换次序的确定这一确保安全动态更新的问题留给更新管理员,甚或完全忽略。经对现有技术文献的检索发现,德国柏林工业大学(Technischen Berlin)的Marcin Solarski博士在其2004年的博士论文“Dynamic Upgrade ofDistributed Software Components”(分布式软件构件的动态更新)中详细阐述了构件作为动态更新单元进行动态更新时需要满足的各种功能和非功能性需求,并且提出了一套更新的方法论模型。但在其模型中并未就构件之间的运行时依赖对动态更新的影响给出详细讨论,更没有对运行时构件更新中活跃对象的转换次序给出合适的处理方法。经检索还发现,Chandrasekhar Boyapati等在2003年“Annual ACM SIGPLANConference on Object-Oriented Programming,Systems,Languages,andApplications”(ACM SIGPLAN面向对象程序设计、系统、语言及应用年会)会议论文集(Proceeding of OOPSLA’03)第403到417页上发表的“Lazy ModularUpgrades in Persistent Object Stores”(持久对象存储中模块的懒更新),该文章中对面向对象数据库(OODB)中持久对象的更新进行了讨论,研究了对象与其子对象之间的更新次序问题,能静态保证单个类中更新语义的正确性。但其不足之处在于,由于将每一个类的转换都作为一个独立的更新事务,并且缺乏运行时对象间动态依赖性信息,仅能从静态角度为单个类中各对象和子对象的转换提供安全性保证。
技术实现思路
本专利技术针对上述现有技术存在的不足,提供一种软件动态更新中确定实例对象转换次序的方法及系统,通过在构件的服务接口中添加新接口,当构件提供的对象被调用或构件类被实例化为服务对象时发出通知事件,并由确定实例对象转换次序的系统中所包含的服务调用监听模块监听这类事件,以动态获取活跃对象-->之间的依赖性信息,并在更新时据此给出合理的对象转换次序。本专利技术是通过以下技术方案实现的:本专利技术涉及的软件动态更新中确定实例对象转换次序的方法,包括以下步骤:步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在系统运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息;所述构件,是指包含契约指定接口和显示环境依赖的软件单元,对外提供两类接口:服务请求接口和服务提供接口,其组成包括:构件类文件(实现设计规范中功能需求所必须的资源)、构件描述文件、其他辅助目录和文件。本专利技术中的运行时仅更新由应用程序员开发、组成实际应用系统的应用构件,而不更新组成软件运行平台的底层系统构件,这与软件系统的实际情况相符合。所述增加接口方法,包括:对象引用宣告方法和对象引用终止方法,这两类方法在编写构件类文件时由应用开发程序员手动添加,其中:对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行。对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块。所述对象的生存周期,是指从主调对象通过创建或服务引用而获取被调对象,一直到被调对象在主调对象中不再起作用时的一段时间,其中,主调对象是指请求服务的其他对象,被调对象则指当前对象。所述对象引用信息,是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳。所述引用终止信息,是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引-->用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳。所述身份标识,是指在对象新创建时由系统运行平台为其指定的身份标识,并且这一标识具有唯一性,不会与当前已存在的其他对象相同。步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,则认为该对象引用信息是冗余信息,删除该冗余的对象引用信息,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未本文档来自技高网
...

【技术保护点】
一种软件动态更新中确定实例对象转换次序的方法,其特征在于,包括以下步骤: 步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在系统运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息,对象引用信息是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳;引用终止信息是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳; 步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,则认为该对象引用信息是冗余信息,删除该冗余的对象引用信息,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未通过,则保留该对象引用信息,得到当前实际存在的活跃对象的对象引用信息; 步骤三,逐个比较对象引用信息中所包含的被调对象身份标识与主调对象身份标识,结合构件间静态依赖关系,区分各个对象引用信息的属性,即识别各个对象是否属于某一构件的内部对象的引用,或者是否属于不同构件间对象的引用,以获得系统运行时所有活跃对象的依赖关系; 步骤四,当采用惰更新时,系统中的应用过程或其他对象转换正准备调用一个待更新的对象而触发具体对象更新,结合步骤三获得的活跃对象依赖关系验证更新的完整性,运用类型检查规则验证对象引用关系是否因不兼容接口的引入而受到影响,如果受到影响则相关对象必须进行更新,通过验证以确保当前更新包含所有待更新活跃对象的更新包和转换函数,如果完整性验证通过,则继续进行下一步;否则,如果更新不完整,则产生异常信息,退出更新过程; 步骤五,根据对象间运行时依赖信息以及安全对象更新条件,获得构件更新次序,包括单一构件所包含的各个对象之间的更新执行次序以及组成整个系统的各个构件所包含的对象之间的更新执行次序。...

【技术特征摘要】
1.一种软件动态更新中确定实例对象转换次序的方法,其特征在于,包括以下步骤:步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在系统运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息,对象引用信息是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳;引用终止信息是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳;步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,则认为该对象引用信息是冗余信息,删除该冗余的对象引用信息,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未通过,则保留该对象引用信息,得到当前实际存在的活跃对象的对象引用信息;步骤三,逐个比较对象引用信息中所包含的被调对象身份标识与主调对象身份标识,结合构件间静态依赖关系,区分各个对象引用信息的属性,即识别各个对象是否属于某一构件的内部对象的引用,或者是否属于不同构件间对象的引用,以获得系统运行时所有活跃对象的依赖关系;步骤四,当采用惰更新时,系统中的应用过程或其他对象转换正准备调用一个待更新的对象而触发具体对象更新,结合步骤三获得的活跃对象依赖关系验证更新的完整性,运用类型检查规则验证对象引用关系是否因不兼容接口的引入而受到影响,如果受到影响则相关对象必须进行更新,通过验证以确保当前更新包含所有待更新活跃对象的更新包和转换函数,如果完整性验证通过,则继续进行下一步;否则,如果更新不完整,则产生异常信息,退出更新过程;步骤五,根据对象间运行时依赖信息以及安全对象更新条件,获得构件更新次序,包括单一构件所包含的各个对象之间的更新执行次序以及组成整个系统的各个构件所包含的对象之间的更新执行次序。2、根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述增加接口方法,包括:对象引用宣告方法和对象引用终止方法,这两类方法在编写构件类文件时由应用开发程序员手动添加,其中:对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行;对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块。3、根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述对象的生存周期,是指从主调对象通过创建或服务引用而获取被调对象,一直到被调对象在主调对象中不再起作用时的一段时间,其中,主调对象是指请求服务的其他对象,被调对象则指当前对象。4、根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述匹...

【专利技术属性】
技术研发人员:徐小辉黄林鹏王德俊王欣
申请(专利权)人:上海交通大学
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1