
技术摘要:
本发明提供一种面向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; 3 CN 111580813 A 说 明 书 2/4 页 步骤2、清空编译目录,将待替换的类文件复制至编译目录,并自动生成与软件包 路径相同的目录结构; 步骤3、首先查找目标进程是否存在热替换日志,如果存在,则读取日志,为待更新 的类确定新的序号;如果不存在,则设置待更新类的序号为0号;然后待更新类根据序号修 改源码以避免热更新包冲突; 所述修改的源码包括代理类、转换器类、附着程序和配置文件;其中,代理类需要 修改的内容包括代理类名、待修改类所在的软件包路径和转换器类名和待修改的类名;转 换器类需要修改的内容包括转换器类名、待修改类的物理地址和待修改的包名;附着程序 需要修改编译打包好的热更新包的物理地址;配置文件需要修改代理类名; 步骤4、将修改的源码放入编译目录,使用javac命令对源码逐个进行编译,再将编 译好的源码打包成热更新的jar包; 步骤5、运行附着程序,该程序用于附着用户指定pid的目标进程,附着之后将热更 新包送入目标进程运行,实现类热更新; 所述类热更新历史查询的具体方法为: 步骤S1、按照进程pid查找日志文件,修改日志文件中的已替换类的日志记录和序 号,并将新替换的类写入日志文件; 步骤S2、获取当前用户选取的pid号,根据pid搜索日志文件,将日志中的历史记录 解析并呈现给用户。 采用上述技术方案所产生的有益效果在于:本发明提供的一种面向Java类热更新 的自动化管理方法,可以根据要热替换的类文件,自动修改源代码,自动编译,制作热替换 包并自动实施替换,大大简化了热更新类时所花费的人工成本,同时利用日志的方式,实现 了对指定进程已经热更新的类的查看。 附图说明 图1为本发明实施例提供的一种面向Java类热更新的自动化管理方法的流程图; 图2为本发明实施例提供的使用Java语言创建的用户交互界面示意图; 图3为本发明实施例提供的自动生成的编译目录示意图; 图4为本发明实施例提供的DogA、DogB类依次热更新后的结果图。