CN106843851A - 基于ActiveMQ异构类加载器反序列化的实现方法及装置 - Google Patents
基于ActiveMQ异构类加载器反序列化的实现方法及装置 Download PDFInfo
- Publication number
- CN106843851A CN106843851A CN201611236563.6A CN201611236563A CN106843851A CN 106843851 A CN106843851 A CN 106843851A CN 201611236563 A CN201611236563 A CN 201611236563A CN 106843851 A CN106843851 A CN 106843851A
- Authority
- CN
- China
- Prior art keywords
- classloader
- api service
- activemq
- amended
- interface
- 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
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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- 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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了基于ActiveMQ异构类加载器反序列化的实现方法及装置,该方法包括:对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;在反序列化数据时,调用修改后的API服务;通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。该方法实现避免ActiveMQ的API服务抛出异常。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及基于ActiveMQ异构类加载器反序列化的实现方法及装置。
背景技术
随着大数据云计算的来临,分布式应用程序已成为系统架构的主流设计,但在设计分布式系统时,系统程序之间的耦合度尤为重要。耦合意味着两个系统程序或者多个系统程序之间的相互依赖关系。一般简单的方式是在所有的系统程序中从架构设计上与其他程序间的交叉实现,这样必然会导致,一个系统程序改变,另一个应用程序也要跟着改变。这种架构是一种高耦合的应用。在系统维护管理上会造成巨大的困难,因为即使很小的一个改动,很可能会涉及到整个大系统。低耦合是一种一个应用的改变不会影响到其他系统应用的集成方式。大数据来临同时也面临着大数据的处理、高并发等等问题,这是对一个企业的挑战,也是对一个系统的程序设计的挑战。
在程序设计采用低耦合插件化的设计模式,可以在大数据缓冲上采用了ActiveMQ(简称MQ)。ActiveMQ就是采用低耦合的应用架构。任何一个应用对ActiveMQ的调用不依赖与任何其他应用,没有任何依赖或者顺序要求,ActiveMQ是一款支持高并发,高吞吐量的消息中间件。若系统架构是采用类似OSGI的插件化模式开发,区别于传统普通的应用,传统普通的应用整个系统一般都是只有一个类加载器,而插件化模式开发的系统由于是插件化系统,每个插件及依赖于主框架提供的服务又都可以独立运行,所以每个插件都拥有自己的类加载器。
而调用的MQ的提供API服务是由主框架提供的。由于MQ提供API的自身机制,在序列化的时候,只允许当前类加载器去反序列数据,也就是哪个应用启动的MQ的API服务,MQ的API服务在反序列化的时候,就只能通过那个应用的类加载器来反序列化数据,所以当子插件在调用主架构提供的MQ的API服务时,就无法序列化插件自身加载的类。例如:MQ的API服务是有由A框架启动的,那么他的加载器为a,子插件B的类加载器b,加载了一个类b1.class,当B插件在调用A框架提供的MQ的API服务将数据序列化成b1时,就会抛出类找不到异常(ClassNotFoundException),因为加载器a根本没有加载类b1.class。参考图1,该图为原生态方式,原生态MQ提供的API服务在启动的时候,只能使用当前启动它容器或框架的类加载器,所以当其他类加载器加载的应用去调用MQ的API服务时,MQ的API服务就从自己身的类加载中找不到要反序列化的类对象,这时MQ的API服务就会抛出异常。
发明内容
本发明的目的是提供基于ActiveMQ异构类加载器反序列化的实现方法及装置,以实现避免ActiveMQ的API服务抛出异常。
为解决上述技术问题,本发明提供基于ActiveMQ异构类加载器反序列化的实现方法,该方法包括:
对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
在反序列化数据时,调用修改后的API服务;
通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
优选的,对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器,包括:
定义接口SynObjectMessage;
对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoader classLoader)。
优选的,接口SynObjectMessage继承接口ObjectMessage。
优选的,所述利用查找到的类组件来对数据进行反序列化之后,还包括:
将数据反序列化为类对象。
本发明还提供一种基于ActiveMQ异构类加载器反序列化的实现装置,用于实现上述基于ActiveMQ异构类加载器反序列化的实现方法,该装置包括:
修改模块,用于对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
调用模块,用于在反序列化数据时,调用修改后的API服务;
查找模块,用于通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
优选的,所述修改模块包括:
定义单元,用于定义接口SynObjectMessage;
增加单元,用于对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoader classLoader)。
优选的,接口SynObjectMessage继承接口ObjectMessage。
优选的,所述查找模块还包括:
类对象生成单元,用于将数据反序列化为类对象。
本发明所提供的基于ActiveMQ异构类加载器反序列化的实现方法及装置,对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;在反序列化数据时,调用修改后的API服务;通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。可见,对MQ提供的API进行了改进,使API服务能实现自定义类加载器,让MQ原生态的API支持自定义类加载器,如此在调用MQ的API服务将数据反序列化成指定类对象的时候,为其指定类加载器,这样MQ服务在反序列化数据的时候就会在指定的类加载器中找到相应的类来进行反序列化,因此,ActiveMQ的API服务具有自定义设置类加载器的能力,实现异构类加载器的数据反序列化,避免ActiveMQ的API服务抛出异常。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为原生态MQ提供的API服务示意图;
图2为本发明所提供的基于ActiveMQ异构类加载器反序列化的实现方法的流程图;
图3为改进后的API服务示意图;
图4为JMS中针对消息Message支持的五种类型接口示意图;
图5为本发明所提供的基于ActiveMQ异构类加载器反序列化的实现装置的结构示意图。
具体实施方式
本发明的核心是提供基于ActiveMQ异构类加载器反序列化的实现方法及装置,以实现避免ActiveMQ的API服务抛出异常。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
术语解释如下:
ActiveMQ:简称:MQ,是一种面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
序列化:将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
类加载器:是JavaTM中的一个很重要的概念。类加载器负责加载Java类的字节代码到Java虚拟机中。
OSGI:OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范。OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于Java语言的服务(业务)规范。简单来说,OSGi可以认为是Java平台的模块层。
API:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
JMS:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
请参考图2,图2为本发明所提供的基于ActiveMQ异构类加载器反序列化的实现方法的流程图,该方法包括:
S11:对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
S12:在反序列化数据时,调用修改后的API服务;
S13:通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
可见,对MQ提供的API进行了改进,使API服务能实现自定义类加载器,让MQ原生态的API支持自定义类加载器,如此在调用MQ的API服务将数据反序列化成指定类对象的时候,为其指定类加载器,这样MQ服务在反序列化数据的时候就会在指定的类加载器中找到相应的类来进行反序列化,因此,ActiveMQ的API服务具有自定义设置类加载器的能力,实现异构类加载器的数据反序列化,避免ActiveMQ的API服务抛出异常。
具体的,经过针对MQ反序列化的研究,以及针对MQ提供的API源代码的分析,实现自定义类加载器。针对MQ提供的API进行了大量的重新构造、改进,使其可以提供实现自定义类加载器的功能。
参考图3,改进后,让MQ原生态的API支持自定义类加载器,则在调用MQ的API服务将数据反序列化成指定类对象的时候,为其指定类加载器,这样MQ服务在反序列化数据的时候就会在指定的类加载器中找到相应的类来进行反序列化。
基于上述方法,进一步的,步骤S11的过程具体包括:定义接口SynObjectMessage;对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoaderclassLoader)。
其中,接口SynObjectMessage继承接口ObjectMessage。
详细的,MQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,所以MQ也完全遵守JMS协议规范,在JMS中针对消息Message支持五种类型,如下:
1、StreamMessage:Java数据流消息,用标准流操作来顺序的填充和读取。
2、MapMessage:一个Map类型的消息;名称为string类型,而值为Java的基本类型。
3、TextMessage:普通字符串消息,包含一个String。
4、ObjectMessage:对象消息,包含一个可序列化的Java对象。
5、BytesMessage:二进制数组消息,包含一个byte[]。
基于ObjectMessage对象,如图4,在MQ中ActiveMQObjectMessage组件中实现了ObjectMessage对象的功能,由于原生的JMS提供的ObjectMessage接口本身就不支持自定义类加载器,所以MQ自然也不支持自定义设置类加载器。
如图4,定义了接口SynObjectMessage接口,并继承了接口ObjectMessage,同时增加了支持自定义设置类加载器的方法定义getObject(ClassLoader classLoader)并返回可序列化的对象Serializable对象。
SynActiveMQObjectMessage实现了SynObjectMessage接口并继承了ActiveMQObjectMessage,使之即具有自定义设置类加载器的功能,同时也支持原有MQ的API服务提供的所有方法函数。
通过针对ActiveMQ的API服务源代码的修改,以及部分接口的复写,将原有返回ActiveMQObjectMessage对象替换成SynActiveMQObjectMessage对象。使之ActiveMQ的API服务具有自定义设置类加载器的能力,实现异构类加载器的数据反序列化。
进一步的,步骤S13中,利用查找到的类组件来对数据进行反序列化之后,还包括:将数据反序列化为类对象。
请参考图5,图5为本发明所提供的基于ActiveMQ异构类加载器反序列化的实现装置的结构示意图,该装置用于实现上述基于ActiveMQ异构类加载器反序列化的实现方法,该装置包括:
修改模块101,用于对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
调用模块102,用于在反序列化数据时,调用修改后的API服务;
查找模块103,用于通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
基于上述装置,进一步的,所述修改模块包括:
定义单元,用于定义接口SynObjectMessage;
增加单元,用于对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoader classLoader)。
其中,接口SynObjectMessage继承接口ObjectMessage。
进一步的,所述查找模块还包括:类对象生成单元,用于将数据反序列化为类对象。
以上对本发明所提供的基于ActiveMQ异构类加载器反序列化的实现方法及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (8)
1.一种基于ActiveMQ异构类加载器反序列化的实现方法,其特征在于,包括:
对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
在反序列化数据时,调用修改后的API服务;
通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
2.如权利要求1所述的方法,其特征在于,对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器,包括:
定义接口SynObjectMessage;
对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoader classLoader)。
3.如权利要求2所述的方法,其特征在于,接口SynObjectMessage继承接口ObjectMessage。
4.如权利要求1至3中任意一项所述的方法,所述利用查找到的类组件来对数据进行反序列化之后,还包括:
将数据反序列化为类对象。
5.一种基于ActiveMQ异构类加载器反序列化的实现装置,其特征在于,用于实现如权利要求1至4中任意一项所述的方法,包括:
修改模块,用于对消息中间件ActiveMQ的API服务进行修改,使修改后的API服务支持自定义类加载器;
调用模块,用于在反序列化数据时,调用修改后的API服务;
查找模块,用于通过修改后的API服务在类加载器中查找对应的类组件,利用查找到的类组件来对数据进行反序列化。
6.如权利要求5所述的装置,其特征在于,所述修改模块包括:
定义单元,用于定义接口SynObjectMessage;
增加单元,用于对于接口SynObjectMessage,增加支持自定义类加载器的函数getObject(ClassLoader classLoader)。
7.如权利要求6所述的装置,其特征在于,接口SynObjectMessage继承接口ObjectMessage。
8.如权利要求5至7中任意一项所述的装置,其特征在于,所述查找模块还包括:
类对象生成单元,用于将数据反序列化为类对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611236563.6A CN106843851A (zh) | 2016-12-28 | 2016-12-28 | 基于ActiveMQ异构类加载器反序列化的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611236563.6A CN106843851A (zh) | 2016-12-28 | 2016-12-28 | 基于ActiveMQ异构类加载器反序列化的实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106843851A true CN106843851A (zh) | 2017-06-13 |
Family
ID=59113636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611236563.6A Pending CN106843851A (zh) | 2016-12-28 | 2016-12-28 | 基于ActiveMQ异构类加载器反序列化的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106843851A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651332A (zh) * | 2020-02-24 | 2020-09-11 | 中国工程物理研究院计算机应用研究所 | 一种基于消息中间件的大规模异构设备集成控制方法 |
CN112737876A (zh) * | 2020-12-24 | 2021-04-30 | 四川爱联科技股份有限公司 | 一种基于云端的插件式测试系统及测试方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7003782B2 (en) * | 2002-09-27 | 2006-02-21 | International Business Machines Corporation | Optimized COBRA software method invocation |
CN104360865A (zh) * | 2014-11-28 | 2015-02-18 | 中国建设银行股份有限公司 | 一种序列化方法、反序列化方法及相关设备 |
-
2016
- 2016-12-28 CN CN201611236563.6A patent/CN106843851A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7003782B2 (en) * | 2002-09-27 | 2006-02-21 | International Business Machines Corporation | Optimized COBRA software method invocation |
CN104360865A (zh) * | 2014-11-28 | 2015-02-18 | 中国建设银行股份有限公司 | 一种序列化方法、反序列化方法及相关设备 |
Non-Patent Citations (3)
Title |
---|
GODISTHEBOY: "Hessian/Java反序列化采用自定义的Classloader", 《HTTPS://WWW.ITEYE.COM/BLOG/FLEX2JAVA-395704》 * |
佚名: "Spring整合ActiveMQ-序列化的 Java对象", 《HTTPS://WWW.ITEYE.COM/BLOG/HQ82001-2200321》 * |
沧海一粟: "在不同的classloader之间进行对象的序列化和反序列化", 《HTTPS://WWW.ITEYE.COM/BLOG/BILL-XING-1154105》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651332A (zh) * | 2020-02-24 | 2020-09-11 | 中国工程物理研究院计算机应用研究所 | 一种基于消息中间件的大规模异构设备集成控制方法 |
CN111651332B (zh) * | 2020-02-24 | 2023-04-25 | 中国工程物理研究院计算机应用研究所 | 一种基于消息中间件的大规模异构设备集成控制方法 |
CN112737876A (zh) * | 2020-12-24 | 2021-04-30 | 四川爱联科技股份有限公司 | 一种基于云端的插件式测试系统及测试方法 |
CN112737876B (zh) * | 2020-12-24 | 2022-07-08 | 四川爱联科技股份有限公司 | 一种基于云端的插件式测试系统及测试方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020048391A1 (zh) | 基于多租户技术的web服务的部署、调用方法和装置 | |
JP5936157B2 (ja) | 分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステム、方法、およびコンピュータ・プログラム(分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリング) | |
US8887158B2 (en) | Dynamic cluster expansion through virtualization-based live cloning | |
US8424026B1 (en) | Execution of applications distributed across a plurality of computing devices | |
US8683459B2 (en) | Automated virtual appliance sizing | |
CN106663033B (zh) | 在事务中间件机器环境支持绕域和代理模型并更新服务信息以跨域消息传送的系统和方法 | |
US7877091B2 (en) | Method and system for executing a container managed application on a processing device | |
CN107181679A (zh) | 一种端口绑定实现方法及装置 | |
US20090125611A1 (en) | Sharing loaded java classes among a plurality of nodes | |
WO2007059465A2 (en) | Server side application integration framework | |
US10810220B2 (en) | Platform and software framework for data intensive applications in the cloud | |
CN113934464A (zh) | Linux系统中启动安卓应用的方法、装置和电子设备 | |
CN107959582A (zh) | 一种切片实例的管理方法及装置 | |
US20190312909A1 (en) | Method and system for applying compliance policies on private and public cloud | |
CN101169733A (zh) | 用于提供基于策略的操作系统服务的方法和系统 | |
US20200167713A1 (en) | Business processing method, apparatus, device and system using the same, and readable storage medium of the same | |
WO2023082716A1 (zh) | 在Linux系统中操作安卓应用的方法、装置和设备 | |
CN114077367A (zh) | Linux系统中实现安卓应用快捷方式的方法和装置 | |
CN110659104B (zh) | 一种业务监控方法及相关设备 | |
US20240179092A1 (en) | Traffic service threads for large pools of network addresses | |
CN106843851A (zh) | 基于ActiveMQ异构类加载器反序列化的实现方法及装置 | |
US20190278639A1 (en) | Service for enabling legacy mainframe applications to invoke java classes in a service address space | |
CN113626095A (zh) | 配置中心的切换方法、切换系统、电子设备及存储介质 | |
KR20010041227A (ko) | 분산 시스템에서 정보를 동적으로 증명하기 위한 장치 및 방법 | |
US11249760B2 (en) | Parameter management between programs |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170613 |