CN103778026A - 对象调用方法和装置 - Google Patents
对象调用方法和装置 Download PDFInfo
- Publication number
- CN103778026A CN103778026A CN201210410585.5A CN201210410585A CN103778026A CN 103778026 A CN103778026 A CN 103778026A CN 201210410585 A CN201210410585 A CN 201210410585A CN 103778026 A CN103778026 A CN 103778026A
- Authority
- CN
- China
- Prior art keywords
- function
- upgrading
- business object
- status information
- indication
- 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.)
- Granted
Links
Images
Landscapes
- Exchange Systems With Centralized Control (AREA)
Abstract
本申请公开了一种对象调用方法和装置,其中,该方法包括:拦截用于调用功能的请求;从数据库中获取与功能对应的状态信息;在状态信息指示调用功能升级后对应的业务对象时,调用功能升级后对应的业务对象,在状态信息指示调用功能升级前对应的业务对象时,调用功能升级前对应的业务对象。本申请解决了现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题,达到了提高升级效率,减少系统资源的浪费的技术效果。
Description
技术领域
本申请涉及互联网领域,具体而言,涉及一种对象调用方法和装置。
背景技术
随着互联网技术的发展,互联网企业之间的竞争也越来越激烈。同时网络提供商对自身的系统进行升级的频率也越来越高。目前,大部分的互联网应用系统都倾向于承受功能的增加,即,不断地集成新的功能、修改旧的业务逻辑,一般将其称之为“垂直开发”。然而,对于系统而言,每次的升级或者发布都或多或少会存在一定的风险,至少对数据或者是功能来说都可能会产生破坏,从而对用户的应用造成影响。
目前,在对系统或者系统中的应用进行升级时一般采用以下几种方式进行,以有效控制升级所产生的风险:
1)流量分流,该方法的核心思想主要是将线上服务器中的其中几台服务器部署为升级后的应用,然后,通过流量分流系统将部分(例如10%)的流量切换到这几台服务器上,通过一定时间的系统观察来确定是否成功。也就是将服务器中的部分机器设定为升级后的应用以进行升级测试,如果在测试的过程中发现问题就进行调整,调整后再重复进行上述的流量分流测试,在确定没有什么问题之后,再全线应用该升级后的系统。
2)自动化模拟技术,该方法的核心思想是模拟跟线上相同的环境,然后采集线上的数据,通过采集到的数据通过自动化工具模拟用户的行为来验证各个升级的功能点是否正常。即,在系统之外模拟一个真实的应用环境进行测试,在测试通过后再直接将该升级后的系统投放到实际应用中。
由上述描述可知,现有技术方案是在编码完成之后,在升级后的系统的实施阶段进行对升级风险控制,这种方式主要存在以下的缺点:
1)沟通成本较高,开发人员跟发布人员以及项目组成人员需要讨论并制定详细的发布计划,并在执行过程中对每个环节都需要进行不断的沟通,这样势必会增加很多的沟通成本。
2)回滚成本较高,考虑到被升级的系统功能的多样性,往往一次升级或者一次修改可能会影响到多个功能点,从而使得只要在升级过程中任何一个小的功能点出现BUG,都可能会影响到整个系统的稳定性,甚至造成整个系统升级的回滚,从而导致系统资源的浪费,以及开发时间和开发成本的增加。
3)应用范围存在一定的局限性,例如,对于一些后台的系统中的后台脚本不是直接显现的,这样在测试的过程中也就不容易进行模拟或者是采用流量分流等方式来控制升级所产生的风险。
发明内容
本申请提供了一种对象调用方法和装置,以至少解决现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题。
根据本申请的一个方面,提供了一种对象调用方法,包括:拦截用于调用功能的请求;从数据库中获取与上述功能对应的状态信息;在上述状态信息指示调用上述功能升级后对应的业务对象时,调用上述功能升级后对应的业务对象,在上述状态信息指示调用上述功能升级前对应的业务对象时,调用上述功能升级前对应的业务对象。
优选地,在拦截用于调用功能的请求之前,或者,在上述调用上述功能升级后对应的业务对象或上述调用上述功能升级前对应的业务对象之后,上述方法还包括:改变上述数据库中与上述功能对应的状态信息,其中,上述改变包括:将上述状态信息由指示调用上述功能升级后对应的业务对象改变为指示调用上述功能升级前对应的业务对象,或者,将上述状态信息由指示调用上述功能升级前对应的业务对象改变为指示调用上述功能升级后对应的业务对象。
优选地,上述状态信息的初始值为指示调用上述功能升级后对应的业务对象,其中,上述改变上述数据库中与上述功能对应的状态信息的步骤包括:在上述功能升级后对应的业务对象存在故障时,将上述状态信息由指示调用上述功能升级后对应的业务对象改变为指示调用上述功能升级前对应的业务对象。
优选地,上述拦截用于调用功能的请求的步骤包括:从切入点拦截上述用于调用功能的请求,其中,上述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能;上述从数据库中获取与上述功能对应的状态信息的步骤包括:将上述切入点的名称分别与每个上述需要升级的功能的名称进行拼接;从上述数据库中获取分别与每个上述拼接得到的字符串对应的状态信息。
优选地,在拦截用于调用功能的请求之前,上述方法还包括:根据升级的需求设置一个或多个上述切入点。
优选地,从切入点拦截上述用于调用功能的请求的步骤包括:由拦截器从切入点拦截上述用于调用功能的请求;上述从数据库中获取与上述功能对应的状态信息的步骤包括:由执行器将上述切入点的名称分别与每个上述需要升级的功能的名称进行拼接;由上述执行器从上述数据库中获取分别与每个上述拼接得到的字符串对应的状态信息。
根据本申请的另一方面,提供了一种对象调用装置,包括:拦截单元,用于拦截用于调用功能的请求;获取单元,用于从数据库中获取与上述功能对应的状态信息;调用单元,用于在上述状态信息指示调用上述功能升级后对应的业务对象时,调用上述功能升级后对应的业务对象,在上述状态信息指示调用上述功能升级前对应的业务对象时,调用上述功能升级前对应的业务对象。
优选地,上述装置还包括:更新单元,用于在拦截用于调用功能的请求之前,或者,在上述调用上述功能升级后对应的业务对象或上述调用上述功能升级前对应的业务对象之后,改变上述数据库中与上述功能对应的状态信息;其中,上述改变包括:将上述状态信息由指示调用上述功能升级后对应的业务对象改变为指示调用上述功能升级前对应的业务对象,或者,将上述状态信息由指示调用上述功能升级前对应的业务对象改变为指示调用上述功能升级后对应的业务对象。
优选地,上述更新单元包括:更新模块,用于在上述状态信息的初始值为指示调用上述功能升级后对应的业务对象且上述功能升级后对应的业务对象存在故障时,将上述状态信息由指示调用上述功能升级后对应的业务对象改变为指示调用上述功能升级前对应的业务对象。
优选地,上述拦截单元,用于从切入点拦截上述用于调用功能的请求,其中,上述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能;上述获取单元包括:拼接模块,用于将上述切入点的名称分别与每个上述需要升级的功能的名称进行拼接;获取模块,用于从上述数据库中获取分别与每个上述拼接得到的字符串对应的状态信息。
在本申请中,采用了一种新的系统升级方法,在系统中同时运行新旧两个版本,并对每个功能设置一个标识信息,用于标识该功能是采用升级前的业务对象还是采用升级后的业务对象,从而可以根据升级后的各个功能的运行状态进行新旧版本的合理地切换,提供了一种有效地对系统升级进行过渡的方法,解决了现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题,达到了提高升级效率,减少系统资源的浪费的技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的对象调用系统的一种优选结构框图;
图2是根据本申请实施例的对象调用装置的一种优选结构框图;
图3是根据本申请实施例的对象调用装置的另一种优选结构框图;
图4是根据本申请实施例的对象调用装置的又一种优选结构框图;
图5是根据本申请实施例的对象调用装置的又一种优选结构框图;
图6是根据本申请实施例的对象调用方法的一种优选流程图;
图7是根据本申请实施例的对象调用方法的另一种优选流程图;
图8是根据本申请实施例的对象调用的系统架构的一种优选示意图;
图9是根据本申请实施例的对象调用方法的一种优选流程交互图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在描述本申请的各实施例的进一步细节之前,将参考图1来描述可用于实现本申请的原理的一个合适的计算体系结构。在以下描述中,除非另外指明,否则将参考由一个或多个计算机执行的动作和操作的符号表示来描述本申请的各实施例。由此,可以理解,有时被称为计算机执行的这类动作和操作包括计算机的处理单元对以结构化形式表示数据的电信号的操纵。这一操纵转换了数据或在计算机的存储器系统中的位置上维护它,这以本领域的技术人员都理解的方式重配置或改变了计算机的操作。维护数据的数据结构是具有数据的格式所定义的特定属性的存储器的物理位置。然而,尽管在上述上下文中描述本申请,但它并不意味着限制性的,如本领域的技术人员所理解的,后文所描述的动作和操作的各方面也可用硬件来实现。
转向附图,其中相同的参考标号指代相同的元素,本申请的原理被示为在一个合适的计算环境中实现。以下描述基于所述的本申请的实施例,并且不应认为是关于此处未明确描述的替换实施例而限制本申请。
图1示出了可用于这些设备的一个示例计算机体系结构的示意图。出于描述的目的,所绘的体系结构仅为合适环境的一个示例,并非对本申请的使用范围或功能提出任何局限。也不应将该计算系统解释为对图1所示的任一组件或其组合具有任何依赖或需求。
本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算系统、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器系统、基于微处理的系统、小型机、大型计算机、以及包括任一上述系统或设备的分布式计算环境。
在其最基本的配置中,图1中的对象调用系统100至少包括:一个网站的服务器102以及一个或多个客户端104。服务器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置、用于存储数据的存储装置以及与客户端通信的传输装置;客户端104可以包括:微处理器MCU、与服务器通信的传输装置、与用户交互的显示装置。在本说明书和权利要求书中,“系统”也可以被定义为能够执行软件、固件或微码来实现功能的任何硬件组件或硬件组件的组合,对象调用系统100甚至可以是分布式的,以实现分布式功能。
如本申请所使用的,术语“模块”、“组件”或“单元”可以指在对象调用系统100上执行的软件对象或例程。此处所描述的不同组件、模块、单元、引擎和服务可被实现为在对象调用系统100上执行(例如,作为单独的线程)的对象或进程。尽管此处所描述的系统和方法较佳地以软件来实现,但是硬件或软件和硬件的组合的实现也是可能并被构想的。
实施例1
图2是根据本申请实施例的对象调用装置的一种优选的结构示意图,优选的,本实施例中的系统位于服务器102上。
优选的,如图2所示的对象调用装置200可以包括:拦截单元202、获取单元204以及调用单元206。下面对这几个单元进行具体地描述。
拦截单元202,用于拦截用于调用功能的请求;每当有对功能进行调用的请求时,就对该请求进行拦截,即,不立即响应该请求以执行相应的功能。
获取单元204,与拦截单元202耦合,用于从数据库中获取与所述功能对应的状态信息;
预先在数据库中存储每个功能所对应的状态信息。优选地,可以设置多个切入点,每个切入点对应多个连接点,一个连接点又对应一个功能,具体实施过程中一个连接点也可以对应多个功能。当然,一个功能可以位于多个切入点之后。这样可以根据切入点以及其后的多个功能来设置每个功能在每个切入点中的状态信息。优选的,上述的功能都是系统中需要升级的功能。例如:可以按照以下方式对状态信息进行存储,即将每个需要升级的功能与其对应的切入点(Pointcut)进行拼接得到一个唯一确定的字符串,如下表1所示:com.alibaba.XXX.IXXXService.query是拼接后得到的标识,state一栏标识的是其对应的状态信息。其中,“com.alibaba.XXX.IXXXService”对应的是切入点标识,即该切入点是针对服务器,“query”以及“create”对应的是需要升级的功能,“query”对应查询功能,“creat”对应创建功能。
Pointcut | State |
Com.alibaba.XXX.IXXXService.query | 1 |
Com.alibaba.XXX.IXXXService.create | 0 |
...... | ...... |
在本优选实施方式中,用“1”表示调用功能升级后的对应的业务对象,用“0”表示调用功能升级前的对应的业务对象。通过表1可以确定“com.alibaba.XXX.IXXXService.query”所对应的状态信息的标识是“1”,“com.alibaba.XXX.IXXXService.create”所对应的状态信息的标识是“0”。因此,对于该切入点后的查询功能(query)就调用升级后的业务对象,对于该切入点后的创建功能(create)就调用升级前的业务对象。
即,预先在数据库中存储了每种功能对应的用于标识是调用升级前的业务对象还是调用升级后的业务对应的标识信息。这样在收到请求之后,就可以根据这个标识来确定调用的具体方式。因此,可以根据每部分功能是否升级完成来标识其对应的调用关系,对于那些升级出现故障的功能可以相应的改变其对应的状态信息,将其标识为采用升级前的业务对象,对于调试完成的,可以再次上线进行测评的功能就可以将其状态信息标识为升级后的业务对象。通过这种方式可以有效避免因升级带来的系统不稳定或者是需要进行回滚的问题。
上述方式的核心思想就是,将新旧两个版本都放在线上进行使用,这样如果新的版本某些地方出现问题,可以调用该出现问题的功能所对应升级前的(旧版本)的业务对象。当对出现故障的功能调试完成后,可以将其放在线上继续进行测试。
调用单元206,与获取单元204耦合,用于在所述状态信息指示调用所述功能升级后对应的业务对象时,调用所述功能升级后对应的业务对象,在所述状态信息指示调用所述功能升级前对应的业务对象时,调用所述功能升级前对应的业务对象。
在上述优选实施方式中,采用了一种新的系统升级方法,在系统中同时运行新旧两个版本,并对每个功能设置一个标识信息,用于标识该功能是采用升级前的业务对象还是采用升级后的业务对象,从而可以根据升级后的各个功能的运行状态进行新旧版本的合理地切换,提供了一种有效地对系统升级进行过渡的方法,解决了现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题,达到了提高升级效率,减少系统资源的浪费的技术效果。
对于数据库中存储的状态信息是一个动态变化的过程,它会随着每个被调用的功能的运行情况进行实时的变化。在一个优选实施方式中,如图3所示,上述装置还包括:更新单元302,与获取单元204耦合,用于在拦截用于调用功能的请求之前,或者,在所述调用所述功能升级后对应的业务对象或所述调用所述功能升级前对应的业务对象之后,改变所述数据库中与所述功能对应的状态信息;其中,所述改变包括:将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,或者,将所述状态信息由指示调用所述功能升级前对应的业务对象改变为指示调用所述功能升级后对应的业务对象。
在一个优选实施方式中,如图4所示,所述更新单元包括:更新模块402,用于在所述状态信息的初始值为指示调用所述功能升级后对应的业务对象且所述功能升级后对应的业务对象存在故障时,将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象。即,如果被调用的新的业务对象出现故障了,则将其对应的功能的状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,从而可以有效避免因新升级后的系统不稳定而造成的问题。
优选地,可以从一个或多个切入点获取请求,其中,每个切入点对应着多个连接点的集合,相应的也就对应着多个功能选项。即在该某个切入点拦截到请求后,就可以确定该切入点后的多个功能中各个功能所对应的状态信息,以确定是调用新的业务对象还是调用旧的业务对象。拦截单元,用于从切入点拦截所述用于调用功能的请求,其中,上述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能;如图5所示,所述获取单元包括:拼接模块502,用于将切入点的名称分别与每个需要升级的功能的名称进行拼接,拼接后得到的就是上述的:
com.alibaba.XXX.IXXXService.query以及com.alibaba.XXX.IXXXService.create等等;获取模块504,用于从数据库中获取分别与每个拼接得到的字符串对应的状态信息。
上述的一个或者多个切入点是需要预先设置的,在一个优选实施方式中,上述装置还包括设置模块,用于在拦截用于调用功能的请求之前,根据升级的需求设置一个或多个切入点,同时为每个切入点创建一个名字,例如“com.alibaba.XXX.IXXX”。
在一个优选实施方式中,可以在系统中设置一个拦截器,即,上述的拦截单元就位于拦截器中,主要用于从切入点拦截所述用于调用功能的请求,还可以设定一个执行器,实现上述获取单元以及调用单元的功能,用于将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接,并从所述数据库中获取分别与每个所述拼接得到的字符串对应的状态信息。
优选的,可以预先设置多个接口,当确定采用升级后的业务对象时,就调用新的业务接口,当确定采用升级前的业务对象时,就调用旧的业务接口,即通过接口的方式实现业务对象的调用。
实施例2
在图2-图5所示的对象调用系统和装置的基础上,本申请提供了一种优选的对象调用方法。如图6所示,该方法可以包括如下步骤:
步骤S602:拦截用于调用功能的请求;每当有对功能进行调用的请求时,就对该请求进行拦截,即,不立即响应该请求以执行相应的功能。
步骤S604:从数据库中获取与上述功能对应的状态信息;
预先在数据库中存储每个功能所对应的状态信息。优选地,可以设置多个切入点,每个切入点对应多个连接点,一个连接点又对应一个功能,具体实施过程中一个连接点也可以对应多个功能。当然,一个功能可以位于多个切入点之后。这样可以根据切入点以及其后的多个功能来设置每个功能在每个切入点中的状态信息。优选的,上述的功能都是系统中需要升级的功能。例如:可以按照以下方式对状态信息进行存储,即将每个需要升级的功能与其对应的切入点(Pointcut)进行拼接得到一个唯一确定的字符串,如下表1所示:com.alibaba.XXX.IXXXService.query是拼接后得到的标识,state一栏标识的其对应的状态信息。其中,“com.alibaba.XXX.IXXXService”对应的是切入点标识,即该切入点是针对服务器,“query”以及“create”对应的是需要升级的功能,“query”对应查询功能,“creat”对应创建功能。
表1
Pointcut | State |
Com.alibaba.XXX.IXXXService.query | 1 |
Com.alibaba.XXX.IXXXService.create | 0 |
...... | ...... |
在本优选实施方式中,用“1”表示调用功能升级后的对应的业务对象,用“0”表示调用功能升级前的对应的业务对象。通过表1可以确定“com.alibaba.XXX.IXXXService.query”所对应的状态信息的标识是“1”,“com.alibaba.XXX.IXXXService.create”所对应的状态信息的标识是“0”。因此,对于该切入点后的查询功能(query)就调用升级后的业务对象,对于该切入点后的创建功能(create)就调用升级前的业务对象。
即,预先在数据库中存储了每种功能对应的用于标识是调用升级前的业务对象还是调用升级后的业务对应的标识信息。这样在收到请求之后,就可以根据这个标识来确定调用的具体方式。因此,可以根据每部分功能是否升级完成来标识其对应的调用关系,对于那些升级出现故障的功能可以相应的改变其对应的状态信息,将其标识为采用升级前的业务对象,对于调试完成的,可以再次上线进行测评的功能就可以将其状态信息标识为升级后的业务对象。通过这种方式可以有效避免因升级带来的系统不稳定或者是需要进行回滚的问题。
上述方式的核心思想就是,将新旧两个版本都放在线上进行使用,这样如果新的版本某些地方出现问题,可以调用该出现问题的功能所对应升级前的(旧版本)的业务对象。当对出现故障的功能调试完成后,可以将其放在线上继续进行测试。
步骤S606:在状态信息指示调用功能升级后对应的业务对象时,调用功能升级后对应的业务对象,在状态信息指示调用功能升级前对应的业务对象时,调用功能升级前对应的业务对象。
在上述优选实施方式中,采用了一种新的系统升级方法,在系统中同时运行新旧两个版本,并对每个功能设置一个标识信息,用于标识该功能是采用升级前的业务对象还是采用升级后的业务对象,从而可以根据升级后的各个功能的运行状态进行新旧版本的合理地切换,提供了一种有效地对系统升级进行过渡的方法,解决了现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题,达到了提高升级效率,减少系统资源的浪费的技术效果。
对于数据库中存储的状态信息是一个动态变化的过程,它会随着每个被调用的功能的运行情况进行实时的变化,优选的,该变化可以是发生在拦截用于调用功能的请求之前,或者是发生在调用所述功能升级后对应的业务对象或所述调用所述功能升级前对应的业务对象之后。在一个优选实施方式,具体的变化就是在两种状态之间进行切换:改变所述数据库中与所述功能对应的状态信息,其中,所述改变包括:1)将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,或者,2)将所述状态信息由指示调用所述功能升级前对应的业务对象改变为指示调用所述功能升级后对应的业务对象。
对于上述的进行状态信息的切换过程,当状态信息的初始值为指示调用所述功能升级后对应的业务对象,其中,所述改变所述数据库中与所述功能对应的状态信息的步骤包括:在所述功能升级后对应的业务对象存在故障时,将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象。即,如果被调用的新的业务对象出现故障了,则将其对应的功能的状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,从而可以有效避免因新升级后的系统不稳定而造成的问题。
优选地,可以从一个或多个切入点获取请求,其中,每个切入点对应着多个连接点的集合,相应的也就对应着多个功能选项。即在该某个切入点拦截到请求后,就可以确定该切入点后的多个功能中各个功能所对应的状态信息,以确定是调用新的业务对象还是调用旧的业务对象。上述步骤602:拦截用于调用功能的请求,可以包括:从切入点拦截所述用于调用功能的请求,其中,所述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能。
在获取对应的状态信息的时候,需要确定切入点和对应的功能的名称,在一个优选实施方式中,如图7所示,从数据库中获取与所述功能对应的状态信息的步骤包括:
步骤S702:将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接,拼接后得到的就是上述的:
com.alibaba.XXX.IXXXService.query,com.alibaba.XXX.IXXXService.create等等。
步骤S704:从数据库中获取分别与每个拼接得到的字符串对应的状态信息。
上述的一个或者多个切入点是需要预先设置的,在一个优选实施方式中,在拦截用于调用功能的请求之前,上述方法还包括:根据升级的需求设置一个或多个所述切入点,同时为每个切入点创建一个名字,例如“com.alibaba.XXX.IXXX”。
在一个优选实施方式中,可以在系统中设置一个拦截器,主要用于从切入点拦截所述用于调用功能的请求,还可以设定一个执行器,用于将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接,并从所述数据库中获取分别与每个所述拼接得到的字符串对应的状态信息。
优选的,可以预先设置多个接口,当确定采用升级后的业务对象时,就调用新的业务接口,当确定采用升级前的业务对象时,就调用旧的业务接口,即通过接口的方式实现业务对象的调用。
实施例3
本申请提供了一种优选的实施例来进一步对本申请进行解释,但是值得注意的是,该优选实施例只是为了更好的描述本申请,并不构成对本申请不当的限定。
针对现有技术的一些缺点,本申请实施例给出了一些更具一般性的解决方案,并通过对升级接口进行拦截的方式,将新的接口方法以水平的方式集成到系统中,而被拦截的代码则为系统升级提供过渡功能,并且可以通过动态修改切入点(Pointcut)的状态信息(State)来实现某一个功能的业务对象所对应的状态信息的实时切换,从而将升级成本和风险降低到最低。
在本实施例中,图8是本申请实施例的一种对系统升级的系统架构图,如图8所示包括:控制器(Control)、服务器(Service)、业务对象(BO)、数据库、拦截器以及执行器和数据访问对象(DAO)等。
基于图8所示的系统,本申请实施例还提供了一种业务对象调用方法,如图9所示。将一个或多个需要升级的方法(又称作功能)看作一个切入点,即,用于确定何时一个通知(拦截器)将触发一组连接点(Join Point)的集合,执行器根据连接点信息取出接口的名称和方法的名称,即,执行器根据拦截到的通知确定拦截的切入点的名称和其所对应的功能,然后将其拼接为一个完整的切入点,并从数据库中取出该切入点的状态值(State),执行器根据状态值来决定调用哪个业务对象(BO)(即,确定是调用的新的业务对象还是调用旧的业务对象)。优选的,默认调用升级后的业务对象(新的业务对象),并将确定的结果返回给服务器。如需要升级某个功能,则可以按照表2所示,将其State设置为1。
表2
Pointcut | State |
com.alibaba.XXX.IXXXBO.query | 1 |
com.alibaba.XXX.IXXXBO.create | 1 |
执行器在确定决定调用哪个BO后,可以通过JAVA的反射机制调用新的接口,其中,对新的业务对象所对应的接口命名可以采用以下方式,例如:
com.alibaba.XXX.IXXXNewBO.query。
从而,可以更为容易地映射到新的业务对象的接口以执行新的业务对象。
通过上述方式对老代码进行拦截,插件式地植入新的代码,从而允许系统水平集成新功能并且在新旧逻辑之间进行自动切换。其中,所谓的对老代码进行拦截就是说当某些功能存在新代码时,这个时候老代码和新代码是并存的,相应的,如果执行到该功能点的时候,系统会进行判断,因为存在新代码(即,更新后的代码),就相应的执行该新代码(即,上述的调用功能升级后对应的业务对象)而不执行旧的代码,从而实现了对老代码的拦截。减少了系统功能升级过程或者升级后出现的各种问题,从而有效地减少了系统升级所带来的风险,有效避免因为一个方法或者是功能出现bug而导致整个系统回滚的情况出现。在某个方法或者是功能出现bug时,只需要将该方法通过State值的设置切换到升级前的方法即可,从而极大程度地降低了升级的风险和成本。
通过以上的描述可知,本申请具有以下优势:采用了一种新的系统升级方法,在系统中同时运行新旧两个版本,并对每个功能设置一个标识信息,用于标识该功能是采用升级前的业务对象还是采用升级后的业务对象,从而可以根据升级后的各个功能的运行状态进行新旧版本的合理地切换,提供了一种有效地对系统升级进行过渡的方法,解决了现有技术中当升级后的系统中一个方法或者是功能出现bug时,都有可能引起整个系统的回滚而导致的升级和开发的成本增加的技术问题,达到了提高升级效率,减少系统资源的浪费的技术效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种对象调用方法,其特征在于,包括:
拦截用于调用功能的请求;
从数据库中获取与所述功能对应的状态信息;
在所述状态信息指示调用所述功能升级后对应的业务对象时,调用所述功能升级后对应的业务对象,在所述状态信息指示调用所述功能升级前对应的业务对象时,调用所述功能升级前对应的业务对象。
2.根据权利要求1所述的方法,其特征在于,在拦截用于调用功能的请求之前,或者,在所述调用所述功能升级后对应的业务对象或所述调用所述功能升级前对应的业务对象之后,还包括:
改变所述数据库中与所述功能对应的状态信息,其中,所述改变包括:将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,或者,将所述状态信息由指示调用所述功能升级前对应的业务对象改变为指示调用所述功能升级后对应的业务对象。
3.根据权利要求2所述的方法,其特征在于,所述状态信息的初始值为指示调用所述功能升级后对应的业务对象,其中,所述改变所述数据库中与所述功能对应的状态信息的步骤包括:
在所述功能升级后对应的业务对象存在故障时,将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象。
4.根据权利要求1所述的方法,其特征在于,
所述拦截用于调用功能的请求的步骤包括:
从切入点拦截所述用于调用功能的请求,其中,所述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能;
所述从数据库中获取与所述功能对应的状态信息的步骤包括:
将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接;
从所述数据库中获取分别与每个所述拼接得到的字符串对应的状态信息。
5.根据权利要求4所述的方法,其特征在于,在拦截用于调用功能的请求之前,还包括:
根据升级的需求设置一个或多个所述切入点。
6.根据权利要求4所述的方法,其特征在于,
从切入点拦截所述用于调用功能的请求的步骤包括:
由拦截器从切入点拦截所述用于调用功能的请求;
所述从数据库中获取与所述功能对应的状态信息的步骤包括:
由执行器将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接;
由所述执行器从所述数据库中获取分别与每个所述拼接得到的字符串对应的状态信息。
7.一种对象调用装置,其特征在于,包括:
拦截单元,用于拦截用于调用功能的请求;
获取单元,用于从数据库中获取与所述功能对应的状态信息;
调用单元,用于在所述状态信息指示调用所述功能升级后对应的业务对象时,调用所述功能升级后对应的业务对象,在所述状态信息指示调用所述功能升级前对应的业务对象时,调用所述功能升级前对应的业务对象。
8.根据权利要求7所述的装置,其特征在于,还包括:
更新单元,用于在拦截用于调用功能的请求之前,或者,在所述调用所述功能升级后对应的业务对象或所述调用所述功能升级前对应的业务对象之后,改变所述数据库中与所述功能对应的状态信息;
其中,所述改变包括:将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象,或者,将所述状态信息由指示调用所述功能升级前对应的业务对象改变为指示调用所述功能升级后对应的业务对象。
9.根据权利要求8所述的装置,其特征在于,所述更新单元包括:
更新模块,用于在所述状态信息的初始值为指示调用所述功能升级后对应的业务对象且所述功能升级后对应的业务对象存在故障时,将所述状态信息由指示调用所述功能升级后对应的业务对象改变为指示调用所述功能升级前对应的业务对象。
10.根据权利要求7所述的装置,其特征在于,
所述拦截单元,用于从切入点拦截所述用于调用功能的请求,其中,所述切入点为一个或多个连接点的集合,每个连接点对应一个需要升级的功能;
所述获取单元包括:
拼接模块,用于将所述切入点的名称分别与每个所述需要升级的功能的名称进行拼接;
获取模块,用于从所述数据库中获取分别与每个所述拼接得到的字符串对应的状态信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210410585.5A CN103778026B (zh) | 2012-10-24 | 2012-10-24 | 对象调用方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210410585.5A CN103778026B (zh) | 2012-10-24 | 2012-10-24 | 对象调用方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103778026A true CN103778026A (zh) | 2014-05-07 |
CN103778026B CN103778026B (zh) | 2017-03-01 |
Family
ID=50570296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210410585.5A Active CN103778026B (zh) | 2012-10-24 | 2012-10-24 | 对象调用方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103778026B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598554A (zh) * | 2015-10-14 | 2017-04-26 | 上海汽车集团股份有限公司 | 一种代码生成装置 |
WO2017185706A1 (zh) * | 2016-04-28 | 2017-11-02 | 华为技术有限公司 | 系统升级方法和系统升级装置 |
CN107809445A (zh) * | 2016-08-31 | 2018-03-16 | 阿里巴巴集团控股有限公司 | 服务请求处理系统、方法和装置 |
CN108647102A (zh) * | 2018-05-11 | 2018-10-12 | 阿里巴巴集团控股有限公司 | 异构系统的服务请求处理方法、装置和电子设备 |
CN109491689A (zh) * | 2018-11-20 | 2019-03-19 | 中国建设银行股份有限公司 | 客户端处理方法、装置及系统 |
CN111796864A (zh) * | 2020-06-02 | 2020-10-20 | 北京三快在线科技有限公司 | 一种数据校验的方法及装置 |
CN112104716A (zh) * | 2020-09-01 | 2020-12-18 | 山东亚华电子股份有限公司 | 软件项目采集数据的方法、装置、可读存储介质及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1913442A (zh) * | 2005-08-09 | 2007-02-14 | 华为技术有限公司 | 给用户提供业务服务的方法和系统 |
CN1946226A (zh) * | 2006-10-20 | 2007-04-11 | 华为技术有限公司 | 电信设备升级的方法、设备及升级引擎单元 |
US7555751B1 (en) * | 2004-08-11 | 2009-06-30 | 3Com Corporation | Method and system for performing a live system upgrade |
CN101894031A (zh) * | 2010-06-30 | 2010-11-24 | 上海交通大学 | 普适服务的动态更新方法及其更新系统 |
CN102622280A (zh) * | 2011-01-06 | 2012-08-01 | 苏州科达科技有限公司 | 一种基于双文件系统的软件版本升级的控制方法及装置 |
-
2012
- 2012-10-24 CN CN201210410585.5A patent/CN103778026B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7555751B1 (en) * | 2004-08-11 | 2009-06-30 | 3Com Corporation | Method and system for performing a live system upgrade |
CN1913442A (zh) * | 2005-08-09 | 2007-02-14 | 华为技术有限公司 | 给用户提供业务服务的方法和系统 |
CN1946226A (zh) * | 2006-10-20 | 2007-04-11 | 华为技术有限公司 | 电信设备升级的方法、设备及升级引擎单元 |
CN101894031A (zh) * | 2010-06-30 | 2010-11-24 | 上海交通大学 | 普适服务的动态更新方法及其更新系统 |
CN102622280A (zh) * | 2011-01-06 | 2012-08-01 | 苏州科达科技有限公司 | 一种基于双文件系统的软件版本升级的控制方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598554A (zh) * | 2015-10-14 | 2017-04-26 | 上海汽车集团股份有限公司 | 一种代码生成装置 |
WO2017185706A1 (zh) * | 2016-04-28 | 2017-11-02 | 华为技术有限公司 | 系统升级方法和系统升级装置 |
CN107809445A (zh) * | 2016-08-31 | 2018-03-16 | 阿里巴巴集团控股有限公司 | 服务请求处理系统、方法和装置 |
CN108647102A (zh) * | 2018-05-11 | 2018-10-12 | 阿里巴巴集团控股有限公司 | 异构系统的服务请求处理方法、装置和电子设备 |
CN108647102B (zh) * | 2018-05-11 | 2022-05-13 | 创新先进技术有限公司 | 异构系统的服务请求处理方法、装置和电子设备 |
CN109491689A (zh) * | 2018-11-20 | 2019-03-19 | 中国建设银行股份有限公司 | 客户端处理方法、装置及系统 |
CN111796864A (zh) * | 2020-06-02 | 2020-10-20 | 北京三快在线科技有限公司 | 一种数据校验的方法及装置 |
CN112104716A (zh) * | 2020-09-01 | 2020-12-18 | 山东亚华电子股份有限公司 | 软件项目采集数据的方法、装置、可读存储介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103778026B (zh) | 2017-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103778026A (zh) | 对象调用方法和装置 | |
US10824521B2 (en) | Generating predictive diagnostics via package update manager | |
US8892712B2 (en) | Upgrading enterprise managers | |
CN109787858B (zh) | 一种批量发布服务的方法及终端 | |
CN105653329A (zh) | 一种应用管理的方法、装置及系统 | |
CN102025778A (zh) | 一种基于Shell的软件版本升级工作方法 | |
CN110427324B (zh) | 联调系统、联调方法、计算机设备和存储介质 | |
CN106549810A (zh) | 云服务平台新版本发布前测试方法、装置以及系统 | |
CN108574720A (zh) | 一种服务上线方法及装置 | |
CN112631846A (zh) | 一种故障演练方法、装置、计算机设备及存储介质 | |
CN108255708B (zh) | 测试环境中访问生产文件的方法、装置、存储介质及设备 | |
EP4050850A1 (en) | Service upgrading method, device and system | |
CN107506295A (zh) | 虚拟机备份的测试方法、设备及计算机可读存储介质 | |
CN109857391A (zh) | 数据的处理方法及装置、存储介质和电子装置 | |
CN109885612A (zh) | 区块链智能合约的同步生效方法及装置 | |
Chen et al. | MORE: A model-driven operation service for cloud-based IT systems | |
CN107992326A (zh) | 基于Struts2框架的Java自动化代码发布方法 | |
CN103813463A (zh) | 软件通信体系架构中的资源分配方法 | |
CN115858086A (zh) | 数据恢复方法、数据恢复系统、设备及存储介质 | |
CN107463390B (zh) | 一种软件升级方法及升级服务器 | |
CN109002305A (zh) | 一种设备程序的更新方法及其系统 | |
KR101599471B1 (ko) | 소스 관리 장치, 시스템 및 방법, 컴퓨터 판독 가능한 기록 매체 | |
CN116467188A (zh) | 一种多环境场景下的通用本地复现系统和方法 | |
CN103107898A (zh) | 用于同时发送或接收多个管理对象的方法、设备以及系统 | |
Lovrek et al. | Improving software maintenance by using agent-based remote maintenance shell |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |