CN102073520A - 一种c++应用程序版本动态管理***和方法 - Google Patents

一种c++应用程序版本动态管理***和方法 Download PDF

Info

Publication number
CN102073520A
CN102073520A CN2010106245786A CN201010624578A CN102073520A CN 102073520 A CN102073520 A CN 102073520A CN 2010106245786 A CN2010106245786 A CN 2010106245786A CN 201010624578 A CN201010624578 A CN 201010624578A CN 102073520 A CN102073520 A CN 102073520A
Authority
CN
China
Prior art keywords
application
version
module
plug
host program
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.)
Pending
Application number
CN2010106245786A
Other languages
English (en)
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.)
China Travelsky Technology Co Ltd
Original Assignee
China Travelsky Technology Co Ltd
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 China Travelsky Technology Co Ltd filed Critical China Travelsky Technology Co Ltd
Priority to CN2010106245786A priority Critical patent/CN102073520A/zh
Publication of CN102073520A publication Critical patent/CN102073520A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种C++应用程序版本动态管理***和方法,包括应用插件模块、宿主程序模块、应用处理接口类模块、应用处理接口类动态注册模块、应用插件装/卸载模块、应用版本发布模块、应用版本获取模块;通过合理利用动态共享库技术,将应用逻辑封装成动态共享库,同时设计***框架对其实现动态装载,在应用程序版本升级时,只需升级相应动态共享库文件,然后***框架对其进行装载,实现应用程序的在线更新,整个过程不需要停机中断服务,即所谓热插拔。

Description

一种C++应用程序版本动态管理***和方法
技术领域
本发明涉及一种C++应用程序版本动态管理***和方法,在不停止服务的情况下,对应用逻辑进行更新、扩展与增强,实现“即插即用”。
背景技术
目前阶段,一套应用***在业务逻辑发生调整变化,需要升级时,主要采用以下几种实施方案:一是申请计划停机,更新应用程序;二是切换到备份***,更新应用程序;三是采用集群方案,按机器、分批次更新应用程序。不论采用哪种方案,有的需要中断***服务;有的上线操作或者故障后回滚操作非常复杂,加重运维人员工作负担;有的需要额外增加设备资源,提高运维成本。
插件(plug-in)技术在业界有着广泛的应用,很多软件(比如firef0x、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*24小时服务的关键应用***尤为重要;
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。应用处理接口类在应用插件中实现应用处理接口类的派生类。svrInit用于应用插件中实现服务启动时应用需要做的一些初始化工作,比如建立数据库连接等;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 T);}
模板类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方法就能创建注册类的对象,然后就可以调用对象的svrInit、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
Figure BSA00000417654900081
2)应用版本管理服务模块
服务进程名为app_ver_mng,一个机器部署一个,启动顺序在总控服务模块之后和应用服务模块之前。
服务启动时创建版本公告牌的共享内存,并初始化。
管理服务模块接收总控服务模块的版本更新请求,生效请求。
版本信息查询请求将控制块结构返回。
服务停止时释放分配的共享内存块。
数据接口:
Figure BSA00000417654900082
版本更新服务:
服务名为APPVMLXX,XX表示01-99的数字,代表不同机器,每个物理机各不相同。
Figure BSA00000417654900083
Figure BSA00000417654900084
版本生效服务:
服务名为APPVMAXX,XX表示01-99的数字,代表不同机器,每个物理机各不相同。
  序号   中文名   英文名   数据类型   描述
  输入1   活动块标志   FACTIVESHMID   STRING   活动块标志,A或B
  输出1   状态   FSTATUS   short   0:成功,-1:失败
3)版本公告牌
版本公告牌由一块共享内存组成,逻辑上划分为共享内存控制块、共享内存块A和共享内存块B三个部分。控制块存放控制信息,内存块A和B存放版本信息。
共享内存块由外部设定的key值创建。
共享内存控制块存放如下数据:
当前可用的共享内存块编号,A或B,在内存初始创建后(即管理服务启动时),两块共享内存均不可用,设为0。
共享内存块A/B的生效时间。
共享内存块A/B的状态,正常/装载中/失效。
共享内存块A/B
共享内存块A/B由中顺序存放着各应用的版本信息:
应用的代号:char appId[MAXAPPIDLEN];
应用的版本:char verName[2][APPVERSIONLEN]。
4)版本配置文件
MAXMACHINE=应用服务器机器数目
……
#下面是应用版本信息
[PLUGIN]
IPCKEY=版本公告牌的共享内存键值
PLUGIN_PATH=插件存放目录
APP_VER=应用插件版本名
本实施实例中,应用版本获取服务模块采用一个Tuxedo服务实现。
服务进程名为app_fe_rcv,一个机器可部署多个,启动顺序在总控服务模块、管理服务模块之后和应用服务模块之前。
服务启动时连接版本公告牌的共享内存。
接收应用请求,查询版本公告牌,获取版本信息,将版本信息填入报文,发给应用服务。
服务停止时断开版本公告牌的共享内存。
数据接口:
服务名为APPFERCV
Figure BSA00000417654900101
本发明还提供一种C++应用程序版本动态管理方法,该方法包括版本发布和版本更新两个部分:
其中,如图3所示,版本发布包括如下步骤:
1.应用版本总控服务模块接收版本升级的命令。
2.应用版本总控服务模块调用版本管理服务模块。
3.应用版本管理服务模块判断指令,如果是升级则从版本配置文件中将版本号装载到版本公告牌中,如果是回滚则直接切换版本公告牌的当前使用块。
其中,如图4所示,版本更新包括如下步骤:
1.宿主程序模块在启动时,调用应用处理接口类动态注册模块,创建一个C++对象创建方法容器,该容器把C++类名和类的创建方法进行关联,然后根据配置文件中配置的版本号调用应用插件装载模块装载该版本的应用插件。
2.应用插件在被装载时,会调用应用处理接口类动态注册模块,把应用处理接口派生类的创建函数注册到宿主程序维护的C++对象创建方法容器中。
3.宿主程序根据应用处理接口派生类类名检索C++对象创建方法容器,获取应用处理接口派生类的创建函数并执行,创建应用处理接口对象。
4.宿主程序在进程内存空间中保存当前使用版本号,启动完毕。
5.宿主程序模块接收应用请求命令。
6.宿主程序模块调用应用版本获取模块访问版本公告牌,从公告牌当前使用块中获取版本号。
7.宿主程序在执行业务逻辑之前先判断该版本号是否与宿主程序当前正在使用的插件版本一致,如一致则继续第10步骤执行,不一致则先删除当前应用处理接口对象,调用应用插件卸载模块将当前使用的应用插件卸载,然后根据获取的版本号调用应用插件装载模块装载新版本的应用插件,实现版本的更新。
8.应用插件在被装载时,会调用应用处理接口类动态注册模块,把应用处理接口派生类的创建函数注册到宿主程序维护的C++对象创建方法容器中。
9.宿主程序根据应用处理接口派生类类名检索C++对象创建方法容器,获取应用处理接口派生类的创建函数并执行,创建应用处理接口对象。
10.宿主程序调用应用处理接口对象的接口函数,开始执行应用插件中的业务处理逻辑。
11.产生处理结果。

Claims (6)

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)产生处理结果。
CN2010106245786A 2010-12-30 2010-12-30 一种c++应用程序版本动态管理***和方法 Pending CN102073520A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010106245786A CN102073520A (zh) 2010-12-30 2010-12-30 一种c++应用程序版本动态管理***和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010106245786A CN102073520A (zh) 2010-12-30 2010-12-30 一种c++应用程序版本动态管理***和方法

Publications (1)

Publication Number Publication Date
CN102073520A true CN102073520A (zh) 2011-05-25

Family

ID=44032066

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010106245786A Pending CN102073520A (zh) 2010-12-30 2010-12-30 一种c++应用程序版本动态管理***和方法

Country Status (1)

Country Link
CN (1) CN102073520A (zh)

