一种c++应用程序版本动态管理系统和方法

文档序号:6341478阅读:343来源:国知局
专利名称:一种c++应用程序版本动态管理系统和方法
技术领域
本发明涉及一种C++应用程序版本动态管理系统和方法,在不停止服务的情况 下,对应用逻辑进行更新、扩展与增强,实现“即插即用”。
背景技术
目前阶段,一套应用系统在业务逻辑发生调整变化,需要升级时,主要采用以下几 种实施方案一是申请计划停机,更新应用程序;二是切换到备份系统,更新应用程序 ’三 是采用集群方案,按机器、分批次更新应用程序。不论采用哪种方案,有的需要中断系统服 务;有的上线操作或者故障后回滚操作非常复杂,加重运维人员工作负担;有的需要额外 增加设备资源,提高运维成本。插件(plug-in)技术在业界有着广泛的应用,很多软件(比如firefOx、winamp 等)都支持它,其中以Eclipse平台最著名。插件技术是指在软件的设计和开发过程中,将 整个应用程序划分为宿主程序和插件对象两部分,宿主程序能够调用插件对象,插件对象 能够在宿主程序上实现自己的逻辑,而两者的交互基于一种公共的通信契约。宿主程序可 以独立于插件对象存在,因此,我们可以在避免改变宿主程序的情况下通过增减插件或修 改插件的方式增加或调整功能。使用了插件式机制的应用程序是一个框架,这个框架由于使用了插件架构,变得 稳固且具有良好的可扩展性。扩展性的优点在于它屏蔽了宿主程序与插件对象之间复杂的 交互和通信联系,第三方插件开发者无需关注框架的宿主程序是如何运行的,如何调用插 件对象等复杂问题。事实上,他们完全无需了解框架的宿主程序是如何编写的,只须关心自 己所要解决问题的处理逻辑,只要这个逻辑编写正确,并且符合插件式框架规定的格式和 流程,这个插件文件就将能够被框架的宿主程序识别并安装。以航信开放平台应用为例,由于不同部门使用处理的业务数据类型千差万别,业 务流程也复杂多变,都必须根据实际情况开发自己专门应用逻辑,如果每个新应用项目都 必须让开发人员从头构建,无疑是一种智力与经验的浪费,同时浪费的还有宝贵的开发时 间。使用插件式机制的应用程序发布插件接口,它就好像一个应用功能的容器,应用插件开 发人员可以根据自己的需要实现协议接口,不断填充和增强这个容器的功能,从而这个容 器为功能的扩展提供了无限的空间。插件可基于动态共享库实现,动态共享库是具有某种功能的一种软件模块,它可 以在需要时才被系统载入调用。动态共享库文件本身并不能独立运行,但它能够被其他程 序调用实现。

