CN111580813A - 一种面向Java类热更新的自动化管理方法 - Google Patents
一种面向Java类热更新的自动化管理方法 Download PDFInfo
- Publication number
- CN111580813A CN111580813A CN202010216486.8A CN202010216486A CN111580813A CN 111580813 A CN111580813 A CN 111580813A CN 202010216486 A CN202010216486 A CN 202010216486A CN 111580813 A CN111580813 A CN 111580813A
- Authority
- CN
- China
- Prior art keywords
- class
- hot update
- path
- hot
- log
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种面向Java类热更新的自动化管理方法,涉及软件工程技术领域。该方法包括类热更新执行和类热更新历史查询;首先选择要进行热更新的类,识别类文件的路径并转化为软件包路径;清空编译目录,将待替换的类文件复制至编译目录,并自动生成与软件包路径相同的目录结构;为待更新的类确定新的序号,并根据序号修改源码;将修改的源码放入编译目录,对源码逐个进行编译,再将编译好的源码打包成热更新的jar包;运行附着用户指定pid的目标进程的程序,实现热更新类;按照进程pid查找日志文件,修改日志文件中的已替换类的日志记录和序号,并将新替换的类写入日志文件,并将日志中的历史记录解析并呈现给用户实现热更新类的查询。
Description
技术领域
本发明涉及软件工程技术领域,尤其涉及一种面向Java类热更新的自动化管理方法。
背景技术
Java作为一门跨平台的语言,凭借其良好的可执行性、移植性以及安全性等优势,在互联网的潮流中激流勇进,成为了最主要的语言,并实现了多方面的应用。在有些情况下,Java软件进行版本更新时,重新部署过程比较复杂,停机是不被允许的,所以Java提供了另外一种选择:在不重启应用的前提下进行小幅改动,又称热更新。
Java从1.6版本开始增加了java.lang.instrument的字节码增强功能,开发者可以构建一个独立于应用程序的代理程序,用来监测和协助运行在JVM上的程序,可以实现Java服务运行时动态的进行函数体级别的字节码更新。instrument包的实现基于JVMTI(Java Virtual Machine Tool Interface),该功能是由Java虚拟机提供的,为JVM相关的工具提供的本地编程接口。instrument存在一个JVMTI的代理程序,通过调用JVMTI当中Java类相关的函数来完成Java类的动态操作。JVM启动的时候,在JVM内部启动了一个监听线程,这个线程的名字叫“Signal Dispatcher”,该线程的作用是,监听并处理OS的信号。类的热更新就是由这个线程负责完成的。
由于使用了代理程序,在进行多次替换class时就会涉及到代理程序冲突的问题。热更新的多个类转换器会在线程“Signal Dispatcher”中形成链式调用,这就要求不仅代理程序,热更新包和转换器名都不能相同。于是,每次热更新类都需要重新指定包名,类名,物理位置,修饰符,代理名,转换器,重新编写配置文件并重新编译打包,最好重新连接JVM来实现热更新。
其次,在更新类之后,无法得知当前的哪些类已经是更新过的,也无法得知当前已更新的类更新了哪个版本,因为热更新后的类由线程调用,通过原有的获取类路径的API函数获取的仍然是之前旧的类,热更新只在内存中形成调用类的一个新的链,但无法对原有代码产生影响。
发明内容
本发明要解决的技术问题是针对上述现有技术的不足,提供一种面向Java类热更新的自动化管理方法,实现对Java类热更新的自动化管理。
为解决上述技术问题,本发明所采取的技术方案是:一种面向Java类热更新的自动化管理方法,包括类热更新执行和类热更新历史查询两部分;
所述类热更新执行包括以下步骤:
步骤1、选择要进行热更新的类,识别类文件的路径,并将路径转化为软件包路径,同时,返回软件包路径供用户确认,如果自动识别的路径有误,则用户自行修改成正确的软件包路径后执行步骤2,否则直接执行步骤2;
步骤2、清空编译目录,将待替换的类文件复制至编译目录,并自动生成与软件包路径相同的目录结构;
步骤3、首先查找目标进程是否存在热替换日志,如果存在,则读取日志,为待更新的类确定新的序号;如果不存在,则设置待更新类的序号为0号;然后待更新类根据序号修改源码以避免热更新包冲突;
所述修改的源码包括代理类、转换器类、附着程序和配置文件;其中,代理类需要修改的内容包括代理类名、待修改类所在的软件包路径和转换器类名和待修改的类名;转换器类需要修改的内容包括转换器类名、待修改类的物理地址和待修改的包名;附着程序需要修改编译打包好的热更新包的物理地址;配置文件需要修改代理类名;
步骤4、将修改的源码放入编译目录,使用javac命令对源码逐个进行编译,再将编译好的源码打包成热更新的jar包;
步骤5、运行附着程序,该程序用于附着用户指定pid的目标进程,附着之后将热更新包送入目标进程运行,实现类热更新;
所述类热更新历史查询的具体方法为:
步骤S1、按照进程pid查找日志文件,修改日志文件中的已替换类的日志记录和序号,并将新替换的类写入日志文件;
步骤S2、获取当前用户选取的pid号,根据pid搜索日志文件,将日志中的历史记录解析并呈现给用户。
采用上述技术方案所产生的有益效果在于:本发明提供的一种面向Java类热更新的自动化管理方法,可以根据要热替换的类文件,自动修改源代码,自动编译,制作热替换包并自动实施替换,大大简化了热更新类时所花费的人工成本,同时利用日志的方式,实现了对指定进程已经热更新的类的查看。
附图说明
图1为本发明实施例提供的一种面向Java类热更新的自动化管理方法的流程图;
图2为本发明实施例提供的使用Java语言创建的用户交互界面示意图;
图3为本发明实施例提供的自动生成的编译目录示意图;
图4为本发明实施例提供的DogA、DogB类依次热更新后的结果图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
一种面向Java类热更新的自动化管理方法,如图1所示,包括类热更新执行和类热更新历史查询两部分;
本实施例中,为了直观展示采用本发明方法对Java类热更新进行自动化管理,首先使用Java语言创建交互界面,界面如图2所示,界面包括供用户指定目标类文件的“select file”按钮,用于输入软件包路径的“package path”栏,用于指定热更新的目标进程的“pid”栏,用于启动热更新类的“Retransform”按钮,用于显示类热更新历史的“history”按钮获,用于显示当前进程的进程列表以及用于显示已更新了哪些类的历史列表;界面创建后,取当前运行的Java进程显示在进程列表里供用户选择,用户可以点击“select file”按钮选择要进行热更新的类文件,点击进程列表里的进程选择目标进程,目标进程的pid将自动填写在“pid”栏里;
所述类热更新执行包括以下步骤:
步骤1、选择要进行热更新的类,识别类文件的路径,并将路径转化为软件包路径,同时,返回软件包路径供用户确认,如果自动识别的路径有误,则用户自行修改成正确的软件包路径后执行步骤2,否则直接执行步骤2;
本实施例中,用户选择类后,程序识别类文件的路径,将路径转化为软件包路径,并返回供用户确认,自动识别的路径如果过深,用户可以在图2的“package path”栏自行修改。软件包路径在代理程序编译时会使用到,这个路径和目标类的软件包路径必须相同,以自动识别转换的方式可以减少人工修改的错误率。
步骤2、在用户点击“Transform”按钮之后,执行转换过程,首先清空编译目录,将待替换的类文件复制至编译目录,并自动生成与软件包路径相同的目录结构;编译过程中需要该目录结构。所有的源码修改和编译都在这个目录下进行,每次热更新都需要重新编译打包,由于热更新之后,更新的包已经存入内存,本地不再需要,所以可以安全清空。
步骤3、为了解决多次热更新导致的热更新包冲突,首先查找目标进程是否存在热替换日志,如果存在,则读取日志,为待更新的类确定新的序号;如果不存在,则设置待更新类的序号为0号;然后待更新类根据序号修改源码以避免热更新包冲突;
所述修改的源码包括代理类、转换器类、附着程序和配置文件;其中,代理类需要修改的内容包括代理类名、待修改类所在的软件包路径和转换器类名和待修改的类名;转换器类需要修改的内容包括转换器类名、待修改类的物理地址和待修改的包名;附着程序需要修改编译打包好的热更新包的物理地址;配置文件需要修改代理类名;
步骤4、将修改的源码放入编译目录,使用javac命令对源码逐个进行编译,再将编译好的源码打包成热更新的jar包;
本实施例中,自动生成的编译目录如图3所示,该目录用于存放打包后的热更新包,编译的源文件和编译后的文件。其中,配置文件指定了热更新的jar包运行的代理类名。当热更新的jar送入目标JVM执行后会读取配置文件来运行代理程序,代理程序会载入新的类转换器,并调用retransformClasses函数让旧的类在再次调用时通过类转换器调用新的类字节码。类转换器负责读取新的类文件,返回其字节码。
步骤5、运行附着程序,该程序用于附着用户指定pid的目标进程,附着之后将热更新包送入目标进程运行,实现类热更新;
本实施例中,运行附着程序,附着用户指定pid的目标进程,热更新的JVM进程使用VirutalMachine.attach(pid)来连接需要热更新的JVM进程,然后使用virtualMachine.loadAgent加载自定义的agent,将热更新包送入进程运行,实现类热更新。本实施例中,DogA、DogB类依次热更新后的结果如图4所示。
所述类热更新历史查询的具体方法为:
步骤S1、按照进程pid查找日志文件,修改日志文件中的已替换类的日志记录和序号,并将新替换的类写入日志文件;通过日志文件的方式,保存已修改的类信息,这样可以实现已热更新类的实时查询。
步骤S2、获取当前用户选取的pid号,根据pid搜索日志文件,将日志中的历史记录解析并呈现给用户。
本实施例中,当用户点击“History”按钮时,获取当前用户选取的pid号,根据pid搜索日志文件,将日志中的历史记录解析并呈现给用户,图2所示的“Transform History”栏用于显示该任务已经替换的类。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。
Claims (2)
1.一种面向Java类热更新的自动化管理方法,其特征在于:包括类热更新执行和类热更新历史查询两部分;
所述类热更新执行包括以下步骤:
步骤1、选择要进行热更新的类,识别类文件的路径,并将路径转化为软件包路径,同时,返回软件包路径供用户确认,如果自动识别的路径有误,则用户自行修改成正确的软件包路径后执行步骤2,否则直接执行步骤2;
步骤2、清空编译目录,将待替换的类文件复制至编译目录,并自动生成与软件包路径相同的目录结构;
步骤3、首先查找目标进程是否存在热替换日志,如果存在,则读取日志,为待更新的类确定新的序号;如果不存在,则设置待更新类的序号为0号;然后待更新类根据序号修改源码以避免热更新包冲突;
步骤4、将修改的源码放入编译目录,使用javac命令对源码逐个进行编译,再将编译好的源码打包成热更新的jar包;
步骤5、运行附着程序,该程序用于附着用户指定pid的目标进程,附着之后将热更新包送入目标进程运行,实现类热更新;
所述类热更新历史查询的具体方法为:
步骤S1、按照进程pid查找日志文件,修改日志文件中的已替换类的日志记录和序号,并将新替换的类写入日志文件;
步骤S2、获取当前用户选取的pid号,根据pid搜索日志文件,将日志中的历史记录解析并呈现给用户。
2.根据权利要求1所述的一种面向Java类热更新的自动化管理方法,其特征在于:步骤3所述修改的源码包括代理类、转换器类、附着程序和配置文件;其中,代理类需要修改的内容包括代理类名、待修改类所在的软件包路径和转换器类名和待修改的类名;转换器类需要修改的内容包括转换器类名、待修改类的物理地址和待修改的包名;附着程序需要修改编译打包好的热更新包的物理地址;配置文件需要修改代理类名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216486.8A CN111580813B (zh) | 2020-03-25 | 2020-03-25 | 一种面向Java类热更新的自动化管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216486.8A CN111580813B (zh) | 2020-03-25 | 2020-03-25 | 一种面向Java类热更新的自动化管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111580813A true CN111580813A (zh) | 2020-08-25 |
CN111580813B CN111580813B (zh) | 2022-09-02 |
Family
ID=72122373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010216486.8A Active CN111580813B (zh) | 2020-03-25 | 2020-03-25 | 一种面向Java类热更新的自动化管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111580813B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685065A (zh) * | 2021-01-06 | 2021-04-20 | 广州朗国电子科技有限公司 | 安卓平台设备发布ota升级包的方法、装置及储存介质 |
CN112764827A (zh) * | 2020-12-31 | 2021-05-07 | 重庆广播电视大学重庆工商职业学院 | 一种具有安全验证的Java类热加载方法 |
CN113805911A (zh) * | 2021-02-24 | 2021-12-17 | 北京沃东天骏信息技术有限公司 | 服务器端的多版本程序管理方法、装置和系统 |
CN113900908A (zh) * | 2021-11-22 | 2022-01-07 | 北京达佳互联信息技术有限公司 | 日志更新方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577579A (zh) * | 2017-09-15 | 2018-01-12 | 通鼎互联信息股份有限公司 | 一种日志记录方法及装置 |
CN107908402A (zh) * | 2017-08-15 | 2018-04-13 | 口碑(上海)信息技术有限公司 | Java服务端热修复方法和系统 |
CN108089873A (zh) * | 2017-12-21 | 2018-05-29 | 福建天泉教育科技有限公司 | 一种应用组件即时更新的方法及终端 |
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
CN109542444A (zh) * | 2017-07-31 | 2019-03-29 | 华为软件技术有限公司 | Java应用的监控方法、装置、服务器和存储介质 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
-
2020
- 2020-03-25 CN CN202010216486.8A patent/CN111580813B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
CN109542444A (zh) * | 2017-07-31 | 2019-03-29 | 华为软件技术有限公司 | Java应用的监控方法、装置、服务器和存储介质 |
CN107908402A (zh) * | 2017-08-15 | 2018-04-13 | 口碑(上海)信息技术有限公司 | Java服务端热修复方法和系统 |
CN107577579A (zh) * | 2017-09-15 | 2018-01-12 | 通鼎互联信息股份有限公司 | 一种日志记录方法及装置 |
CN108089873A (zh) * | 2017-12-21 | 2018-05-29 | 福建天泉教育科技有限公司 | 一种应用组件即时更新的方法及终端 |
CN110262818A (zh) * | 2019-05-29 | 2019-09-20 | 北京达佳互联信息技术有限公司 | Java代码热更新方法、装置、电子设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
SURIYA SUBRAMANIAN 等: "Dynamic Software Updates: A VM-centric Approach", 《PLDI’09》 * |
张仕 等: "类动态更新事务研究", 《计算机科学》 * |
王拓等: "Java类动态加载机制在铁路互联网售票中的设计与实现", 《铁路计算机应用》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764827A (zh) * | 2020-12-31 | 2021-05-07 | 重庆广播电视大学重庆工商职业学院 | 一种具有安全验证的Java类热加载方法 |
CN112685065A (zh) * | 2021-01-06 | 2021-04-20 | 广州朗国电子科技有限公司 | 安卓平台设备发布ota升级包的方法、装置及储存介质 |
CN113805911A (zh) * | 2021-02-24 | 2021-12-17 | 北京沃东天骏信息技术有限公司 | 服务器端的多版本程序管理方法、装置和系统 |
CN113900908A (zh) * | 2021-11-22 | 2022-01-07 | 北京达佳互联信息技术有限公司 | 日志更新方法、装置、电子设备及存储介质 |
CN113900908B (zh) * | 2021-11-22 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 日志更新方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111580813B (zh) | 2022-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111580813B (zh) | 一种面向Java类热更新的自动化管理方法 | |
US7127707B1 (en) | Intellisense in project upgrade | |
US7908580B2 (en) | Connecting an integrated development environment with an application instance | |
US7478366B2 (en) | Debugger and method for debugging computer programs across multiple programming languages | |
US5956479A (en) | Demand based generation of symbolic information | |
US5727147A (en) | System and method for resolving symbolic references to externally located program files | |
US8028268B2 (en) | System and method for building software package for embedded system | |
US7870537B2 (en) | System and method for real-time applications modification | |
US8352926B2 (en) | Method and apparatus for a cross-platform translator from VB.net to java | |
US6637025B1 (en) | Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file | |
US20040168160A1 (en) | System and method for multi-language extensible compiler framework | |
US10417024B2 (en) | Generating verification metadata and verifying a runtime type based on verification metadata | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
US20150020057A1 (en) | Controlling application features | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN1105802A (zh) | 增量建立系统 | |
US20080127055A1 (en) | Application proxy | |
US8621429B2 (en) | Software development support apparatus, function extension method and storage medium for storing function extension program | |
CA2306545A1 (en) | Automatic stub/adapter generator | |
CN110457013B (zh) | 程序组件配置装置及方法 | |
KR102337962B1 (ko) | 마이크로서비스 아키텍처 애플리케이션 실행 시스템과 방법 및 이를 위한 컴퓨터 프로그램 | |
JPH07230386A (ja) | データ処理装置及び制御ルーチン呼出し方法 | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN111552480B (zh) | 跨平台编译方法、装置、设备及可读存储介质 | |
US9389838B2 (en) | Method for creating a computer software compiler for client server computing |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |