CN108228208A - 一种java应用程序的动态更新方法和装置 - Google Patents

一种java应用程序的动态更新方法和装置 Download PDF

Info

Publication number
CN108228208A
CN108228208A CN201611199633.5A CN201611199633A CN108228208A CN 108228208 A CN108228208 A CN 108228208A CN 201611199633 A CN201611199633 A CN 201611199633A CN 108228208 A CN108228208 A CN 108228208A
Authority
CN
China
Prior art keywords
class
interface
updated
application program
java application
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
CN201611199633.5A
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.)
Beijing Shenzhou Taiyue Software Co Ltd
Original Assignee
Beijing Shenzhou Taiyue Software 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 Beijing Shenzhou Taiyue Software Co Ltd filed Critical Beijing Shenzhou Taiyue Software Co Ltd
Priority to CN201611199633.5A priority Critical patent/CN108228208A/zh
Publication of CN108228208A publication Critical patent/CN108228208A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种JAVA应用程序的动态更新方法和装置,该方法包括:将业务逻辑接口化,并实例化接口,创建接口实现类;在JAVA应用程序启动阶段,加载所有的接口实现类;在JAVA应用程序运行期,实时监测是否有接口实现类被更新,若有接口实现类被更新,则重新加载更新后的接口实现类,应用程序触发业务逻辑时会按当前最新的接口实现类进行处理,在不重启应用程序的前提下实现了业务逻辑的变更,实现了应用程序的动态更新,更新过程不需要重新启动应用程序,不会导致应用程序提供的业务中断。

Description

一种JAVA应用程序的动态更新方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种JAVA应用程序的动态更新方法和装置。
背景技术
由于JAVA语言的跨平台特性,基于JAVA开发的应用程序被广泛应用于各行各业,如IT、金融,教育行业等。
一般情况下,对JAVA应用程序的更新升级需要重新启动应用程序才能使修改生效。但是,重启应用程序会导致业务中断,当遇到紧急bug必须更新应用程序时,会严重影响用户使用应用系统。
发明内容
本发明提供了一种JAVA应用程序的动态更新方法和装置,以解决JAVA应用程序更新时需要重新启动应用程序才能使修改生效,导致业务中断的问题。
根据本发明的一个方面,本发明提供了一种JAVA应用程序的动态更新方法,包括:
将业务逻辑接口化,并实例化接口,创建接口实现类;
在JAVA应用程序启动阶段,加载所有的接口实现类;
在JAVA应用程序运行期,实时监测是否有接口实现类被更新,若有接口实现类被更新,则重新加载更新后的接口实现类。
根据本发明的另一个方面,本发明提供了一种JAVA应用程序的动态更新装置,包括:创建单元、加载单元和监测单元;
所述创建单元,用于将业务逻辑接口化,并实例化接口,创建接口实现类;
所述监测单元,用于在JAVA应用程序运行期,实时监测是否有接口实现类被更新;
所述加载单元,用于在JAVA应用程序启动阶段,加载所有的接口实现类;以及在所述监测单元监测到有接口实现类被更新时,重新加载更新后的接口实现类。
本发明的有益效果是:本发明实施例将业务逻辑接口化,并实例化接口,创建接口实现类,在JAVA应用程序启动阶段加载所有的接口实现类,并在JAVA应用程序运行期实时监测是否有接口实现类被更新,若有接口实现类被更新,则重新加载更新后的接口实现类,以实现程序运行期动态加载接口实现类,在不重启应用程序的前提下实现了业务逻辑的变更,更新过程不需要重新启动应用程序,不会导致应用程序提供的业务中断,替换过程对用户透明,能够及时响应应用程序使用中的问题并及时修复。
附图说明
图1是本发明一个实施例提供的一种JAVA应用程序的动态更新方法的流程图;
图2是本发明一个实施例提供的一种JAVA应用程序的动态更新装置的功能框图。
具体实施方式
本发明的设计构思是:JAVA应用程序更新时需要重新启动应用程序才能使修改生效,会导致业务中断。针对这种情况,本发明将业务逻辑接口化,并实例化接口,创建接口实现类,在JAVA应用程序启动阶段加载所有的接口实现类,并在JAVA应用程序运行期实时监测是否有接口实现类被更新,若有接口实现类被更新,则重新加载更新后的接口实现类,以实现程序运行期动态加载接口实现类,在不重启应用程序的前提下实现了业务逻辑的变更,更新过程不需要重新启动应用程序,不会导致应用程序提供的业务中断,替换过程对用户透明,能够及时响应应用程序使用中的问题并及时修复。
实施例一
图1是本发明一个实施例提供的一种JAVA应用程序的动态更新方法的流程图,如图1所示,本实施例提供的JAVA应用程序的动态更新方法包括:
步骤S110:将业务逻辑接口化,并实例化接口,创建接口实现类。
首先对JAVA应用程序进行梳理,将业务逻辑接口化,为提供业务计算的JAVA Bean抽象出接口。实例化接口,创建接口的实现类,封装具体的业务逻辑,如资源查找,资源计算等。Java接口是一系列方法的声明,只有方法的特征没有方法的实现,接口可以被不同的类实现。在更新JAVA应用程序时,只需要修改接口的实现类,即可使提供业务计算的JAVABean具有不同的行为。
步骤S120:在JAVA应用程序启动阶段,加载所有的接口实现类。
本实施例利用jar命令将所有的接口实现类打包为一个.jar文件,如打包为dymic.jar,保存到应用系统中特定的目录中,如目录/extlib。Java类是通过JAVA类加载器加载到Java虚拟机中的。Java源程序在经过Java编译器编译之后就被转换成Java字节代码,类加载器读取Java字节代码,并转换成java.lang.Class类的一个实例,每个这样的实例用来表示一个Java类,通过此实例的newInstance()方法就可以创建出该类的一个对象。另外,Java字节代码也可能是通过工具动态生成的,或是通过网络下载的。
为了能够将目录/extlib中的dymic.jar文件中的接口实现类加载到内存中,本实施例自定义了一个类加载器。在JAVA应用程序启动阶段,利用自定义的类加载器加载dymic.jar文件中的所有接口实现类,并记录dymic.jar文件的最后修改实现,以便于后续判断dymic.jar文件是否被更新。
步骤S130:在JAVA应用程序运行期,实时监测是否有接口实现类被更新,若有接口实现类被更新,则执行步骤S140;否则重复执行步骤S130。
在优选实施例中,通过以下步骤实时监测接口实现类是否被更新:创建一个Thread线程,用于轮询dymic.jar的最后修改时间,当dymic.jar文件的最后修改时间与记录的时间一致时,不做任何处理,继续进行监测;当dymic.jar文件的最后修改时间与记录的时间不一致时,说明dymic.jar文件被更新了,因此可以判断dymic.jar文件中的接口实现类也被更新了,此时触发自定义的类加载器重新加载dymic.jar文件中的接口实现类。
步骤S140:重新加载更新后的接口实现类。
在优选实施例中,在监测到有接口实现类被更新后,利用自定义的类加载器重新加载保存在目录/extlib中的dymic.jar文件中的所有接口实现类,并更新记录的dymic.jar文件的最后修改时间,应用程序触发业务逻辑时会按当前最新的接口实现类进行处理,在不重启应用程序的前提下实现了业务逻辑的变更,实现了应用程序的动态更新。当步骤S130监测到dymic.jar文件的最后修改时间与更新后的记录时间不一致时,则进行下一次程序更新,再次重新加载修改后的接口实现类。
重新加载更新后,当应用程序触发业务逻辑时,按当前最新的接口实现类进行处理。
实施例二
图2是本发明一个实施例提供的一种JAVA应用程序的动态更新装置的功能框图,如图2所示,本实施例提供的JAVA应用程序的动态更新装置200包括:创建单元210、加载单元220和监测单元230。
创建单元210用于将业务逻辑接口化,并实例化接口,创建接口实现类,为提供业务计算的JAVA Bean抽象出接口,封装具体的业务逻辑,如资源查找,资源计算等。监测单元230用于在JAVA应用程序运行期,实时监测是否有接口实现类被更新。加载单元220用于在JAVA应用程序启动阶段,加载所有的接口实现类;以及在监测单元230监测到有接口实现类被更新时,重新加载更新后的接口实现类。
在一个优选实施例中,创建单元210包括存储模块211,用于利用jar命令将所有的接口实现类打包为一个.jar文件,保存到应用系统的预设目录。例如将所有接口实现类打包为dymic.jar,存储在目录/extlib中。
在另一优选实施例中,加载单元220包括自定义类加载器221,用于在JAVA应用程序启动阶段,以及在监测单元230监测到有接口实现类被更新时,加载存储模块211保存的.jar文件中的接口实现类。加载单元220还包括修改时间记录模块222,用于在JAVA应用程序启动阶段,当自定义类加载器221加载.jar文件中的接口实现类时,记录.jar文件的最后修改时间。
在进一步的优选实施例中,监测单元230具体用于创建一个Thread线程,并利用Thread线程轮询存储模块211保存的.jar文件的最后修改时间,当其最后修改时间与修改时间记录模块222记录的时间不一致时,判断有接口实现类被更新。在JAVA应用程序运行期,当自定义类加载器221重新加载存储模块211保存的.jar文件中的接口实现类时,修改时间记录模块222更新记录的.jar文件的最后修改时间。若监测单元230监测到存储模块211保存的.jar文件的最后修改时间与修改时间记录模块222更新后的记录时间不一致,则进行下一次程序更新,自定义类加载器221再次重新加载修改后的接口实现类。
本实施例提供的JAVA应用程序的动态更新装置200在不重启应用程序的前提下实现了业务逻辑的变更,实现了应用程序的动态更新,更新过程不需要重新启动应用程序,不会导致应用程序提供的业务中断。
以上所述,仅为本发明的具体实施方式,在本发明的上述教导下,本领域技术人员可以在上述实施例的基础上进行其他的改进或变形。本领域技术人员应该明白,上述的具体描述只是更好的解释本发明的目的,本发明的保护范围应以权利要求的保护范围为准。
需要说明的是:
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
本发明的JAVA应用程序的动态更新装置传统上包括处理器和以存储器形式的计算机程序产品或者计算机可读介质。存储器可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器具有用于执行上述方法中的任何方法步骤的程序代码的存储空间。例如,用于程序代码的存储空间可以包括分别用于实现上面的方法中的各种步骤的各个程序代码。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为便携式或者固定存储单元。该存储单元可以类似布置的存储段、存储空间等。程序代码可以例如以适当形式进行压缩。通常,存储单元包括用于执行根据本发明的方法步骤的计算机可读代码,即可以由例如处理器读取的代码,这些代码被运行时,导致该JAVA应用程序的动态更新装置执行上面所描述的方法中的各个步骤。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。单词“包括”不排除存在未列在权利要求中的元件或步骤。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。

Claims (10)

1.一种JAVA应用程序的动态更新方法,所述方法包括:
将业务逻辑接口化,并实例化接口,创建接口实现类;
在JAVA应用程序启动阶段,加载所有的接口实现类;
在JAVA应用程序运行期,实时监测是否有接口实现类被更新,若有接口实现类被更新,则重新加载更新后的接口实现类。
2.如权利要求1所述的方法,其特征在于,所述在JAVA应用程序启动阶段,加载所有的接口实现类,具体包括:
利用jar命令将所有的接口实现类打包为一个.jar文件,保存到预设的目录;
自定义一个类加载器,在JAVA应用程序启动阶段,利用自定义的类加载器加载所述.jar文件中的接口实现类。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:在JAVA应用程序启动阶段,利用自定义的类加载器加载所述.jar文件中的接口实现类时,记录所述.jar文件的最后修改时间。
4.如权利要求3所述的方法,其特征在于,所述在JAVA应用程序运行期,实时监测是否有接口实现类被更新,具体包括
创建一个Thread线程,利用所述Thread线程轮询所述.jar文件的最后修改时间,当所述.jar文件的最后修改时间与记录的时间不一致时,判断有接口实现类被更新。
5.如权利要求4所述的方法,其特征在于,所述重新加载更新后的接口实现类,具体包括:
利用自定义的类加载器重新加载保存在预设目录的所述.jar文件中的接口实现类,并更新记录的所述.jar文件的最后修改时间。
6.一种JAVA应用程序的动态更新装置,所述装置包括:创建单元、加载单元和监测单元;
所述创建单元,用于将业务逻辑接口化,并实例化接口,创建接口实现类;
所述监测单元,用于在JAVA应用程序运行期,实时监测是否有接口实现类被更新;
所述加载单元,用于在JAVA应用程序启动阶段,加载所有的接口实现类;以及在所述监测单元监测到有接口实现类被更新时,重新加载更新后的接口实现类。
7.如权利要求6所述的装置,其特征在于,
所述创建单元包括存储模块,用于利用jar命令将所有的接口实现类打包为一个.jar文件,保存到预设的目录;
所述加载单元包括自定义类加载器,用于在JAVA应用程序启动阶段,以及在所述监测单元监测到有接口实现类被更新时,加载所述存储模块保存的.jar文件中的接口实现类。
8.如权利要求7所述的装置,其特征在于,所述加载单元还包括修改时间记录模块,用于在JAVA应用程序启动阶段,当所述自定义类加载器加载所述.jar文件中的接口实现类时,记录所述.jar文件的最后修改时间。
9.如权利要求8所述的装置,其特征在于,所述监测单元具体用于:创建一个Thread线程,利用所述Thread线程轮询所述.jar文件的最后修改时间,当所述.jar文件的最后修改时间与所述修改时间记录模块记录的时间不一致时,判断有接口实现类被更新。
10.如权利要求9所述的装置,其特征在于,所述修改时间记录模块还用于,在JAVA应用程序运行期,当所述自定义类加载器重新加载所述存储模块保存的所述.jar文件中的接口实现类时,更新记录的所述.jar文件的最后修改时间。
CN201611199633.5A 2016-12-22 2016-12-22 一种java应用程序的动态更新方法和装置 Pending CN108228208A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611199633.5A CN108228208A (zh) 2016-12-22 2016-12-22 一种java应用程序的动态更新方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611199633.5A CN108228208A (zh) 2016-12-22 2016-12-22 一种java应用程序的动态更新方法和装置

