CN117851087A - 一种基于Java动态字节码的远程调用动态扩展方法 - Google Patents
一种基于Java动态字节码的远程调用动态扩展方法 Download PDFInfo
- Publication number
- CN117851087A CN117851087A CN202311710213.9A CN202311710213A CN117851087A CN 117851087 A CN117851087 A CN 117851087A CN 202311710213 A CN202311710213 A CN 202311710213A CN 117851087 A CN117851087 A CN 117851087A
- Authority
- CN
- China
- Prior art keywords
- server
- java
- remote call
- task
- remote
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000006854 communication Effects 0.000 claims abstract description 13
- 238000004891 communication Methods 0.000 claims abstract description 13
- 230000008569 process Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 10
- 238000012423 maintenance Methods 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 8
- 238000012545 processing Methods 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 5
- 238000007726 management method Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 5
- 230000005856 abnormality Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000007175 bidirectional communication Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013024 troubleshooting Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及信息技术的领域,具体涉及一种基于Java动态字节码的远程调用动态扩展方法及系统,该方法包括:基于建立C/S架构,客户端与服务端之间建立通信渠道,服务端提供界面,界面用于维护Java源码类型的远程调用任务;通过界面定义Java源码类型的远程任务,通过Javassist将Java源码动态预先编译为任务字节码,并保存在服务端;服务端以远程调用任务ID、版本号和业务数据为参数发起对指定客户端的远程调用;客户端创建自定义ClassLoader,从服务端远程加载任务字节码并生成Java类;客户端执行远程任务对象的方法并返回调用结果。本发明进行一次编译,客户端多端运行,省去了客户端编译的重复操作。
Description
技术领域
本发明涉及信息技术的领域,具体而言,涉及一种基于Java动态字节码的远程调用动态扩展方法。
背景技术
私有云IaaS场景下,为了实现对vpc内部组件的远程管理,通常会在vpc内指定云主机上安装一个代理程序(agent),再通过服务端下发任务指令来实现对指定agent的远程调用,例如对vpc内部组件发起http调用或是配置文件读写等复杂的功能。传统方案是基于Java语言实现的C/S架构,服务端通过应用层协议调用agent上的远程调用接口来实现。
当前,系统中对远程调用的实现主要分为shell脚本语言和Java语言两种:通过shell脚本定义的远程调用任务不需要编译就可以执行,但是对http请求、字符串处理等复杂调用或者包含Java语言特性的场景,实现就会非常复杂。对逻辑复杂或包含Java语言特性的远程调用,需要同时在调用端和被调用端编写配套的实现代码,再通过应用层协议执行远程调用。存在开发运维工作量大,可扩展性差的问题。
发明内容
有鉴于此,本发明提供了一种基于Java动态字节码的远程调用动态扩展方法,能够使用Java语言特性来定义远程任务,同时也可以灵活扩展,提高开发效率,减少运维成本。
一方面,本发明提出的一种基于Java动态字节码的远程调用动态扩展方法,包括:
基于建立C/S架构,客户端与服务端之间建立通信渠道,服务端提供界面,所述界面用于维护Java源码类型的远程调用任务;
通过所述界面定义Java源码类型的远程任务,通过Javassist将Java源码动态预先编译为任务字节码,并保存在服务端;
服务端发起对指定客户端的远程调用;
客户端创建自定义ClassLoader,根据任务ID、版本号动态从服务端远程加载任务字节码,并生成Java类;
客户端执行远程任务对象的方法并返回调用结果。
进一步地,还包括:
客户端根据远程调用ID和版本号缓存远程调用实现类的字节码到本地,用于加快程序运行效率。
进一步地,客户端创建自定义ClassLoader根据任务ID和版本号参数从服务端加载远程调用实现类的字节码,再通过Java反射机制实例化远程调用对象,并强制转型为约定的远程调用接口。
进一步地,所述通信渠道为客户端通过TCP长连接与服务端通信。
进一步地,服务端发起对指定客户端的远程调用具体为:
服务端以远程调用任务的ID、版本号和业务数据为参数发起对指定客户端的远程调用。
进一步地,服务端调用客户端上指定任务通过基于TCP长连接实现应用层的远程调用协议,提供服务端调用客户端上指定任务的通用接口,使用Gson工具名作为序列化/反序列化工具处理参数和返回值。
进一步地,保存远程调用源码任务时,服务端使用Javassist将其动态编译成字节码文件,使用任务名和版本号作为类名,编译出的字节码存放到服务端文件系统。
进一步地,服务端保存远程调用源码的版本历史到数据库,做源码级别的版本控制。
另一方面,本发明还提出了一种基于Java动态字节码的远程调用动态扩展系统,包括:
服务端管理台,基于Web管理系统提供界面用于维护Java源码类型的远程调用任务,并且具有增删改查的功能;
服务端界面,提供Web界面,通过所述Web界面定义和管理远程任务;
Javassist编译器,基于Javassist将通过服务端界面定义的Java源码类型的远程任务动态编译为字节码,所述字节码将被保存在服务端;
远程调用协议,基于TCP长连接实现应用层的远程调用协议,用于服务端调用客户端上指定任务的通用接口;所述远程调用协议使用Gson作为序列化/反序列化工具来处理参数和返回值;
远程调用接口,提供约定的远程调用接口,包括远程调用的方法、参数、返回值和异常,远程调用任务只能基于所述远程调用接口编写实现方法;
自定义ClassLoader,被客户端创建,根据远程调用任务的ID和版本号从服务端动态加载远程任务字节码,并生成Java类。
本发明实施例一种基于Java动态字节码的远程调用动态扩展方法及系统,与现有技术相比,其有益效果在于:
本发明通过Java源码来定义远程调用任务,可使用Java语言特性来编写复杂的调用逻辑;使用Java动态编译技术,所以不需要编译和部署即可生效,能起到动态扩展的效果;对远程调用实现做源码级别的版本控制,可在运行时灵活切换,规避了动态扩展带来的线上风险;服务端一次编译,客户端多端运行,省去了客户端编译的重复操作,也避免了运行时编译出错的可能性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例基于Java动态字节码的远程调用动态扩展方法的流程图;
图2是本发明实施例基于Java动态字节码的远程调用动态扩展装置的功能框图。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。
参阅图1-2所示,本发明优选实施例的一种基于Java动态字节码的远程调用动态扩展方法,包括:
基于建立C/S架构,客户端与服务端之间建立通信渠道,服务端提供界面,界面用于维护Java源码类型的远程调用任务;
通过界面定义Java源码类型的远程任务,通过Javassist将Java源码动态预先编译为任务字节码,并保存在服务端;
服务端发起对指定客户端的远程调用;
客户端创建自定义ClassLoader,根据任务ID、版本号动态从服务端远程加载任务字节码,并生成Java类;
客户端执行远程任务对象的方法并返回调用结果。
需要说明的是,使用Java语言特性定义任务,该方法允许开发人员使用Java编程语言的特性来定义复杂的远程调用任务,包括Java编程语言所提供的各种库、框架和功能,从而更容易实现复杂的远程调用逻辑;通过Javassist技术,Java源码类型的远程任务可以在服务端动态编译为字节码,无需手动编译和部署,带来了动态扩展的效果,使新任务的部署和更新更加灵活;本实施例的方法提供了源码级别的版本控制机制,允许在运行时切换不同版本的任务实现。这有助于规避动态扩展可能带来的线上风险,同时允许系统在不同版本的任务之间切换;使用Java源码来定义任务简化了复杂调用逻辑的开发。此外,不需要手动编译和部署任务,减少了运维工作,提高了开发和维护的效率;客户端创建自定义ClassLoader并动态加载任务字节码,无需将任务的源代码发送到客户端,有助于保持客户端的独立性,并降低了潜在的安全风险;通过建立C/S架构通信渠道和使用标准的远程调用协议,该方法提供了通用的远程调用框架,可用于多种远程调用场景。
在其中一些实施例中,还包括:
客户端根据远程调用ID和版本号缓存远程调用实现类的字节码到本地,用于加快程序运行效率。
可以理解的是,客户端维护一个本地缓存管理器,用于存储远程调用任务的字节码。这个管理器可以采用内存缓存或者磁盘缓存的方式,具体选择取决于任务数量和大小。客户端根据远程调用的ID和版本号构建唯一的缓存键,以便在缓存中检索相应的字节码。通常,缓存键可以使用远程调用的ID和版本号拼接而成,确保唯一性。客户端可以采用LRU(Least Recently Used)等缓存淘汰策略,确保缓存空间被高频使用的任务占用,降低不常使用任务的缓存优先级,提高缓存的命中率。在发起远程调用之前,客户端首先检查本地缓存中是否存在与远程调用ID和版本号相对应的字节码。如果存在,则直接使用本地缓存中的字节码实例化远程调用对象,避免了从服务端再次加载字节码的时间和网络开销。当服务端发起新的远程调用或者更新了任务的版本时,客户端需要相应地更新本地缓存。可以通过定期检查服务端的任务版本信息,或者在服务端任务发生变化时由服务端通知客户端进行缓存的更新。
在其中一些实施例中,客户端创建自定义ClassLoader根据任务ID和版本号参数从服务端加载远程调用实现类的字节码,再通过Java反射机制实例化远程调用对象,并强制转型为约定的远程调用接口。
可以理解的是,上述内容的实现方式可以是:客户端自定义ClassLoader的创建:客户端需要创建一个自定义的ClassLoader,用于加载服务端提供的远程调用任务的字节码。ClassLoader可以继承自java.lang.ClassLoader类,重写findClass方法,以便在加载字节码时使用自定义的逻辑。
字节码的获取:客户端向服务端请求获取特定任务的字节码。通常,可以使用HTTP或其他网络协议进行通信,请求服务端提供任务的字节码。服务端应该响应客户端的请求,并返回字节码数据。
自定义ClassLoader加载字节码:客户端的自定义ClassLoader通过网络获取到字节码数据后,使用自定义的逻辑加载这些字节码。可以使用defineClass方法加载字节码,将其转化为Class对象。
实例化远程调用对象:客户端根据获得的Class对象,使用Java反射机制实例化远程调用对象。这可以通过Class.newInstance()方法或者反射调用构造函数来完成。
接口强制转型:客户端可以将实例化后的对象强制转型为约定的远程调用接口,客户端可以调用任务接口中定义的方法。
在其中一些实施例中,通信渠道为客户端通过TCP长连接与服务端通信。
在其中一些实施例中,服务端发起对指定客户端的远程调用具体为:
服务端以远程调用任务的ID、版本号和业务数据为参数发起对指定客户端的远程调用。
需要说明的是,通过TCP长连接,客户端和服务端能够建立双向通信渠道,使得双方可以在任何时候进行通信,增强了系统的实时性和互动性。服务端可以随时向指定客户端发起远程调用请求,使得远程调用可以实时触发和执行,在需要即时响应的场景中尤为重要,如监控、告警等。通过将远程调用任务的ID、版本号和业务数据作为参数传递,服务端能够根据具体任务和版本号动态调用客户端,实现更加灵活的远程调用逻辑。TCP长连接允许异步通信,客户端和服务端可以并行处理多个请求,从而提高了系统的并发性和性能。由于通信渠道建立在TCP协议上,可以很容易地扩展客户端和服务端的连接,以满足不断增长的通信需求。长连接在网络不稳定的环境下更为可靠,因为连接的维护可以容忍一定的网络波动,而不需要频繁重新建立连接。如果连接断开,客户端和服务端可以实现自动重连机制,确保连接的可靠性。
在其中一些实施例中,服务端调用客户端上指定任务通过基于TCP长连接实现应用层的远程调用协议,提供服务端调用客户端上指定任务的通用接口,使用Gson工具名作为序列化/反序列化工具处理参数和返回值。
可以理解的是,上述内容可通过以下方式实现:定义远程调用协议接口:在服务端和客户端之间共享一个协议接口,该接口定义了可以远程调用的方法、参数、返回值和异常。这个接口应该包含所有远程调用所需的信息。
序列化参数和返回值:在客户端和服务端,使用Gson或类似的库来序列化方法调用的参数和反序列化返回值。这确保了数据在网络上传输时以标准格式进行编码和解码。
建立TCP长连接:使用Java的Socket编程,服务端和客户端之间建立持久的TCP长连接,以实现双向通信。
服务端提供通用接口:服务端应提供一个通用接口,用于接收远程调用请求。这个接口可以接受请求的方法名、参数和其他调用信息,然后按照协议定义执行远程调用的逻辑。
客户端调用服务端方法:客户端通过建立的TCP连接向服务端发送远程调用请求,将方法名和参数进行序列化后发送给服务端。
服务端处理远程调用请求:服务端接收客户端的请求后,根据请求中的方法名和参数执行对应的方法。然后将方法的返回值进行序列化后发送回客户端。
客户端接收和处理结果:客户端接收服务端的响应,对其进行反序列化,得到方法的返回值,最后将其返回给调用方。
异常处理:如果远程方法执行过程中发生异常,需要将异常信息捕获并序列化后传递给客户端,客户端根据接收到的异常信息来处理异常情况。
在其中一些实施例中,保存远程调用源码任务时,服务端使用Javassist将其动态编译成字节码文件,使用任务名和版本号作为类名,编译出的字节码存放到服务端文件系统。
在其中一些实施例中,服务端保存远程调用源码的版本历史到数据库,做源码级别的版本控制。
需要说明的是,动态扩展性:使用Javassist动态编译源码使得新的远程调用任务可以在不需要重新编译整个应用的情况下添加到系统中,提高了系统的可扩展性,允许动态引入新功能。通过将任务名和版本号作为类名,服务端能够防止重复的任务名称,使得不同版本的任务可以共存。这允许在系统中支持多个不同版本的任务,从而确保兼容性和平滑升级。由于不需要重新部署或编译整个应用,动态编译的任务可以在运行时立即生效。这使得开发人员可以更迅速地调整远程调用任务而不中断正在运行的系统。将远程调用源码的版本历史保存到数据库,并进行源码级别的版本控制,使得系统能够跟踪远程调用任务的演化。这有助于了解每个任务版本的修改记录,便于排查问题和回滚到以前的版本。通过将远程调用任务版本的历史记录保存到数据库,管理员可以更好地管理和维护不同版本的任务。这对于系统的稳定性和可维护性非常重要。源码级别的版本控制允许在运行时灵活切换任务的版本,从而规避了动态扩展可能引入的线上风险,确保系统的稳定性。
优选地,本实施例基于Netty框架开发一套C/S架构的基础框架,客户端通过TCP长连接和服务端通信,服务端持有客户端的会话信息;基于TCP长连接实现一套应用层的远程调用协议,提供服务端调用客户端上指定任务的通用接口,使用Gson工具名作为序列化/反序列化工具处理参数和返回值;服务端的管理台为采用springboot+mybatis-plus+vue开发的WEB管理系统,提供界面用于维护Java源码类型的远程调用任务,具有增删改查的功能;系统提供约定的远程调用接口,包括远程调用的方法、参数、返回值和异常,远程调用任务只能基于该接口编写实现方法;保存远程调用源码任务时,服务端会使用Javassist将其动态编译成字节码文件,使用任务名和版本号作为类名来避免重复,编译出的字节码存放到服务端文件系统;服务端保存远程调用源码的版本历史到数据库,对其做源码级别的版本控制;服务端使用远程任务的ID、版本号和业务数据作为参数,发起对指定客户端的远程调用(基于2中的协议);客户端创建自定义ClassLoader根据任务ID和版本号参数从服务端加载远程调用实现类的字节码,再通过Java反射机制实例化远程调用对象,并强制转型为约定的远程调用接口;客户端执行远程调用对象的接口方法,再通过远程调用协议返回调用结果到服务端;客户端根据远程调用ID和版本号缓存远程调用实现类的字节码到本地,以加快程序运行效率。
另一方面,本发明实施例还提供了一种基于Java动态字节码的远程调用动态扩展系统,包括:
服务端管理台,基于Web管理系统提供界面用于维护Java源码类型的远程调用任务,并且具有增删改查的功能;
服务端界面,提供Web界面,通过Web界面定义和管理远程任务;
Javassist编译器,基于Javassist将通过服务端界面定义的Java源码类型的远程任务动态编译为字节码,字节码将被保存在服务端;
远程调用协议,基于TCP长连接实现应用层的远程调用协议,用于服务端调用客户端上指定任务的通用接口;远程调用协议使用Gson作为序列化/反序列化工具来处理参数和返回值;
远程调用接口,提供约定的远程调用接口,包括远程调用的方法、参数、返回值和异常,远程调用任务只能基于远程调用接口编写实现方法;
自定义ClassLoader,被客户端创建,根据远程调用任务的ID和版本号从服务端动态加载远程任务字节码,并生成Java类。
具体而言,如图2所示,承担任务管理的服务端其具备:任务定义、任务测试、任务编译、版本控制、任务发布与远程调用功能;承担任务执行的客户端具备:任务更新、任务加载、任务缓存与任务执行功能。
需要说明的是,该系统允许在运行时动态添加、修改和删除远程调用任务,而无需重新编译或部署整个应用程序。这提供了极大的灵活性和动态扩展性,允许系统随着需求的变化而变化。通过提供Web界面,开发人员和管理员可以轻松地管理和配置远程调用任务,包括定义、编辑、删除和查询任务。这简化了任务管理过程,减少了开发和维护的复杂性。自定义ClassLoader可根据任务的ID和版本号从服务端加载远程任务字节码。客户端通过Java反射机制实例化远程调用对象,这提供了更高的性能,因为字节码的本地执行比其他方式更快。使用Gson作为序列化/反序列化工具来处理参数和返回值,使得数据传输更高效,而且允许不同版本的任务使用相同的协议进行通信。通过提供远程调用接口,约定了远程调用任务的方法、参数、返回值和异常,从而确保任务的一致性和可互操作性。版本控制允许系统维护不同任务版本的历史记录,这有助于问题排查、回滚和维护。服务端的管理台基于Web管理系统提供了用户友好的界面,使任务的创建和管理变得更加容易。管理员可以轻松地查看、修改和监控任务。源码级别的版本控制允许在运行时灵活切换任务的版本,从而规避了动态扩展可能引入的线上风险,确保系统的稳定性。
以上所述仅为本发明的一个实施例子,但不能以此限制本发明的范围,凡依据本发明所做的结构上的变化,只要不失本发明的要义所在,都应视为落入本发明保护范围之内受到制约。
需要说明的是,上述实施例提供的系统,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。
术语“包括”或者任何其它类似用语旨在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备/装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括这些过程、方法、物品或者设备/装置所固有的要素。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种基于Java动态字节码的远程调用动态扩展方法,其特征在于,包括:
基于建立C/S架构,客户端与服务端之间建立通信渠道,服务端提供界面,所述界面用于维护Java源码类型的远程调用任务;
通过所述界面定义Java源码类型的远程任务,通过Javassist将Java源码动态预先编译为任务字节码,并保存在服务端;
服务端发起对指定客户端的远程调用;
客户端创建自定义ClassLoader,根据任务ID、版本号动态从服务端远程加载任务字节码,并生成Java类;
客户端执行远程任务对象的方法并返回调用结果。
2.根据权利要求1所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,还包括:
客户端根据远程调用ID和版本号缓存远程调用实现类的字节码到本地,用于加快程序运行效率。
3.根据权利要求2所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,客户端创建自定义ClassLoader根据任务ID和版本号参数从服务端加载远程调用实现类的字节码,再通过Java反射机制实例化远程调用对象,并强制转型为约定的远程调用接口。
4.根据权利要求1所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,所述通信渠道为客户端通过TCP长连接与服务端通信。
5.根据权利要求1所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,服务端发起对指定客户端的远程调用具体为:
服务端以远程调用任务的ID、版本号和业务数据为参数发起对指定客户端的远程调用。
6.根据权利要求5所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,服务端调用客户端上指定任务通过基于TCP长连接实现应用层的远程调用协议,提供服务端调用客户端上指定任务的通用接口,使用Gson工具名作为序列化/反序列化工具处理参数和返回值。
7.根据权利要求1所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,保存远程调用源码任务时,服务端使用Javassist将其动态编译成字节码文件,使用任务名和版本号作为类名,编译出的字节码存放到服务端文件系统。
8.根据权利要求1所述的基于Java动态字节码的远程调用动态扩展方法,其特征在于,服务端保存远程调用源码的版本历史到数据库,做源码级别的版本控制。
9.一种基于Java动态字节码的远程调用动态扩展系统,其特征在于,包括:
服务端管理台,基于Web管理系统提供界面用于维护Java源码类型的远程调用任务,并且具有增删改查的功能;
服务端界面,提供Web界面,通过所述Web界面定义和管理远程任务;
Javassist编译器,基于Javassist将通过服务端界面定义的Java源码类型的远程任务动态编译为字节码,所述字节码将被保存在服务端;
远程调用协议,基于TCP长连接实现应用层的远程调用协议,用于服务端调用客户端上指定任务的通用接口;所述远程调用协议使用Gson作为序列化/反序列化工具来处理参数和返回值;
远程调用接口,提供约定的远程调用接口,包括远程调用的方法、参数、返回值和异常,远程调用任务只能基于所述远程调用接口编写实现方法;
自定义ClassLoader,被客户端创建,根据远程调用任务的ID和版本号从服务端动态加载远程任务字节码,并生成Java类。
10.一种如权利要求1-8任一项所述的基于Java动态字节码的远程调用动态扩展方法在云主机监控运维基础组件领域的应用。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311710213.9A CN117851087A (zh) | 2023-12-13 | 2023-12-13 | 一种基于Java动态字节码的远程调用动态扩展方法 |
PCT/CN2023/143141 WO2024212612A1 (zh) | 2023-12-13 | 2023-12-29 | 一种基于Java动态字节码的远程调用动态扩展方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311710213.9A CN117851087A (zh) | 2023-12-13 | 2023-12-13 | 一种基于Java动态字节码的远程调用动态扩展方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117851087A true CN117851087A (zh) | 2024-04-09 |
Family
ID=90531163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311710213.9A Pending CN117851087A (zh) | 2023-12-13 | 2023-12-13 | 一种基于Java动态字节码的远程调用动态扩展方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117851087A (zh) |
WO (1) | WO2024212612A1 (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6385661B1 (en) * | 1998-10-19 | 2002-05-07 | Recursion Software, Inc. | System and method for dynamic generation of remote proxies |
CN111338770A (zh) * | 2020-02-12 | 2020-06-26 | 咪咕文化科技有限公司 | 一种任务调度的方法、服务器和计算机可读存储介质 |
CN111736916B (zh) * | 2020-06-08 | 2024-10-29 | 北京达佳互联信息技术有限公司 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
CN112035276B (zh) * | 2020-08-06 | 2024-07-16 | 上海视云网络科技有限公司 | 一种基于java的跨平台可扩展的RPC框架设计方法 |
CN116501348B (zh) * | 2023-04-11 | 2023-12-05 | 北京三维天地科技股份有限公司 | 一种基于java虚拟机的热更新java代码的方法 |
-
2023
- 2023-12-13 CN CN202311710213.9A patent/CN117851087A/zh active Pending
- 2023-12-29 WO PCT/CN2023/143141 patent/WO2024212612A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024212612A1 (zh) | 2024-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6385661B1 (en) | System and method for dynamic generation of remote proxies | |
US6622175B1 (en) | System and method for communications in a distributed processing environment | |
US6654793B1 (en) | System and method for facilitating dynamic loading of stub information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space | |
US7917913B2 (en) | Injecting proxy components using blueprints | |
US8091097B2 (en) | Distributed virtual machine architecture | |
US5860010A (en) | Use of language with similar representation for programs and data in distributed data processing | |
US6978447B1 (en) | Method and system for efficiently interpreting a computer program | |
EP0928089A2 (en) | Mobility of agents in a network | |
EP0595661A1 (en) | Generating peer-to-peer communication interfaces with client-server oriented tools | |
US20030233634A1 (en) | Open debugging environment | |
CA2675666A1 (en) | Accelerated execution for emulated environments | |
CN113688186B (zh) | 智能合约执行方法、引擎及区块链节点 | |
JP2000515278A (ja) | 非同期式にオブジェクトを呼出し、処理するための方法および装置 | |
US20020174161A1 (en) | Java startup wrapper | |
US7721278B2 (en) | Modular server architecture for multi-environment HTTP request processing | |
US7331047B2 (en) | Deterministic system and method for implementing software distributed between a desktop and a remote device | |
CN111066000B (zh) | 对在托管运行时环境中的页面共享进行优化的可重放执行 | |
CN116755788A (zh) | 一种线上规则修改方法、装置、设备及存储介质 | |
CN117369975A (zh) | 一种通用计算引擎的加载方法 | |
CN114816445A (zh) | 系统平台架构、函数发布方法及装置、平台及存储介质 | |
CN117851087A (zh) | 一种基于Java动态字节码的远程调用动态扩展方法 | |
Knight et al. | Mobile agent-based management in the INSERT project | |
KR100494827B1 (ko) | 하드웨어 독립적인 통신 인터페이스를 가지는 분산객체모델 기반의 라디오 서버와 이를 이용한 통신제어방법 | |
US20040163086A1 (en) | WebDAV servlet | |
CN113641641A (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 |