[发明专利]一种C++应用程序版本动态管理系统和方法无效
| 申请号: | 201010624578.6 | 申请日: | 2010-12-30 |
| 公开(公告)号: | CN102073520A | 公开(公告)日: | 2011-05-25 |
| 发明(设计)人: | 段锴;许囡囡;杨勇生 | 申请(专利权)人: | 中国民航信息网络股份有限公司 |
| 主分类号: | G06F9/445 | 分类号: | G06F9/445 |
| 代理公司: | 北京锐思知识产权代理事务所(普通合伙) 11341 | 代理人: | 李涛 |
| 地址: | 100010 北*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 c++ 应用程序 版本 动态 管理 系统 方法 | ||
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)产生处理结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国民航信息网络股份有限公司,未经中国民航信息网络股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010624578.6/1.html,转载请声明来源钻瓜专利网。