Publications (1)

Publication Number Publication Date
CN108228208A true CN108228208A (zh) 2018-06-29

Family

ID=62656272

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611199633.5A Pending CN108228208A (zh) 2016-12-22 2016-12-22 一种java应用程序的动态更新方法和装置

Country Status (1)

Country Link
CN (1) CN108228208A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110895468A (zh) * 2018-08-22 2020-03-20 北京京东尚科信息技术有限公司 实现业务增强的方法和装置
CN113419766A (zh) * 2021-07-21 2021-09-21 厦门市易联众易惠科技有限公司 智能更新程序逻辑的方法、装置、设备及存储介质
CN114489828A (zh) * 2021-12-13 2022-05-13 天翼物联科技有限公司 基于类加载器的协议驱动更换方法、装置和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040172407A1 (en) * 2003-02-28 2004-09-02 Arpirez Vega Julio Cesar Method and system of processing an encapsulated file at a management computer
CN101174217A (zh) * 2007-11-22 2008-05-07 上海交通大学 Java程序可动态更新化实现方法
CN101771762A (zh) * 2009-01-06 2010-07-07 北京邮电大学 业务系统中业务动态加载系统及方法
CN102141919A (zh) * 2010-01-28 2011-08-03 北京邮电大学 模块化java应用软件在线更新系统及方法
CN104391717A (zh) * 2014-11-18 2015-03-04 南京大学 一种调试时代码动态更新方法
CN105487885A (zh) * 2015-11-23 2016-04-13 盛趣信息技术(上海)有限公司 手游热更新方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040172407A1 (en) * 2003-02-28 2004-09-02 Arpirez Vega Julio Cesar Method and system of processing an encapsulated file at a management computer
CN101174217A (zh) * 2007-11-22 2008-05-07 上海交通大学 Java程序可动态更新化实现方法
CN101771762A (zh) * 2009-01-06 2010-07-07 北京邮电大学 业务系统中业务动态加载系统及方法
CN102141919A (zh) * 2010-01-28 2011-08-03 北京邮电大学 模块化java应用软件在线更新系统及方法
CN104391717A (zh) * 2014-11-18 2015-03-04 南京大学 一种调试时代码动态更新方法
CN105487885A (zh) * 2015-11-23 2016-04-13 盛趣信息技术(上海)有限公司 手游热更新方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110895468A (zh) * 2018-08-22 2020-03-20 北京京东尚科信息技术有限公司 实现业务增强的方法和装置
CN113419766A (zh) * 2021-07-21 2021-09-21 厦门市易联众易惠科技有限公司 智能更新程序逻辑的方法、装置、设备及存储介质
CN113419766B (zh) * 2021-07-21 2023-07-21 厦门市易联众易惠科技有限公司 智能更新程序逻辑的方法、装置、设备及存储介质
CN114489828A (zh) * 2021-12-13 2022-05-13 天翼物联科技有限公司 基于类加载器的协议驱动更换方法、装置和存储介质