发明内容
基于上述问题,本发明人提供一种C++应用程序版本动态管理系统和方法,通过 合理利用动态共享库技术,可以解决以上问题。将应用逻辑封装成动态共享库,同时设计系 统框架对其实现动态装载,在应用程序版本升级时,只需升级相应动态共享库文件,然后系统框架对其进行装载,实现应用程序的在线更新,整个过程不需要停机中断服务,即所谓热 插拔。本发明的C++应用程序版本动态管理系统包括应用插件模块;宿主程序模块;应 用处理接口类模块;应用处理接口类动态注册模块;应用插件装/卸载模块;应用版本发布 模块;应用版本获取模块。其中,应用插件模块是后缀为.so类型的动态库文件,该模块将应用的业务处理 逻辑打包。其中,宿主程序模块是可执行文件,相当于应用插件的容器,负责装载应用插件, 创建应用处理接口对象,接受外部调用后,执行接口对象中的接口函数,该函数实现应用插 件中的业务逻辑处理。在处理外部请求之前还负责调用应用版本获取模块获取应用版本, 比较版本号和应用当前使用的版本号,如果发生变化,则先调用应用插件卸载模块,将当前 使用的应用插件卸载,然后调用应用插件装载模块,装载新版本的应用插件,实现版本的更 新。如果一次应用处理需要分为多个应用模块的话,第一个模块负责把得到的应用版本号 发给后续模块,从而保证这次请求的整个处理过程采用统一的应用版本。其中,应用处理接口类模块用于实现宿主程序与应用插件之间的调用接口。为了 实现在应用插件业务逻辑发生变化时不需要更改宿主程序,该模块将包括一个基类和相应 的派生类,并且基类中的接口函数定义成纯虚函数,由宿主程序调用,派生类中的接口函数 实现具体应用逻辑,打包在应用插件中,这样宿主程序装载应用插件以后,就可以通过执行 纯虚接口函数,利用C++对象的多态性来调用插件中的应用逻辑了。其中,应用处理接口类动态注册模块是在应用插件被装载的过程中,将应用处理 接口派生类从应用插件中动态加载到宿主程序,并且要支持一个应用插件中注册多个不同 的应用处理接口派生类。因为C++语言层面没有根据类名动态加载对象的机制,所以我们 提供了一个根据类名从应用插件中动态加载所需的C++对象的工厂方法,宿主程序根据应 用处理接口派生类名调用工厂方法创建应用处理接口对象。应用插件中的应用处理接口派 生类中需要调用一个宏,该宏定义了一个全局对象,宿主程序调用操作系统库函数dlopen 装载应用插件时,全局对象的构造函数被执行完成把应用处理接口派生类的创建函数注册 到工厂方法维护的C++对象创建方法容器中,该容器把C++类名和类的创建方法进行关联。 宿主程序通过该工厂方法根据应用处理接口派生类名检索创建方法并执行,完成C++对象 的动态加载,并且支持在一个应用插件中注册多个应用处理接口派生类。其中,应用插件装/卸载模块的使用者是宿主程序,功能是通过调用操作系统库 函数dlopen将应用插件装载进宿主程序;通过调用操作系统库函数dlclose将应用插件从 宿主程序中卸载。其中,应用版本发布模块包括应用版本总控服务模块、应用版本管理服务模块和 版本公告牌以及配置文件。所述应用版本发布模块将用户配置的应用版本号从配置文件中 加载到版本公告牌中,用于宿主程序模块感知版本的变化,以实现应用集群(多机)环境下 的版本发布。版本公告牌采用共享内存存储(目的是提高访问性能),分为A块和B块两个 部分,在版本更新时更新非当前使用块,版本生效时切换当前使用块,采用A/B块设计的目 的是为了版本回滚方便,只需切换当前使用块即可。应用版本总控服务模块负责接收版本 升级的命令,然后调用版本管理服务模块,实现版本公告牌的版本更新。应用版本管理服务模块接收应用版本总控服务模块的调用,如果是升级则从版本配置文件中将版本号装载到 版本公告牌中,如果是回滚则直接切换版本公告牌的当前使用块。配置文件记录应用版本 号以及应用插件的存放目录。其中,应用版本获取模块接收外部请求访问版本公告牌,获取当前版本。本发明还提供一种C++应用程序版本动态管理方法,该方法包括版本发布和版本 更新两个部分其中,版本发布包括如下步骤(如图3)1.应用版本总控服务模块接收版本升级的命令。2.应用版本总控服务模块调用版本管理服务模块。3.应用版本管理服务模块判断指令,如果是升级则从版本配置文件中将版本号装 载到版本公告牌中,如果是回滚则直接切换版本公告牌的当前使用块。其中,版本更新包括如下步骤(如图4)1.宿主程序模块在启动时,调用应用处理接口类动态注册模块,创建一个C++对 象创建方法容器,该容器把C++类名和类的创建方法进行关联。2.宿主程序模块接收应用请求命令。3.宿主程序模块调用应用版本获取模块获取版本号。4.宿主程序在执行业务逻辑之前先判断该版本号是否与宿主程序当前正在使用 的插件版本一致(最初执行时宿主程序当前插件版本号初始为空,所以会初始装载一次), 如一致则继续第7步骤执行,不一致则先调用应用插件卸载模块将当前使用的应用插件卸 载,然后根据获取的版本号调用应用插件装载模块装载新版本的应用插件,实现版本的更 新。5.应用插件在被装载时,会调用应用处理接口类动态注册模块,把应用处理接口 派生类的创建函数注册到宿主程序维护的C++对象创建方法容器中。6.宿主程序根据应用处理接口派生类类名检索C++对象创建方法容器,获取应用 处理接口派生类的创建函数并执行,创建应用处理接口对象。7.宿主程序调用应用处理接口对象的接口函数,开始执行应用插件中的业务处理 逻辑。8.产生处理结果。本发明的C++应用程序版本动态管理系统和方法的优点在于1)采用动态共享库可以少停机时间,提高服务质量,这一点对于提供7* 小时服 务的关键应用系统尤为重要;2)操作简单,简化上线、回滚流程;3)还可以实现基于用户的版本控制,实现多版本并行,方便不同开发测试人员交 叉调试,节省测试资源。


参照如下附图将更加易于理解本发明图1为本发明C++应用程序版本动态管理系统方框2所示为版本号的传递过程示意图。
图3为本发明C++应用程序版本动态管理方法的版本发布流程图4为本发明C++应用程序版本动态管理方法的版本更新流程图5所示为版本发布管理模块的设计方框图。
具体实施例方式以下参照附图,具体说明本发明C++应用程序版本动态管理系统的具体实施过程。如图1所示,本发明C++应用程序版本动态管理系统包含应用插件模块;宿主程序 模块;应用处理接口类模块;应用处理接口类动态注册模块;应用插件装/卸载模块;应用 版本发布模块;应用版本获取模块。其中,应用插件模块是后缀为.so类型的动态库文件,该模块将应用的业务处理 逻辑打包。其中,宿主程序模块是可执行文件,相当于应用插件的容器,负责装载应用插件, 创建应用处理接口对象,接受外部调用后,执行接口对象中的接口函数,该函数实现应用插 件中的业务逻辑处理。在处理外部请求之前还负责调用应用版本获取模块获取应用版本, 比较版本号和应用当前使用的版本号,如果发生变化,则先调用应用插件卸载模块,将当前 使用的应用插件卸载,然后调用应用插件装载模块,装载新版本的应用插件,实现版本的更 新。如果一次应用处理需要分为多个应用模块的话,第一个模块负责把得到的应用版本号 发给后续模块,从而保证这次请求的整个处理过程采用统一的应用版本。如图2所示。其中,应用处理接口类模块用于实现宿主程序与应用插件之间的调用接口。为了 实现在应用插件业务逻辑发生变化时不需要更改宿主程序,该模块将包括一个基类和相应 的派生类,并且基类中的接口函数定义成纯虚函数,由宿主程序调用,派生类中的接口函数 实现具体应用逻辑,打包在应用插件中,这样宿主程序装载应用插件以后,就可以通过执行 纯虚接口函数,利用C++对象的多态性来调用插件中的应用逻辑了。其中,应用处理接口类动态注册模块是在应用插件被装载的过程中,将应用处理 接口派生类从应用插件中动态加载到宿主程序,并且要支持一个应用插件中注册多个不同 的应用处理接口派生类。因为C++语言层面没有根据类名动态加载对象的机制,所以我们 提供了一个根据类名从应用插件中动态加载所需的C++对象的工厂方法,宿主程序根据应 用处理接口派生类名调用工厂方法创建应用处理接口对象。应用插件中的应用处理接口派 生类中需要调用一个宏,该宏定义了一个全局对象,宿主程序调用操作系统库函数dlopen 装载应用插件时,全局对象的构造函数被执行完成把应用处理接口派生类的创建函数注册 到工厂方法维护的C++对象创建方法容器中,该容器把C++类名和类的创建方法进行关联。 宿主程序通过该工厂方法根据应用处理接口派生类名检索创建方法并执行,完成C++对象 的动态加载,并且支持在一个应用插件中注册多个应用处理接口派生类。其中,应用插件装/卸载模块的使用者是宿主程序,功能是通过调用操作系统库 函数dlopen将应用插件装载进宿主程序;通过调用操作系统库函数dlclose将应用插件从 宿主程序中卸载。如图3所示,其中,应用版本发布模块包括应用版本总控服务模块、应用版本管理 服务模块和版本公告牌以及配置文件。所述应用版本发布模块将用户配置的应用版本号从配置文件中加载到版本公告牌中,用于宿主程序模块感知版本的变化,以实现应用集群 (多机)环境下的版本发布。版本公告牌采用共享内存存储(目的是提高访问性能),分为 A块和B块两个部分,在版本更新时更新非当前使用块,版本生效时切换当前使用块,采用 A/B块设计的目的是为了版本回滚方便,只需切换当前使用块即可。应用版本总控服务模块 负责接收版本升级的命令,然后调用版本管理服务模块,实现版本公告牌的版本更新。应用 版本管理服务模块接收应用版本总控服务模块的调用,如果是升级则从版本配置文件中将 版本号装载到版本公告牌中,如果是回滚则直接切换版本公告牌的当前使用块。配置文件 记录应用版本号以及应用插件的存放目录。其中,应用版本获取模块接收外部请求访问版本公告牌,获取当前版本。首先,应用处理接口类模块为AppPlugin,里面定义三个纯虚接口 SVrInit、 svrDone和svrProcess。应用处理接口类在应用插件中实现应用处理接口类的派生类。 svrlnit用于应用插件中实现服务启动时应用需要做的一些初始化工作,比如建立数据库 连接等;svrDone用于应用插件中实现服务停止时应用需要做的一些资源释放工作,比如 断开数据库连接等;svrProcess用于应用插件中实现应用处理的具体业务逻辑。应用插件装/卸载模块实现一个具有Wrapper facade模式的类PluginHelper,该 类包括=Load函数,封装操作系统的dlopen函数,实现应用插件的装载;Unload函数,封装 dlclose函数,实现应用插件的卸载。应用处理接口类动态注册模块,实现动态加载C++对象到宿主程序的工厂,定义 工厂类factory,它维护一个全局的C++对象创建方法关联容器CreatorContainer,把类名 和类对象的创建函数指针关联,如下所示typedef void水(水CreateFuntion) (void);typedef map〈string,CreateFuntion>CreatorContainer ;Factory 还提供一个 void*Create (const std: string& className)方法被宿主 程序调用,该方法根据类名className检索关联容器CreatorContainer获取类的创建函数 指针,然后执行该函数创建对象。定义模板类 Creater :template〈class T>class Crcater ;该模板类提供create函数创建模板T类型的对象static void氺create (){return static_cast<void氺>(new Τ) ;}模板类 Creater 的构造函数 Creater (const std::string& classname)把函数指 针create和模板参数类名classname注册到Factory类维护的容器CreatorContainer中。定义一个宏REGISTER #define REGISTER(class_name)\Creater<class_name>class_name(#class_name)这个宏在应用处理接口派生类中使用,例如一个应用处理接口派生类叫BusinessPlugin,那么在该类的定义文件(cpp文 件)中需声明宏:REGISTER(BusinessPlugin),该宏用BusinessPlugin这个类型参数化 Creater模板类,定义一个模板类的全局对象。因为是全局对象,所以它在dlopen加载应用 插件时会定义Creater〈BusinessPlugin>BusinessPlugin ( "BusinessPlugin,,);
这样,就执行Creater的构造函数把应用处理接口派生类的创建函数注册到 Factory维护的C++对象创建方法容器中,宿主程序调用Factory类的create方法就能创 建注册类的对象,然后就可以调用对象的svrlnit、svrDone和svrProcess方法,执行相应 应用业务逻辑。应用插件模块是后缀为.so类型的动态库文件,该模块将应用的业务处理逻辑 打包,里面包括应用处理接口派生类,具体打包方式按照操作系统提供的方式,比如在 Solaris平台,编译选项采用-KPIC,链接选项采用-G。宿主程序模块采用Tuxedo(交易中间件)服务实现,在启动时初始化当前版本为 空,在处理外部请求之前调用应用版本获取模块获取应用版本,比较版本号和应用当前使 用的版本号,如果不一致,则先调用应用插件卸载模块,将当前使用的应用插件卸载,然后 调用应用插件装载模块,装载新版本的应用插件,然后根据应用插件接口派生类的名字检 索C++对象创建方法容器,获得派生类的创建函数并调用,创建应用插件接口对象,然后执 行对象的svrProcess方法,执行相应应用业务逻辑得到处理结果并返回。如果一次应用处 理需要分为多个应用模块的话,第一个模块负责把得到的应用版本号发给后续模块,从而 保证这次请求的整个处理过程采用统一的应用版本。本实施实例中,应用版本发布模块包括两个tuxedo (交易中间件)服务应用版本 总控服务模块(APP_VER_CTL)、应用版本管理服务模块(APP_VER_MNG),另外还有版本公告 牌、版本配置文件。本实施实例中,如图5所示,应用版本总控服务模块统一控制版本的更新以及多 个机器之间版本的一致性。它接收管理工具的更新请求并分发给应用版本管理服务模块 (APP_VER_MNG)。管理服务模块负责将版本信息更新至版本公告牌并由总控服务模块控制 生效。应用版本获取服务模块通过访问版本公告牌获得当前版本信息,通过报文传给后续 应用处理。具体升级流程如下版本配置文件被更新;调用版本管理服务读取配置文件至版本公告牌;应用服务读取公告牌,发现版本变化后重新装卸应用插件;如需回滚则直接调用版本管理服务,根据配置文件中回滚信息,直接回滚至之前 版本。1)应用版本总控服务模块服务进程名为app_Ver_Ctl,为了防止版本更新请求的并发,只部署一个,启动顺 序在管理服务和应用服务之前。总控服务模块接收版本更新请求,异步调用管理服务模块,要求更新版本信息。待 所有管理服务模块均更新结束后,同步调用管理服务模块,切换活动块,生效新的版本信 肩、ο数据接口 服务名为APPVERCTL序号中文名英文名数据类型描述输入1指令FC0MMANDshort1:升级 2丨丨丨丨滚输出i状态FSTATUSshort0成功 -1:失败2)应用版本管理服务模块服务进程名为app_Ver_mng,一个机器部署一个,启动顺序在总控服务模块之后和 应用服务模块之前。服务启动时创建版本公告牌的共享内存,并初始化。管理服务模块接收总控服务模块的版本更新请求,生效请求。版本信息查询请求将控制块结构返回。服务停止时释放分配的共享内存块。数据接口 >版本更新服务服务名为APPVMLXX,XX表示01_99的数字,代表不同机器,每个物理机各不相同。
η-'ν中文名英文名数据炎型描述 ΛΤ 指令FC0MMANI)short1升级,2:回滚活动块标志FACTIVESiMIDSTRING活动块标志,A或B输出1状态n^STATUSshort0成功, -1:失败输出2版本信息FVERNAMESTRING成/[J插件版本,如 l.ibav. so. 1.0)>版本生效服务服务名为APPVMAXX,XX表示01_99的数字,代表不同机器,每个物理机各不相同。
序号中文名英文名数据类型描述输入1活动块标志FACTIVESHMIDSTRING活动块标志,A或B输出1状态FSTATUSshort0 成功,-1 失败3)版本公告牌版本公告牌由一块共享内存组成,逻辑上划分为共享内存控制块、共享内存块A 和共享内存块B三个部分。控制块存放控制信息,内存块A和B存放版本信息。共享内存块由外部设定的key值创建。
共享内存控制块存放如下数据当前可用的共享内存块编号,A或B,在内存初始创建后(即管理服务启动时),两 块共享内存均不可用,设为0。共享内存块A/B的生效时间。共享内存块A/B的状态,正常/装载中/失效。共享内存块A/B共享内存块A/B由中顺序存放着各应用的版本信息应用的代号charappId[MAXAPPIDLEN];应用的版本:charverName [2] [APPVERSIONLEN]。4)版本配置文件MAXMACHINE =应用服务器机器数目......#下面是应用版本信息[PLUGIN]IPCKEY=版本公告牌的共享内存键值PLUGIN_PATH =插件存放目录APP_VER =应用插件版本名本实施实例中,应用版本获取服务模块采用一个Tuxedo服务实现。服务进程名为app_fe_rcv,一个机器可部署多个,启动顺序在总控服务模块、管理 服务模块之后和应用服务模块之前。服务启动时连接版本公告牌的共享内存。接收应用请求,查询版本公告牌,获取版本信息,将版本信息填入报文,发给应用 服务。服务停止时断开版本公告牌的共享内存。数据接口服务名为APPFERCV
权利要求
1.一种C++应用程序版本动态管理系统,其特征在于,所示系统包括应用插件模块; 宿主程序模块;应用处理接口类模块;应用处理接口类动态注册模块;应用插件装/卸载模 块;应用版本发布模块;应用版本获取模块。
2.根据权利要求1的C++应用程序版本动态管理系统,其中,所述应用插件模块是后缀为.so类型的动态库文件,该模块将应用的业务处理逻辑打包;所述宿主程序模块是可执行文件,相当于应用插件的容器,负责装载应用插件,创建应 用处理接口对象,接受外部调用后,执行接口对象中的接口函数,该函数实现应用插件中的 业务逻辑处理;所述应用处理接口类模块用于实现宿主程序与应用插件之间的调用接口 ;所述应用处 理接口类模块包括一个基类和相应的派生类,并且基类中的接口函数定义成纯虚函数,由 宿主程序调用,派生类中的接口函数实现具体应用逻辑,打包在应用插件中,宿主程序装载 应用插件以后,可以通过执行纯虚接口函数,利用C++对象的多态性来调用插件中的应用 逻辑;所述应用处理接口类动态注册模块是在应用插件被装载的过程中,将应用处理接口派 生类从应用插件中动态加载到宿主程序,并且要支持一个应用插件中注册多个不同的应用 处理接口派生类;所述应用插件装/卸载模块,由宿主程序使用,通过调用操作系统库函数dlopen将应 用插件装载进宿主程序;通过调用操作系统库函数dlclose将应用插件从宿主程序中卸 载。所述应用版本发布模块,包括应用版本总控服务模块、应用版本管理服务模块和版本 公告牌以及配置文件;所述应用版本发布模块将用户配置的应用版本号从配置文件中加载 到版本公告牌中,用于宿主程序模块感知版本的变化,实现应用集群环境下的版本发布;所述应用版本获取模块接收外部请求访问版本公告牌,获取当前版本。
3.根据权利要求2的C++应用程序版本动态管理系统,其中,所述宿主程序模块在处理外部请求之前还负责调用所述应用版本获取模块获取应用 版本,比较版本号和应用当前使用的版本号,如果发生变化,则先调用所述应用插件卸载模 块,将当前使用的应用插件卸载,然后调用所述应用插件装载模块,装载新版本的应用插 件,实现版本的更新;如果一次应用处理需要分为多个应用模块的话,第一个模块负责把得 到的应用版本号发给后续模块,从而保证这次请求的整个处理过程采用统一的应用版本。
4.根据权利要求2的C++应用程序版本动态管理系统,其中,所述应用处理接口类动态注册模块还提供一个根据类名从应用插件中动态加载所需 的C++对象的工厂方法,所述宿主程序根据应用处理接口派生类名调用工厂方法创建应用 处理接口对象;应用插件中的应用处理接口派生类中调用一个宏,该宏定义了一个全局对 象,所述宿主程序调用操作系统库函数dlopen装载应用插件时,全局对象的构造函数被执 行完成把所述应用处理接口派生类的创建函数注册到工厂方法维护的C++对象创建方法 容器中,该容器把C++类名和类的创建方法进行关联,所述宿主程序通过所述工厂方法根 据所述应用处理接口派生类名检索创建方法并执行,完成C++对象的动态加载,并且支持 在一个应用插件中注册多个应用处理接口派生类。
5.根据权利要求2的C++应用程序版本动态管理系统,其中,在所述应用版本发布模块中所述版本公告牌采用共享内存存储,分为A块和B块两个部分,在版本更新时更新非当 前使用块,版本生效时切换当前使用块,实现版本回滚方便,只需切换当前使用块即可;所述应用版本总控服务模块负责接收版本升级的命令,然后调用所述版本管理服务模 块,实现版本公告牌的版本更新;所述应用版本管理服务模块接收应用版本总控服务模块的调用,如果是升级则从版本 配置文件中将版本号装载到所述版本公告牌中,如果是回滚则直接切换所述版本公告牌的 当前使用块;所述配置文件记录应用版本号以及应用插件的存放目录。
6.一种通过权利要求1-5所述的C++应用程序版本动态管理系统进行C++应用程序版 本动态管理的方法,其特征在于所述方法包括版本发布和版本更新两个部分,其中所述版本发布包括如下步骤1)应用版本总控服务模块接收版本升级的命令;2)应用版本总控服务模块调用版本管理服务模块;3)应用版本管理服务模块判断指令,如果是升级则从版本配置文件中将版本号装载到 版本公告牌中,如果是回滚则直接切换版本公告牌的当前使用块;所述版本更新包括如下步骤1)宿主程序模块在启动时,调用应用处理接口类动态注册模块,创建一个C++对象创 建方法容器,该容器把C++类名和类的创建方法进行关联;2)宿主程序模块接收应用请求命令;3)宿主程序模块调用应用版本获取模块获取版本号;4)宿主程序在执行业务逻辑之前先判断该版本号是否与宿主程序当前正在使用的插 件版本一致(最初执行时宿主程序当前插件版本号初始为空,所以会初始装载一次),如一 致则继续第7步骤执行,不一致则先调用应用插件卸载模块将当前使用的应用插件卸载, 然后根据获取的版本号调用应用插件装载模块装载新版本的应用插件,实现版本的更新;5)应用插件在被装载时,会调用应用处理接口类动态注册模块,把应用处理接口派生 类的创建函数注册到宿主程序维护的C++对象创建方法容器中;6)宿主程序根据应用处理接口派生类类名检索C++对象创建方法容器,获取应用处理 接口派生类的创建函数并执行,创建应用处理接口对象;7)宿主程序调用应用处理接口对象的接口函数,开始执行应用插件中的业务处理逻辑;8)产生处理结果。
全文摘要
本发明提供一种C++应用程序版本动态管理系统和方法,包括应用插件模块、宿主程序模块、应用处理接口类模块、应用处理接口类动态注册模块、应用插件装/卸载模块、应用版本发布模块、应用版本获取模块;通过合理利用动态共享库技术,将应用逻辑封装成动态共享库,同时设计系统框架对其实现动态装载,在应用程序版本升级时,只需升级相应动态共享库文件,然后系统框架对其进行装载,实现应用程序的在线更新,整个过程不需要停机中断服务,即所谓热插拔。
文档编号G06F9/445GK102073520SQ201010624578
公开日2011年5月25日 申请日期2010年12月30日 优先权日2010年12月30日
发明者杨勇生, 段锴, 许囡囡 申请人:中国民航信息网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1