Cited By (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102915247A (zh) * 2012-08-31 2013-02-06 杭州斯凯网络科技有限公司 Apk插件化管理方法
CN103313231A (zh) * 2013-07-03 2013-09-18 百度在线网络技术(北京)有限公司 移动终端中应用程序的升级方法、***和服务器
CN103631631A (zh) * 2013-12-24 2014-03-12 江苏优控新能源科技有限公司 一种Android软件自动更新程序核心模块的方法
CN103649915A (zh) * 2013-07-31 2014-03-19 华为技术有限公司 关联插件管理方法、设备及***
CN103885365A (zh) * 2014-03-24 2014-06-25 三和智控(北京)***集成有限公司 一种动态管理控制逻辑集的方法
CN103927244A (zh) * 2014-04-15 2014-07-16 南威软件股份有限公司 一种基于动态代理实现的插件调度过程监控的方法
CN103942131A (zh) * 2013-01-23 2014-07-23 腾讯科技(深圳)有限公司 监控底层接口是否变化的方法及装置
CN104274193A (zh) * 2013-07-10 2015-01-14 南京普爱射线影像设备有限公司 一种数字化x射线机影像设备接口方法
CN104427387A (zh) * 2013-09-09 2015-03-18 联想(北京)有限公司 一种信息处理方法及装置
CN104765624A (zh) * 2014-01-06 2015-07-08 腾讯科技(深圳)有限公司 虚拟机应用程序的更新处理方法和装置
CN104850015A (zh) * 2014-09-09 2015-08-19 北汽福田汽车股份有限公司 一种软件封装方法及一种汽车电子控制器
CN105681346A (zh) * 2016-03-15 2016-06-15 福建星海通信科技有限公司 一种基于工厂类实现报文解析的方法
CN105824712A (zh) * 2016-03-30 2016-08-03 深圳市金证科技股份有限公司 一种业务逻辑的执行方法和装置
CN105847446A (zh) * 2016-05-31 2016-08-10 腾讯科技(深圳)有限公司 一种网络数据的获取方法、装置和***
CN106325957A (zh) * 2016-08-31 2017-01-11 广州品唯软件有限公司 一种插件加载方法及设备
CN106325939A (zh) * 2016-08-25 2017-01-11 苏州蓝海彤翔***科技有限公司 目标对象启动方法和业务程序***
CN103763325B (zh) * 2014-01-26 2017-02-01 深圳英飞拓科技股份有限公司 构建ip安防产品开发环境的方法
WO2016169530A3 (zh) * 2016-06-22 2017-05-11 白杨 面向服务的模块化***体系架构
CN106713469A (zh) * 2016-12-29 2017-05-24 上海智臻智能网络科技股份有限公司 用于分布式容器的动态加载方法、装置及***
CN106775857A (zh) * 2016-12-07 2017-05-31 珠海格力电器股份有限公司 一种服务器的组件热删除、热增加和热替换方法及装置
CN106815056A (zh) * 2017-02-17 2017-06-09 银联国际有限公司 基于jcl框架的应用热部署方法和装置
CN106919378A (zh) * 2016-08-24 2017-07-04 阿里巴巴集团控股有限公司 基于增量的应用更新和测试方法及***、服务器及客户端
CN107015818A (zh) * 2017-06-06 2017-08-04 北京洋浦伟业科技发展有限公司 应用的非本体部分更新的外部覆盖更新方法和装置
CN107392837A (zh) * 2017-07-03 2017-11-24 南京觅踪电子科技有限公司 一种动态插件式影像链设计方法
CN107707544A (zh) * 2017-09-29 2018-02-16 国网江苏省电力公司电力科学研究院 一种iec‑61850设备自动识别配置方法
CN108196900A (zh) * 2017-12-08 2018-06-22 五八有限公司 组件的注册方法及装置
CN108681473A (zh) * 2018-05-18 2018-10-19 广州酷狗计算机科技有限公司 应用程序生成、运行方法、装置、计算机设备和存储介质
CN109032651A (zh) * 2018-08-24 2018-12-18 深圳创维-Rgb电子有限公司 应用更新方法、智能终端及计算机可读存储介质
CN109144877A (zh) * 2018-08-31 2019-01-04 北京奇艺世纪科技有限公司 一种应用检测方法和装置
CN110221877A (zh) * 2019-06-12 2019-09-10 北京字节跳动网络技术有限公司 一种应用程序的运行方法、装置、电子设备、及存储介质
CN110471690A (zh) * 2019-06-25 2019-11-19 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质
CN110704035A (zh) * 2019-10-17 2020-01-17 北京首贝科技发展有限公司 一种组插件式软件架构***及其实现方法
CN110908726A (zh) * 2018-09-14 2020-03-24 广州神马移动信息科技有限公司 数据管理方法、装置、设备及计算机可读存储介质
CN111176645A (zh) * 2019-12-30 2020-05-19 国电南瑞科技股份有限公司 面向电网大数据应用的数据集成管理***及其实现方法
CN111740876A (zh) * 2020-05-29 2020-10-02 北京沃东天骏信息技术有限公司 一种应用程序、测试方法、存储介质及电子设备
CN111984299A (zh) * 2019-05-22 2020-11-24 青岛海信宽带多媒体技术有限公司 一种数据加载的方法和设备
CN112148332A (zh) * 2020-09-30 2020-12-29 亮风台(上海)信息科技有限公司 工具化***及其更新方法、终端设备、存储介质
CN112988279A (zh) * 2021-04-16 2021-06-18 广州南方卫星导航仪器有限公司 一种对象处理方法、装置、电子设备及存储介质
CN113157692A (zh) * 2021-02-07 2021-07-23 上海万得宏汇信息技术有限公司 一种关系型内存数据库***
CN113179188A (zh) * 2021-05-26 2021-07-27 深圳平安智汇企业信息管理有限公司 服务降级动态实现方法、装置、计算机设备及存储介质
CN113268266A (zh) * 2021-05-19 2021-08-17 上海视九信息科技有限公司 小程序渲染框架多版本并存管理方法、***和介质
CN113282335A (zh) * 2021-07-19 2021-08-20 北京江融信科技有限公司 一种应用集群业务参数的多版本配置方法及***
CN113391852A (zh) * 2021-06-07 2021-09-14 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN113867833A (zh) * 2021-09-15 2021-12-31 素泰智能科技(上海)有限公司 一种异构环境下的插件运行方法及***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1741532A (zh) * 2005-09-12 2006-03-01 林兴陆 智能网框架装置
CN1924805A (zh) * 2005-09-02 2007-03-07 腾讯科技(深圳)有限公司 在无线二进制运行环境平台实现动态链接库方法
CN1979418A (zh) * 2005-12-07 2007-06-13 英业达股份有限公司 动态升级程序的方法
CN101272481A (zh) * 2008-04-02 2008-09-24 武汉大学 一种视频监控前端设备接入方法
CN101436138A (zh) * 2007-11-16 2009-05-20 苏州科达通信技术发展有限公司 一种用于软件升级且动态回滚的控制装置以及控制方法
CN101566954A (zh) * 2009-05-31 2009-10-28 珠海金山软件股份有限公司 一种管理插件的方法及管理插件的装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1924805A (zh) * 2005-09-02 2007-03-07 腾讯科技(深圳)有限公司 在无线二进制运行环境平台实现动态链接库方法
CN1741532A (zh) * 2005-09-12 2006-03-01 林兴陆 智能网框架装置
CN1979418A (zh) * 2005-12-07 2007-06-13 英业达股份有限公司 动态升级程序的方法
CN101436138A (zh) * 2007-11-16 2009-05-20 苏州科达通信技术发展有限公司 一种用于软件升级且动态回滚的控制装置以及控制方法
CN101272481A (zh) * 2008-04-02 2008-09-24 武汉大学 一种视频监控前端设备接入方法
CN101566954A (zh) * 2009-05-31 2009-10-28 珠海金山软件股份有限公司 一种管理插件的方法及管理插件的装置

Cited By (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102915247A (zh) * 2012-08-31 2013-02-06 杭州斯凯网络科技有限公司 Apk插件化管理方法
CN102915247B (zh) * 2012-08-31 2015-08-19 杭州斯凯网络科技有限公司 Apk插件化管理方法
CN103942131A (zh) * 2013-01-23 2014-07-23 腾讯科技(深圳)有限公司 监控底层接口是否变化的方法及装置
CN103942131B (zh) * 2013-01-23 2018-07-06 腾讯科技(深圳)有限公司 监控底层接口是否变化的方法及装置
CN103313231A (zh) * 2013-07-03 2013-09-18 百度在线网络技术(北京)有限公司 移动终端中应用程序的升级方法、***和服务器
CN104274193A (zh) * 2013-07-10 2015-01-14 南京普爱射线影像设备有限公司 一种数字化x射线机影像设备接口方法
CN103649915B (zh) * 2013-07-31 2016-11-02 华为技术有限公司 关联插件管理方法、设备及***
CN103649915A (zh) * 2013-07-31 2014-03-19 华为技术有限公司 关联插件管理方法、设备及***
CN104427387A (zh) * 2013-09-09 2015-03-18 联想(北京)有限公司 一种信息处理方法及装置
CN104427387B (zh) * 2013-09-09 2018-02-27 联想(北京)有限公司 一种信息处理方法及装置
CN103631631A (zh) * 2013-12-24 2014-03-12 江苏优控新能源科技有限公司 一种Android软件自动更新程序核心模块的方法
CN104765624A (zh) * 2014-01-06 2015-07-08 腾讯科技(深圳)有限公司 虚拟机应用程序的更新处理方法和装置
CN104765624B (zh) * 2014-01-06 2020-04-07 腾讯科技(深圳)有限公司 虚拟机应用程序的更新处理方法和装置
CN103763325B (zh) * 2014-01-26 2017-02-01 深圳英飞拓科技股份有限公司 构建ip安防产品开发环境的方法
CN103885365A (zh) * 2014-03-24 2014-06-25 三和智控(北京)***集成有限公司 一种动态管理控制逻辑集的方法
CN103927244B (zh) * 2014-04-15 2017-06-06 南威软件股份有限公司 一种基于动态代理实现的插件调度过程监控的方法
CN103927244A (zh) * 2014-04-15 2014-07-16 南威软件股份有限公司 一种基于动态代理实现的插件调度过程监控的方法
CN104850015A (zh) * 2014-09-09 2015-08-19 北汽福田汽车股份有限公司 一种软件封装方法及一种汽车电子控制器
CN104850015B (zh) * 2014-09-09 2018-02-23 北汽福田汽车股份有限公司 一种软件封装方法及一种汽车电子控制器
CN105681346A (zh) * 2016-03-15 2016-06-15 福建星海通信科技有限公司 一种基于工厂类实现报文解析的方法
CN105824712A (zh) * 2016-03-30 2016-08-03 深圳市金证科技股份有限公司 一种业务逻辑的执行方法和装置
CN105847446A (zh) * 2016-05-31 2016-08-10 腾讯科技(深圳)有限公司 一种网络数据的获取方法、装置和***
WO2016169530A3 (zh) * 2016-06-22 2017-05-11 白杨 面向服务的模块化***体系架构
US10700948B2 (en) 2016-06-22 2020-06-30 Yang Bai Service-oriented modular system architecture
CN106919378A (zh) * 2016-08-24 2017-07-04 阿里巴巴集团控股有限公司 基于增量的应用更新和测试方法及***、服务器及客户端
CN106325939A (zh) * 2016-08-25 2017-01-11 苏州蓝海彤翔***科技有限公司 目标对象启动方法和业务程序***
CN106325957A (zh) * 2016-08-31 2017-01-11 广州品唯软件有限公司 一种插件加载方法及设备
CN106775857A (zh) * 2016-12-07 2017-05-31 珠海格力电器股份有限公司 一种服务器的组件热删除、热增加和热替换方法及装置
CN106713469B (zh) * 2016-12-29 2019-12-13 上海智臻智能网络科技股份有限公司 用于分布式容器的动态加载方法、装置及***
CN106713469A (zh) * 2016-12-29 2017-05-24 上海智臻智能网络科技股份有限公司 用于分布式容器的动态加载方法、装置及***
CN106815056A (zh) * 2017-02-17 2017-06-09 银联国际有限公司 基于jcl框架的应用热部署方法和装置
CN106815056B (zh) * 2017-02-17 2020-09-08 银联国际有限公司 基于jcl框架的应用热部署方法和装置
CN107015818A (zh) * 2017-06-06 2017-08-04 北京洋浦伟业科技发展有限公司 应用的非本体部分更新的外部覆盖更新方法和装置
CN107392837A (zh) * 2017-07-03 2017-11-24 南京觅踪电子科技有限公司 一种动态插件式影像链设计方法
CN107707544A (zh) * 2017-09-29 2018-02-16 国网江苏省电力公司电力科学研究院 一种iec‑61850设备自动识别配置方法
CN108196900A (zh) * 2017-12-08 2018-06-22 五八有限公司 组件的注册方法及装置
CN108681473A (zh) * 2018-05-18 2018-10-19 广州酷狗计算机科技有限公司 应用程序生成、运行方法、装置、计算机设备和存储介质
CN109032651A (zh) * 2018-08-24 2018-12-18 深圳创维-Rgb电子有限公司 应用更新方法、智能终端及计算机可读存储介质
CN109144877A (zh) * 2018-08-31 2019-01-04 北京奇艺世纪科技有限公司 一种应用检测方法和装置
CN110908726A (zh) * 2018-09-14 2020-03-24 广州神马移动信息科技有限公司 数据管理方法、装置、设备及计算机可读存储介质
CN111984299A (zh) * 2019-05-22 2020-11-24 青岛海信宽带多媒体技术有限公司 一种数据加载的方法和设备
CN110221877A (zh) * 2019-06-12 2019-09-10 北京字节跳动网络技术有限公司 一种应用程序的运行方法、装置、电子设备、及存储介质
CN110221877B (zh) * 2019-06-12 2022-06-07 北京字节跳动网络技术有限公司 一种应用程序的运行方法、装置、电子设备、及存储介质
CN110471690B (zh) * 2019-06-25 2021-09-14 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质
CN110471690A (zh) * 2019-06-25 2019-11-19 珠海格力电器股份有限公司 动态链接库so文件的加载方法、装置及存储介质
CN110704035A (zh) * 2019-10-17 2020-01-17 北京首贝科技发展有限公司 一种组插件式软件架构***及其实现方法
CN111176645A (zh) * 2019-12-30 2020-05-19 国电南瑞科技股份有限公司 面向电网大数据应用的数据集成管理***及其实现方法
CN111740876A (zh) * 2020-05-29 2020-10-02 北京沃东天骏信息技术有限公司 一种应用程序、测试方法、存储介质及电子设备
CN112148332A (zh) * 2020-09-30 2020-12-29 亮风台(上海)信息科技有限公司 工具化***及其更新方法、终端设备、存储介质
CN112148332B (zh) * 2020-09-30 2023-09-05 亮风台(上海)信息科技有限公司 工具化***及其更新方法、终端设备、存储介质
CN113157692A (zh) * 2021-02-07 2021-07-23 上海万得宏汇信息技术有限公司 一种关系型内存数据库***
CN113157692B (zh) * 2021-02-07 2023-10-27 上海万得宏汇信息技术有限公司 一种关系型内存数据库***
CN112988279A (zh) * 2021-04-16 2021-06-18 广州南方卫星导航仪器有限公司 一种对象处理方法、装置、电子设备及存储介质
CN113268266A (zh) * 2021-05-19 2021-08-17 上海视九信息科技有限公司 小程序渲染框架多版本并存管理方法、***和介质
CN113268266B (zh) * 2021-05-19 2024-02-02 上海视九信息科技有限公司 小程序渲染框架多版本并存管理方法、***和介质
CN113179188A (zh) * 2021-05-26 2021-07-27 深圳平安智汇企业信息管理有限公司 服务降级动态实现方法、装置、计算机设备及存储介质
CN113391852A (zh) * 2021-06-07 2021-09-14 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN113391852B (zh) * 2021-06-07 2024-06-04 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN113282335A (zh) * 2021-07-19 2021-08-20 北京江融信科技有限公司 一种应用集群业务参数的多版本配置方法及***
CN113867833A (zh) * 2021-09-15 2021-12-31 素泰智能科技(上海)有限公司 一种异构环境下的插件运行方法及***
CN113867833B (zh) * 2021-09-15 2024-03-15 素泰智能科技(上海)有限公司 一种异构环境下的插件运行方法及***

Similar Documents

Publication Publication Date Title
CN102073520A (zh) 一种c++应用程序版本动态管理***和方法
CN100489778C (zh) Java程序可动态更新化实现方法
CN110275722A (zh) 用于升级应用的方法、装置、设备和存储介质
CN105022630B (zh) 一种组件管理***及组件管理方法
CN108027724A (zh) 内核可加载模块的服务中升级
CN102314358B (zh) 一种在云平台上以soa的方式部署常规应用的方法
CN104714828A (zh) 应用安装、运行方法及装置
CN103207797A (zh) 基于通用可扩展固件接口固件***的胶囊式定制更新方法
CN102323879A (zh) 完整网络中间件运行支撑平台及异构中间件的集成方法
CN101211271A (zh) 根据活动性状态控制虚拟机
TW521210B (en) Modular computer system and related method
CN104657149A (zh) 一种存储***的管理模块的软件框架实现方法
CN102207879A (zh) Lua脚本热更新方法及***
CN103530165B (zh) 一种应用于物联网行业的java解决方案
CN102193804B (zh) 一种单板驱动的加载方法和通信设备
CN107943504A (zh) 一种嵌入式***中软件模块的动态升级方法
CN114489585A (zh) 一种治理功能插件化的微服务开发框架及实现方法
CN101236510B (zh) 一种ejb集群的失败恢复处理方法及***
WO2024130997A1 (zh) 一种节点配置方法、装置、设备、非易失性可读存储介质及服务器
CN106802805B (zh) 一种适用服务器管理的应用服务管理方法及装置
CN100428151C (zh) 大规模并发联机交易中基于版本的c/c++组件热插拔方法
CN103761118A (zh) 一种智能卡及智能卡内部署应用的方法
CN106127092A (zh) 一种cos***应用剥离的智能卡及其工作方法
US9361266B2 (en) System and method for distributed computing
CN101533345A (zh) 基于可扩展标记语言配置信息的装置及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20110525