CN101393528B - 软件动态更新中确定实例对象转换次序的方法及*** - Google Patents

软件动态更新中确定实例对象转换次序的方法及*** Download PDF

Info

Publication number
CN101393528B
CN101393528B CN2008102019295A CN200810201929A CN101393528B CN 101393528 B CN101393528 B CN 101393528B CN 2008102019295 A CN2008102019295 A CN 2008102019295A CN 200810201929 A CN200810201929 A CN 200810201929A CN 101393528 B CN101393528 B CN 101393528B
Authority
CN
China
Prior art keywords
reference information
module
renewal
information
object reference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2008102019295A
Other languages
English (en)
Other versions
CN101393528A (zh
Inventor
徐小辉
黄林鹏
王德俊
王欣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens Industry Software Shanghai Co Ltd
Original Assignee
Shanghai Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN2008102019295A priority Critical patent/CN101393528B/zh
Publication of CN101393528A publication Critical patent/CN101393528A/zh
Application granted granted Critical
Publication of CN101393528B publication Critical patent/CN101393528B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

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

Description

软件动态更新中确定实例对象转换次序的方法及***
技术领域
本发明涉及一种计算机应用技术领域的方法,具体是一种软件动态更新中确定实例对象转换次序的方法及***。
背景技术
软件构件技术的产生,使得可以依据一些关注分离规则将一个完整的应用程序划分成适当数目的软件构件模块。这些构件可以在不同的环境下独立开发和编译,并通过合适的组装方式来搭建实际的应用***,由此使构件得以重用和共享,其使用寿命也不再像传统代码模块一样受限于某个应用程序。由于生存周期的延长,构件在其服役期间将可能需要得到更新,以便改进构件实现、提供新的功能、纠正设计错误及适应运行时环境的变化等。更为重要的是,在一些任务关键型应用领域,诸如金融数据处理***、空中交通控制***、航天探测器控制软件、网格和自治计算***等,由于具有比较高的可用性需求,软件构件的更新必须在运行时完成而不导致***的中断,也就是需要进行动态更新。动态更新将用构件运行时实例的新版本来取代旧版本,而构件的运行时实例是通过某些服务对象(或直接称对象)来实现的。因此,动态构件更新将被具体化为活跃对象的更新。
通常,对单一构件而言,动态更新就是在运行时为其提供新版本构件实例,并由对应的转换函数依据各旧版本对象的当前状态,来初始化从属于该构件的所有新对象。但是,由于构件之间存在的交互依赖关系,完整的***更新将往往包含不止一个构件的更新,而是要求转换相关旧版本构件提供的所有对象。并且由于高可用性需求,在更新过程中应当尽量避免应用的延迟。一种较为合理的更新方式是懒更新(lazy upgrade),对于每个活跃对象,都恰好在应用过程或者其他更新过程访问它之前进行转换,从而确保在更新开始之后才启动的应用不会访问到未被更新的对象,也使得应用过程不会因整个***的更新而被极大地延迟。构件的关注分离特性表现在接口与实现的分离,因而构件更新可以包括内部实现的改进和接口的改变,而接口的改变有时可以是不兼容的。并且,构件更新时,用于提供状态转换等功能的转换函数,其实现不仅取决于被更新的对象本身,而且往往还依赖于构件的其他对象甚至其他构件所提供的对象。因此,为不致使在更新实际对象时因碰到不兼容的更新而导致失败,一种比较合理的方式是在更新实施之前,确定各个对象被转换的次序,以保证安全的构件更新。目前大多数与构件化软件动态更新相关的工作都重点关注新版本构件模块的加载和替换操作,而往往把合理对象转换次序的确定这一确保安全动态更新的问题留给更新管理员,甚或完全忽略。
经对现有技术文献的检索发现,德国柏林工业大学(Technischen
Figure GSB00000183247000021
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 ofOOPSLA’03)第403到417页上发表的“Lazy ModularUpgrades in Persistent Object Stores”(持久对象存储中模块的懒更新),该文章中对面向对象数据库(OODB)中持久对象的更新进行了讨论,研究了对象与其子对象之间的更新次序问题,能静态保证单个类中更新语义的正确性。但其不足之处在于,由于将每一个类的转换都作为一个独立的更新事务,并且缺乏运行时对象间动态依赖性信息,仅能从静态角度为单个类中各对象和子对象的转换提供安全性保证。
发明内容
本发明针对上述现有技术存在的不足,提供一种软件动态更新中确定实例对象转换次序的方法及***,通过在构件的服务接口中添加新接口,当构件提供的对象被调用或构件类被实例化为服务对象时发出通知事件,并由确定实例对象转换次序的***中所包含的服务调用监听模块监听这类事件,以动态获取活跃对象之间的依赖性信息,并在更新时据此给出合理的对象转换次序。
本发明是通过以下技术方案实现的:
本发明涉及的软件动态更新中确定实例对象转换次序的方法,包括以下步骤:
步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在***运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息;
所述构件,是指包含契约指定接口和显示环境依赖的软件单元,对外提供两类接口:服务请求接口和服务提供接口,其组成包括:构件类文件(实现设计规范中功能需求所必须的资源)、构件描述文件、其他辅助目录和文件。本发明中的运行时仅更新由应用程序员开发、组成实际应用***的应用构件,而不更新组成软件运行平台的底层***构件,这与软件***的实际情况相符合。
所述增加接口方法,包括:对象引用宣告方法和对象引用终止方法,这两类方法在编写构件类文件时由应用开发程序员手动添加,其中:
对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行。
对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块。
所述对象的生存周期,是指从主调对象通过创建或服务引用而获取被调对象,一直到被调对象在主调对象中不再起作用时的一段时间,其中,主调对象是指请求服务的其他对象,被调对象则指当前对象。
所述对象引用信息,是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳。
所述引用终止信息,是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳。
所述身份标识,是指在对象新创建时由***运行平台为其指定的身份标识,并且这一标识具有唯一性,不会与当前已存在的其他对象相同。
步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,仅时间戳存在差异。此时,删除时间戳较早的对象引用信息,以避免同值消息的冗余,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未通过,则保留该对象引用信息,得到当前实际存在的活跃对象的对象引用信息;
所述匹配性验证,是指验证对象引用信息是否满足下述所有条件:①消息类别为引用生成;②被调对象的身份标识和主调对象的身份标识分别与某个引用终止信息中的相同;③对象引用信息中的被调对象初始创建的时间戳早于被比较引用终止信息中的被调对象引用终止时的时间戳。
所述活跃对象,是指在***运行过程中某个时间区间内,因被其他对象引用或正在引用其他对象而实际起作用的对象。
步骤三,逐个比较对象引用信息中所包含的被调对象身份标识与主调对象身份标识,结合构件间静态依赖关系,区分各个对象引用信息的属性,即判断各个对象是否属于某一构件的内部对象的引用,或者是否属于不同构件间对象的引用,以获得***运行时所有活跃对象的依赖关系;
步骤四,当采用惰更新时,***中的应用过程或其他对象转换正准备调用一个待更新的对象而触发具体对象更新,结合步骤三获得的活跃对象依赖关系验证更新的完整性,运用类型检查规则验证对象引用关系是否因不兼容接口的引入而受到影响,如果受到影响则相关对象必须进行更新,通过验证以确保当前更新包含所有待更新活跃对象的更新包和转换函数,如果完整性验证通过,则继续进行下一步;否则,如果更新不完整,则产生异常信息,退出更新过程;
所述更新,其目的是改进构件实现、提供新的功能、纠正设计错误或适应运行时环境的变化等,包含对象的取代和具体的转换过程。动态更新就是在运行时为其提供新版本构件实例,并由对应的转换函数依据各旧版本对象的当前状态,来初始化从属于该构件的所有新对象。
所述惰更新,是指当***提交一个更新时,所涉及的所有对象暂不实施具体更新而将更新挂起,直到有具体应用或其他对象转换调用对象时,才实施给对象的具体更新。
所述更新的完整性,是指当更新引入不兼容的接口时,一些对象的行为将发生改变,这会影响到其他的类对象对这些对象的引用,并且也会影响由该对象所属类继承而来的子类对象,此时必需更新所有受到影响的对象。
步骤五,根据对象间运行时依赖信息以及安全对象更新条件,获得构件更新次序,,包括单一构件所包含的各个对象之间的更新执行次序以及组成整个***的各个构件所包含的对象之间的更新执行次序。
所述安全对象更新条件,是指为确保动态更新不违背更新语义、不会因更新而导致***运行停止而设置的约束,具体包括四个条件:
①对于单个对象,先提交但被挂起的更新必须先于后提交的更新而被执行;
②在某个具体更新被提交之后启动的应用过程,当需要调用该更新所影响到的对象时,总是先执行对应这些对象的具体更新,然后才继续应用过程的执行;
③在同一个完整更新中,当某个对象(依赖对象)更新的具体执行因转换过程需要而依赖于另一个对象(被依赖对象)时,依赖对象的更新先于被依赖对象;
④如果对象之间不存在运行时依赖,则其更新次序无要求。
本发明还涉及软件动态更新中确定实例对象转换次序的***,包括:服务调用监听模块、引用信息更新模块、构件依赖分析模块、完整性验证模块、更新次序选择模块,其中,
服务调用监听模块在***运行时监控构件所提供全部服务对象的生存周期,获取由对象引用宣告方法和对象引用终止方法的执行而产生的事件消息,进行分类存储,输出所有对象引用信息和引用终止信息至引用信息更新模块;
引用信息更新模块比较并删除冗余的对象引用信息,验证剩余非冗余的对象引用信息与所有引用终止信息的匹配性,输出实际存在的活跃对象引用信息至构件引用分析模块;
构件依赖分析模块比较并区分各个对象引用信息的属性,输出***运行时所有活跃对象的依赖关系信息至完整性验证模块和更新次序选择模块;
完整性验证模块根据实时获取的***运行时所有活跃对象的依赖关系信息,运用类型检查规则验证当前更新包中是否含所有待更新活跃对象的更新包和转换函数,输出更新完整性验证结果到更新次序选择模块;
更新次序选择模块接收***运行时所有活跃对象的依赖关系信息,判定对象安全更新条件的满足性,输出构件更新次序。
所述引用信息更新模块,从服务调用监听模块获取所属构件所能提供全部服务对象的对象引用信息和引用终止信息,通过比较分析排除被调和主调对象身份标识分别相同的冗余对象引用信息,然后删除与每个引用终止信息相匹配的对象引用信息,得到实际存在的活跃对象引用信息。
所述构件依赖分析模块,从每个构件的引用信息更新模块中获取所在构件正在提供服务的活跃对象引用信息,结合构件间静态依赖关系,识别各个对象引用是属于同一构件内对象的引用还是不同构件间对象的引用,得到***运行时所有活跃对象的引用依赖信息,其中,构件间静态依赖关系是指应用开发时,在构件描述文件中静态指定的构件间引用关系。
所述完整性验证模块,从构件依赖分析模块获取***运行时所有活跃对象的引用依赖信息,并结合构件间静态依赖关系,为确保更新完整性而验证当前处理的构件更新包中是否包含所有受影响的构件更新及其新版本类对象。
与现有技术相比,本发明具有如下有益效果:
(1)高度动态特征。由于是在构件开发阶段就在类文件中***对象引用宣告方法和对象引用终止方法,因此当***运行过程中,可以在不对运行时***采取任何外在干扰的情况下,动态获取构件实例对象的动态依赖关系。
(2)易实现性和通用性。在构件类文件中添加的对象引用宣告方法和对象引用终止方法,由于其功能和调用方法相同,可以通用于所有构件类文件,软件开发人员无需为构件中的每个类单独定义方法,只需作为模板方法引入即可。
(3)可适用性和可扩展性。本发明所包含的方法可适用于所有应用了面向对象范型程序设计语言开发的构件和模块化软件***,并且通过简单增加分布性和移动性特征,就可以推广扩展到分布式环境和移动计算***。
附图说明
图1为本发明确定实例对象转换次序的方法流程图。
图2为本发明确定实例对象转换次序的***结构示意图。
具体实施方式
下面结合附图给出本发明实施例的详细说明和具体实施方式:本实施例以本发明所述及技术方案为前提进行实施,给出详细的实施方式和过程,但本发明的保护范围不限于以下实施例。
本实施例中的构件实现采用Java程序设计语言和相关技术编写,并基于开放式服务平台OSGi(Open Service Gateway initiative,开放服务网关平台)来实施。每个构件对应于OSGi平台中的服务Bundle,主要包含一些实现具体功能的Java类文件、构件描述文件和其他辅助目录和文件(包括HTML文件、帮助文档、图标等)。每一个构件都对应着一个Bundle环境(BundleContext),包含关于构件的各种信息,如构件标识、构件类型、所能提供的服务接口、交互信息、通信机制等信息。对象的创建通过使用Java语言中的new方法,对象的引用通过Bundle环境(BundleContext)中的getService方法,每个构件的实例表现为对象的一个集合。
本实施例中的每个构件类的实现中都包含有一个对象引用宣告方法refDeclare的声明和定义,该方法提供所在类被实例化的信息,并通过在类中定义一个初始化块以便每次创建该类的对象时就执行该方法;该方法返回的对象引用信息包含消息类别(在此为引用生成)、被调对象的身份标识、主调对象的身份标识、被调对象被初始创建(通过new语句)或通过服务引用(通过getService语句)方法而获取时的时间戳。
并且每个构件类中还包含有一个对象引用终止方法refExpire的声明和定义,以及多个对该方法的调用;每个方法调用都对应着所在类的业务逻辑对其他对象引用的结束,并位于所引用对象开始不再起作用的位置,以表明从该位置开始相应对象不再在主调对象中被使用;该方法返回被调对象的引用终止信息。该信息包含消息类别(在此为引用终止)、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳。
对象引用宣告方法和对象引用终止方法的执行而得到的信息将被包含在消息事件中发送给服务调用监听模块。
如图1所示,本实施例应用在OSGi服务应用***,所涉及的软件动态更新中确定实例对象转换次序的方法,包括以下步骤:
步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在***运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息;
所述构件,是指包含契约指定接口和显示环境依赖的软件单元,对外提供两类接口:服务请求接口和服务提供接口,其组成包括:构件类文件(实现设计规范中功能需求所必须的资源)、构件描述文件、其他辅助目录和文件。本发明中的运行时仅更新由应用程序员开发、组成实际应用***的应用构件,而不更新组成软件运行平台的底层***构件,这与软件***的实际情况相符合。
所述增加接口方法,包括:对象引用宣告方法和对象引用终止方法,这两类方法在编写构件类文件时由应用开发程序员手动添加,其中:
对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行。
对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块。
在***运行时,构件实现类中的refDeclare和refExpire方法将因***的执行而不断被调用,并产生相应的对象引用信息和引用终止信息,将这两类信息表示为四元组{msgType,invokedID,invokingID,timeValue},其中,msgType表示消息类别,其值为用0表示“引用生成”,用1表示“引用终止”;invokedID和invokingID分别为被调对象的身份标识和主调对象的身份标识;timeValue表示被调对象被初始创建时或被调对象引用终止时的时间戳。
步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,则认为该对象引用信息是冗余信息,删除该冗余的对象引用信息,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未通过,则保留该对象引用信息,得到当前实际存在的活跃对象的对象引用信息;
收集所有的对象引用信息和引用终止信息,通过信息表示四元组中存储的信息进行比较分析。先通过比较分析验证是否存在冗余的对象引用信息,也即两个对象引用信息的消息类别msgType、被调对象invokedID、主调对象invokingID分别相同,仅时间戳timeValue存在差异。此时,删除时间戳较早的对象引用信息,以避免同值消息的冗余。
先排除冗余,然后对每一条引用终止信息,就比较验证是否存在与其相匹配的对象引用信息。如果存在对象引用信息满足下列条件:消息类别msgType=0、invokedID和invokingID分别与对应的引用终止信息相同、且时间戳timeValue早于该引用终止信息的时间戳,则删除此对象引用信息和对应的引用终止信息。重复这一过程,直至不再存在引用终止信息。
步骤三,逐个比较对象引用信息中所包含的被调对象身份标识与主调对象身份标识,结合构件间静态依赖关系,区分各个对象引用信息的属性,即判断各个对象是否属于某一构件的内部对象的引用,或者是否属于不同构件间对象的引用,以获得***运行时所有活跃对象的依赖关系;
根据各个对象引用的属性,判定各个对象引用是属于同一构件内对象的引用还是不同构件间对象的引用。得到***运行时所有活跃对象的依赖关系信息,并生成活跃对象的依赖关系图表示G=(V,E1,E2)。其中,V为图节点,表示所有运行时活跃对象;有向边表示对象之间的引用关系,箭头起点表示主调对象,终点表示被调对象,其中,El为图中的有向边,表示同一构件内部对象之间的引用依赖关系;E2为图中的有向边,表示不同构件所属对象间的引用依赖关系。
步骤四,当采用惰更新时,***中的应用过程或其他对象转换正准备调用一个待更新的对象而触发具体对象更新,结合步骤三获得的活跃对象依赖关系验证更新的完整性,运用类型检查规则验证对象引用关系是否因不兼容接口的引入而受到影响,如果受到影响则相关对象必须进行更新,通过验证以确保当前更新包含所有待更新活跃对象的更新包和转换函数,如果完整性验证通过,则继续进行下一步;否则,如果更新不完整,则产生异常信息,退出更新过程;
所述更新,其目的是改进构件实现、提供新的功能、纠正设计错误或适应运行时环境的变化等,包含对象的取代和具体的转换过程。动态更新就是在运行时为其提供新版本构件实例,并由对应的转换函数依据各旧版本对象的当前状态,来初始化从属于该构件的所有新对象。
所述惰更新,是指当***提交一个更新时,所涉及的所有对象暂不实施具体更新而将更新挂起,直到有具体应用或其他对象转换调用对象时,才实施给对象的具体更新。
所述更新的完整性,是指当更新引入不兼容的接口时,一些对象的行为将发生改变,这会影响到其他的类对象对这些对象的引用,并且也会影响由该对象所属类继承而来的子类对象,此时必需更新所有受到影响的对象。
结合活跃对象的依赖关系图表示G,按如下步骤验证更新的完整性:
1)如果更新包中已不存在未被检查构件,则验证过程结束。否则,选取更新包中所包含的某个更新构件,运用类型检查器(type checker)验证该构件与相应待更新构件的接口兼容性;
2)如果新旧构件接口兼容,则返回第1)步继续。否则,如果新旧构件接口不兼容,则检查活跃对象依赖关系图G中是否包含该构件的实例对象;
3)如果包含该构件的实例对象,则跳转到第4)步。否则,依据构件间静态依赖(通过Imports和Exports指定的)关系,验证与该构件有引用或继承关系的构件类接口类型,如果都兼容则返回第1)步继续。否则,检查更新包中是否包含所有受影响构件的更新。如果已经完全包含,则返回第1)步继续;否则,产生异常信息,完整性验证失败,退出更新;
4)查找该对象在活跃对象依赖关系图G中的位置,沿着有向边逆向获取所有与其有依赖关系的对象信息,检查是否更新包中包含所属构件的更新。如果已经包含,则返回第1)步继续;否则,产生异常信息,完整性验证失败,退出更新。
步骤五,根据对象间运行时依赖信息以及安全对象更新条件,获得构件更新次序,包括单一构件所包含的各个对象之间的更新执行次序以及组成整个***的各个构件所包含的对象之间的更新执行次序。
所述对象安全更新条件,是指为确保动态更新不违背更新语义、不会因更新而导致***运行停止而设置的约束,具体包括四个条件:
①对于单个对象,先提交但被挂起的更新必须先于后提交的更新而被执行;
②在某个具体更新被提交之后启动的应用过程,当需要调用该更新所影响到的对象时,总是先执行对应这些对象的具体更新,然后才继续应用过程的执行;
③在同一个完整更新中,当某个对象(依赖对象)更新的具体执行因转换过程需要而依赖于另一个对象(被依赖对象)时,依赖对象的更新先于被依赖对象;
④如果对象之间不存在运行时依赖,则其更新次序无要求。
如图2所示,本实施例涉及软件动态更新中确定实例对象转换次序***,包括:服务调用监听模块、引用信息更新模块、构件依赖分析模块、完整性验证模块、更新次序选择模块,其中:
服务调用监听模块监控构件所提供全部服务对象的生存周期,在***运行时,构件各个类实例对象中的refDeclare和refExpire方法将随着应用过程而被逐步执行,监听因这两类方法的执行而产生的消息,进行分类存储,得到对象引用信息和引用终止信息,并输出所属构件所有服务对象的对象引用信息和引用终止信息至引用信息更新模块。其中的构件Bundle包含有契约指定的接口,主要提供两类接口:服务请求和服务提供,其组成除了包括实现功能需求所必须的资源(即构件类文件)文件外,还包含构件元信息描述文件、其他辅助目录和文件。
引用信息更新模块通过比较并排除被调和主调对象身份标识与被比较对象分别相同的冗余对象引用信息,验证剩余非冗余的对象引用信息与所有引用终止信息的匹配性,删除与每个引用终止信息相匹配的对象引用信息,得到实际存在的活跃对象引用信息,输出实际存在的活跃对象引用信息至构件依赖分析模块。
构件依赖分析模块从每个构件的引用信息更新模块中收集所在构件正在提供服务的活跃对象引用信息,结合构件间静态依赖关系,分析各个对象引用是属于同一构件的内部对象的引用还是属于不同构件间对象的引用,得到***运行时所有活跃对象的引用依赖信息,并输出该信息至完整性验证模块和更新次序选择模块。
完整性验证模块从依赖分析模块获取***运行时所有活跃对象的引用依赖信息,运用类型检查规则验证当前更新包中是否含所有待更新活跃对象的更新包和转换函数,并结合构件间静态依赖关系,验证当前处理的构件更新包中是否包含所有受影响的构件更新及其新版本类对象。
当构件更新满足更新完整性约束条件时,更新次序选择模块依据安全对象更新条件,分析对象间运行时依赖信息,确定合理的构件更新次序。
本实施例在构件开发阶段在类文件中***对象引用宣告方法refDeclare和对象引用终止方法refExpire,就可以在***运行过程中动态获取构件实例对象的动态依赖关系,而不需要对运行时***采取任何外在干扰。并且由于这两类方法在所有类中的功能和调用方法相似,因此可通用于所有构件类文件,软件开发人员无需为构件中的每个类单独定义方法,只需作为模板方法引入即可,这可以避免增加开发人员的时间消耗和可能造成的错误。通过增加分布协同和环境依赖特性,本实施例方法实际上也可用于实现分布和移动环境下的软件构件动态更新的运行时实例对象动态依赖关系分析和对象转换次序的确定。

Claims (8)

1.一种软件动态更新中确定实例对象转换次序的方法,其特征在于,包括以下步骤:
步骤一,服务调用监听:通过开发阶段向构件所包含的类文件中增加接口方法,在***运行时监控该构件所提供全部服务对象的生存周期,获取这些方法的执行所产生的事件消息,得到对象引用信息和引用终止信息,对象引用信息是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳;引用终止信息是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳;
步骤二,分别比较对象引用信息中的被调对象的身份标识和主调对象的身份标识,当消息类别为引用生成,且被调对象的身份标识和主调对象的身份标识分别与另一对象引用信息完全相同,仅时间戳存在差异,此时,删除时间戳较早的对象引用信息,以避免同值消息的冗余,然后将剩余不存在冗余的对象引用信息逐个与所有引用终止信息进行匹配性验证,若验证通过,则删除相匹配的对象引用信息和引用终止信息;若验证未通过,则保留该对象引用信息,得到当前实际存在的活跃对象的对象引用信息;
步骤三,逐个比较对象引用信息中所包含的被调对象身份标识与主调对象身份标识,结合构件间静态依赖关系,区分各个对象引用信息的属性,即识别各个对象是否属于某一构件的内部对象的引用,或者是否属于不同构件间对象的引用,以获得***运行时所有活跃对象的依赖关系;
步骤四,当采用惰更新时,***中的应用过程或其他对象转换正准备调用一个待更新的对象而触发具体对象更新,结合步骤三获得的活跃对象依赖关系验证更新的完整性,运用类型检查规则验证对象引用关系是否因不兼容接口的引入而受到影响,如果受到影响则相关对象必须进行更新,通过验证以确保当前更新包含所有待更新活跃对象的更新包和转换函数,如果完整性验证通过,则继续进行下一步;否则,如果更新不完整,则产生异常信息,退出更新过程;
步骤五,根据对象间运行时依赖信息以及安全对象更新条件,获得构件更新次序,包括单一构件所包含的各个对象之间的更新执行次序以及组成整个***的各个构件所包含的对象之间的更新执行次序;
所述增加接口方法,包括:对象引用宣告方法和对象引用终止方法,这两类方法在编写构件类文件时由应用开发程序员手动添加,其中:
对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行;
对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块;
所述安全对象更新条件,具体如下:
①对于单个对象,先提交但被挂起的更新必须先于后提交的更新而被执行;
②在某个具体更新被提交之后启动的应用过程,当需要调用该更新所影响到的对象时,总是先执行对应这些对象的具体更新,然后才继续应用过程的执行;
③在同一个完整更新中,当某个对象更新的具体执行因转换过程需要而依赖于另一个对象时,依赖对象的更新先于被依赖对象;
④如果对象之间不存在运行时依赖,则其更新次序无要求。
2.根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述对象的生存周期,是指从主调对象通过创建或服务引用而获取被调对象,一直到被调对象在主调对象中不再起作用时的一段时间,其中,主调对象是指请求服务的其他对象,被调对象则指当前对象。
3.根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述匹配性验证,是指验证对象引用信息是否满足下述所有条件:①消息类别为引用生成;②被调对象的身份标识和主调对象的身份标识分别与某个引用终止信息中的相同;③对象引用信息中的被调对象初始创建的时间戳早于被比较引用终止信息中的被调对象引用终止时的时间戳。
4.根据权利要求1所述的软件动态更新中确定实例对象转换次序的方法,其特征是,所述更新的完整性,是指当更新引入不兼容的接口时,一些对象的行为将发生改变,这会影响到其他的类对象对这些对象的引用,并且也会影响由该对象所属类继承而来的子类对象,此时更新所有受到影响的对象。
5.一种软件动态更新中确定实例对象转换次序的***,其特征在于,包括:服务调用监听模块、引用信息更新模块、构件依赖分析模块、完整性验证模块、更新次序选择模块,其中,
服务调用监听模块在***运行时监控构件所提供全部服务对象的生存周期,获取由对象引用宣告方法和对象引用终止方法的执行而产生的事件消息,进行分类存储,输出所有对象引用信息和引用终止信息至引用信息更新模块;
引用信息更新模块比较并删除冗余的对象引用信息,验证剩余非冗余的对象引用信息与所有引用终止信息的匹配性,输出实际存在的活跃对象引用信息至构件依赖分析模块;
构件依赖分析模块比较并区分各个对象引用信息的属性,输出***运行时所有活跃对象的依赖关系信息至完整性验证模块和更新次序选择模块;
完整性验证模块根据实时获取的***运行时所有活跃对象的依赖关系信息,运用类型检查规则验证当前更新包中是否含所有待更新活跃对象的更新包和转换函数,输出更新完整性验证结果到更新次序选择模块;
更新次序选择模块接收***运行时所有活跃对象的依赖关系信息,判定对象安全更新条件的满足性,输出构件更新次序;
所述对象安全更新条件,具体如下:
①对于单个对象,先提交但被挂起的更新必须先于后提交的更新而被执行;
②在某个具体更新被提交之后启动的应用过程,当需要调用该更新所影响到的对象时,总是先执行对应这些对象的具体更新,然后才继续应用过程的执行;
③在同一个完整更新中,当某个对象更新的具体执行因转换过程需要而依赖于另一个对象时,依赖对象的更新先于被依赖对象;
④如果对象之间不存在运行时依赖,则其更新次序无要求;
所述的对象引用宣告方法,其声明和定义方式相同于一般的类方法,对该方法的调用位于类的初始化模块,对象引用宣告方法最终将对象引用信息包含在消息事件中发送给服务调用监听模块,其中,初始化模块是指在一个类声明中包含的独立代码块,只要构造类的对象,初始化模块就会被执行;
所述的对象引用终止方法,其声明和定义方式相同于一般的类方法,对该方法的调用将由应用开发程序员手动设置,对象引用终止方法最终将引用终止信息包含在消息事件中发送给服务调用监听模块;
所述的对象引用信息,是指在通过初始创建或服务引用而获取被调对象时,用于声明这一初始化事件的信息,对象引用信息包括:类别为引用生成的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象初始创建的时间戳;
所述的引用终止信息,是指在之前创建和引用的被调对象不再在主调对象中起作用时,用于宣告被调对象引用终止事件的信息,引用终止信息包括:类别为引用终止的消息类别、被调对象的身份标识、主调对象的身份标识、被调对象引用终止时的时间戳。
6.根据权利要求5所述的软件动态更新中确定实例对象转换次序的***,其特征是,所述引用信息更新模块,从服务调用监听模块获取所属构件所能提供全部服务对象的对象引用信息和引用终止信息,通过比较分析排除被调和主调对象身份标识分别相同的冗余对象引用信息,然后删除与每个引用终止信息相匹配的对象引用信息,得到实际存在的活跃对象引用信息。
7.根据权利要求5所述的软件动态更新中确定实例对象转换次序的***,其特征是,所述构件依赖分析模块,从每个构件的引用信息更新模块中获取所在构件正在提供服务的活跃对象引用信息,结合构件间静态依赖关系,识别各个对象引用是属于同一构件内对象的引用还是不同构件间对象的引用,得到***运行时所有活跃对象的引用依赖信息,其中,构件间静态依赖关系是指应用开发时,在构件描述文件中静态指定的构件间引用关系。
8.根据权利要求5所述的软件动态更新中确定实例对象转换次序的***,其特征是,所述完整性验证模块,从构件依赖分析模块获取***运行时所有活跃对象的引用依赖信息,并结合构件间静态依赖关系,为确保更新完整性而验证当前处理的构件更新包中是否包含所有受影响的构件更新及其新版本类对象。
CN2008102019295A 2008-10-30 2008-10-30 软件动态更新中确定实例对象转换次序的方法及*** Expired - Fee Related CN101393528B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102019295A CN101393528B (zh) 2008-10-30 2008-10-30 软件动态更新中确定实例对象转换次序的方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102019295A CN101393528B (zh) 2008-10-30 2008-10-30 软件动态更新中确定实例对象转换次序的方法及***

Publications (2)

Publication Number Publication Date
CN101393528A CN101393528A (zh) 2009-03-25
CN101393528B true CN101393528B (zh) 2011-11-16

Family

ID=40493834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102019295A Expired - Fee Related CN101393528B (zh) 2008-10-30 2008-10-30 软件动态更新中确定实例对象转换次序的方法及***

Country Status (1)

Country Link
CN (1) CN101393528B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9697012B2 (en) 2010-10-22 2017-07-04 Hewlett Packard Enterprise Development Lp Relation-based identification of automation objects
CN102012810B (zh) * 2010-11-22 2013-04-17 西安交通大学 一种轻量级企业构件动态演化的方法
CN103020075B (zh) * 2011-09-23 2016-03-09 启碁科技股份有限公司 分析目标对象的依赖关系的方法
US10216514B2 (en) 2014-09-25 2019-02-26 Hewlett Packard Enterprise Development Lp Identification of a component for upgrade
CN106708547B (zh) * 2015-11-12 2020-10-27 卓望数码技术(深圳)有限公司 一种服务插件管理方法和***
CN105653351B (zh) * 2015-12-30 2019-08-06 北京博思汇众科技股份有限公司 java卡虚拟机的优化方法及***
CN107688488B (zh) * 2016-08-03 2020-10-20 ***通信集团湖北有限公司 一种基于元数据的任务调度的优化方法及装置
CN108121574B (zh) * 2016-11-29 2021-09-24 阿里巴巴集团控股有限公司 一种内核模块的热升级方法、装置及虚拟机***
CN109271150B (zh) * 2018-07-18 2022-02-08 聚好看科技股份有限公司 一种基于java的实例对象处理方法和装置
CN112035180A (zh) * 2020-08-19 2020-12-04 北京城市网邻信息技术有限公司 一种自动化实例加载方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087501A1 (en) * 1999-09-09 2002-07-04 Yuri J. Breitbart Timestamp-based system and method for serializing lazy updates in a distributed database
CN1906575A (zh) * 2004-01-06 2007-01-31 国际商业机器公司 动态软件更新***、方法及程序产品
CN101174217A (zh) * 2007-11-22 2008-05-07 上海交通大学 Java程序可动态更新化实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087501A1 (en) * 1999-09-09 2002-07-04 Yuri J. Breitbart Timestamp-based system and method for serializing lazy updates in a distributed database
CN1906575A (zh) * 2004-01-06 2007-01-31 国际商业机器公司 动态软件更新***、方法及程序产品
CN101174217A (zh) * 2007-11-22 2008-05-07 上海交通大学 Java程序可动态更新化实现方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Segal, M.E. et al..On-the-fly program modification: systems for dynamic updating.IEEE Software10 2.1993,10(2),53-65.
Segal, M.E. et al..On-the-fly program modification: systems for dynamic updating.IEEE Software10 2.1993,10(2),53-65. *
王德俊等.分布式动态更新支持***研究综述.计算机科学34 11.2007,34(11),19-24.
王德俊等.分布式动态更新支持***研究综述.计算机科学34 11.2007,34(11),19-24. *