Similar Documents

Publication Publication Date Title
CN109408393B (zh) 应用测试方法、装置及设备和计算机可读存储介质
US8621279B1 (en) System and method for generating emulation-based scenarios for Error Handling
US8914785B2 (en) Providing virtual appliance system firmware images
US9280338B1 (en) Dynamic application updates
US7552153B2 (en) Virtual machine monitoring using shared memory
CN102736978B (zh) 一种检测应用程序的安装状态的方法及装置
JP2021509200A (ja) コンテナを更新するためのシステム及び方法
US9354949B2 (en) Runtime emulating static thread local storage of portable executable software code
US9063819B2 (en) Extensible patch management
CN102929716B (zh) 一种启动多进程的方法
CN102073525B (zh) 基于Java平台的Web业务系统的动态升级方法及装置
US20090249311A1 (en) Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US20090183027A1 (en) Checkpointing and restoring user space data structures used by an application
CN106293781B (zh) 在线升级机器虚拟器的方法与设备
CN108762833A (zh) 安卓系统中的应用启动方法和装置
US6895575B2 (en) Generic Java rule engine framework
US10372908B2 (en) System and method for detecting malware in a stream of bytes
US9824000B1 (en) Testing calling code dynamically with random error injection based on user-specified configuration
CN104731622B (zh) 一种应用程序的加载方法、装置和移动终端
CN108228208A (zh) 一种java应用程序的动态更新方法和装置
CN103793248A (zh) 一种应用程序升级的方法及装置
CN104715202A (zh) 一种虚拟机中的隐藏进程检测方法和装置
US20180089432A1 (en) System and method for characterizing malware
CN103309696B (zh) 一种Java卡扩展库更新方法、装置和Java卡
CN114253587A (zh) 应用程序更新方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Room 818, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080

Applicant after: BEIJING ULTRAPOWER SOFTWARE Co.,Ltd.

Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building 6 storey block A Room 601

Applicant before: BEIJING ULTRAPOWER SOFTWARE Co.,Ltd.

CB02 Change of applicant information
RJ01 Rejection of invention patent application after publication

Application publication date: 20180629

RJ01 Rejection of invention patent application after publication