Also Published As

Publication number Publication date
CN101393528A (zh) 2009-03-25

Similar Documents

Publication Publication Date Title
CN101393528B (zh) 软件动态更新中确定实例对象转换次序的方法及***
US20240256254A1 (en) Systems and methods for transformation of reporting schema
Baniassad et al. Discovering early aspects
CN100489778C (zh) Java程序可动态更新化实现方法
US8954375B2 (en) Method and system for developing data integration applications with reusable semantic types to represent and process application data
Li et al. A formal semantics of UML sequence diagram
US8112742B2 (en) Method and system for debugging data integration applications with reusable synthetic data values
Huang et al. Confvalley: A systematic configuration validation framework for cloud services
Kling et al. MoScript: A DSL for querying and manipulating model repositories
Camara et al. An aspect-oriented adaptation framework for dynamic component evolution
Gómez Supporting integration activities in object-oriented applications
Şora Unified modeling of static relationships between program elements
Garcia et al. An architectural-based reflective approach to incorporating exception handling into dependable software
Cerny et al. Microservice Anti-Patterns and Bad Smells. How to Classify, and How to Detect Them. A Tertiary Study
Di Ruscio et al. Towards maintainer script modernization in FOSS distributions
Zeman Extending Data Lineage Analysis Towards. NET Frameworks
NIST Reference model for frameworks of software engineering environments
NIST REFERENCE MODEL FOR FRAMEWORKS OF SOFTWARE ENGINEERING ENVIRONMENTS Version 2.6
Sanchez Pina Conservative and traceable executions of heterogeneous model management workflows
Affonso et al. A Reference Architecture Based on Reflection for Self-Adaptive Software: A Second Release
Lee et al. Model-driven monitoring of time-critical systems based on aspect-oriented programming
Hokkanen Modularization of a monolithic software application and analysis of effects for development and testing
Ksenzov Architectural refactoring of corporate program systems
De Francesco et al. Concurrent behavior: A construct to specify the external behavior of objects in object databases
Gerlitz Incremental Integration and Static Analysis of Model-Based Automotive Software Artifacts

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: SIEMENS INDUSTRY SOFTWARE(SHANGHAI) CO., LTD.

Free format text: FORMER OWNER: SHANGHAI JIAOTONG UNIVERSITY

Effective date: 20120823

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 200240 MINHANG, SHANGHAI TO: 200082 HONGKOU, SHANGHAI

TR01 Transfer of patent right

Effective date of registration: 20120823

Address after: 200082, Dalian Road, Shanghai, No. 500, building B, 4-7

Patentee after: SIEMENS industrial software (Shanghai) Co., Ltd.

Address before: 200240 Dongchuan Road, Shanghai, No. 800, No.

Patentee before: Shanghai Jiao Tong University

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111116

Termination date: 20161030

CF01 Termination of patent right due to non-payment of annual fee