修改中间件的方法和装置制造方法

文档序号:6492114阅读:166来源:国知局
修改中间件的方法和装置制造方法
【专利摘要】本发明公开了一种修改由多个租户共享的中间件的方法和装置。所述方法包括:准备数据包,其包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及响应于获取到所述数据包,根据所述修改信息修改运行的中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。本发明实施例的装置与上述方法对应。利用本发明实施例的方法和装置,可以在多个租户共享同一中间件的同时,为各个租户提供中间件的不同版本,而不影响其他租户的使用,从而满足既共享又定制的需求。
【专利说明】修改中间件的方法和装置
【技术领域】
[0001]本发明涉及共享的中间件,更具体而言,涉及修改共享的中间件的方法和装置。
【背景技术】
[0002]随着信息技术和互联网的发展,资源共享成为一种趋势。例如,在云环境中,多个用户应用可以共享同一中间件,在该中间件上运行的应用实例可以由多个用户所共享,从而以高密度部署来实现最大可能的资源共享,以节省硬件和软件成本。在这样的情况下,每个用户并不独立地拥有共享的中间件,因此这样的用户往往称为“租户”(tenant)。然而,另一方面,在实现共享的同时,各个租户可能对于共享的中间件还各自具有独有的需求。
[0003]图1示出一个共享中间件的示意图。在图1的示意图中,在Java运行环境(JRE)中运行了作为中间件的WAS (WebSphere Application Server)。多个租户A, B, C, D可以共享该中间件WAS,并基于WAS运行其各自的用户应用。然而,各个租户对于该中间件可能具有各自的定制需求。例如,租户A可能希望对中间件的某个功能件进行修改,例如形成版本VA,以满足其专有的应用需求;租户B可能希望对该功能件进行更新和升级,形成版本VB,以提高运行性能;而租户C和D仅仅希望保持中间件的原始缺省版本Vtlt5在这样的情况下,就希望能够在租户A,B, C,D仍然共享该中间件的情况下,针对不同租户提供不同修改版本而不影响其他租户。
[0004]在现有技术的一个方案中,为了在多租户共享的系统中提供租户之间的隔离,在数据库中定义针对多个租户的多个分区,每个分区仅与一个租户相关联。将系统中所有租户共享的内容部分存储在数据库中,并将与每个租户对应的租户内容部分存储在其自有的分区中。通过使得每个分区仅能被一个租户访问来保持各个分区之间的隔离和独立。然而,这样的方案并不能在运行时过程中实现中间件的动态修改。因此,期望提出新的方案来满足租户在共享的同时实现定制的需求。

【发明内容】

[0005]考虑到现有技术中存在的问题,提出本发明,通过对运行的中间件进行定制和修改来为各个租户提供共享的中间件的不同版本,克服现有技术的不足。
[0006]根据本发明的一个方面,提供了一种修改由多个租户共享的中间件的方法,包括:准备数据包,所述数据包包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及响应于获取到所述数据包,根据所述修改信息修改运行的所述中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。
[0007]根据本发明的另一个方面,提供了一种修改由多个租户共享的中间件的装置,包括:准备单元,配置为准备数据包,所述数据包包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及修改单元,配置为响应于获取到所述数据包,根据所述修改信息修改运行的所述中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。
[0008]利用本发明实施例的方法和装置,可以在多个租户共享同一中间件的同时,为各个租户提供中间件的不同版本,而不影响其他租户的使用,从而满足了既共享又定制的需求。
【专利附图】

【附图说明】
[0009]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0010]图1示出一个共享中间件的示意图;
[0011]图2示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
[0012]图3示出根据本发明一个实施例的修改中间件的方法的流程图;
[0013]图4示出根据一个实施例准备数据包的子步骤;
[0014]图5示出根据一个实施例对类进行修改的子步骤;
[0015]图6示出对类进行修改的示例性代码;以及
[0016]图7示出根据本发明实施例的装置的框图。
【具体实施方式】
[0017]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0018]所属【技术领域】的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0019]可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0020]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0021]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一一但不限于一无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0022]可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0023]下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0024]也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
[0025]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0026]图2示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图2显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0027]如图2所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0028]总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0029]计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0030]系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如⑶-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0031]具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0032]计算机系统/服务器12也可以与一个或多个外部设备14 (例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口 22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0033]以下结合附图和具体例子描述本发明的实施方式。在本发明的实施例中,为了满足多个租户能够共享同一中间件,同时对该中间件进行定制的需求,为多个租户提供共享的中间件的不同版本。可以理解,对于通过面向对象程序实现的中间件,中间件中的各个功能件可以对应到程序中的各个类。因此,对中间件中的功能件的定制实际上相当于修改中间件中与功能件相关的类。另一方面,对于共享的中间件,其中的各个类也都是被多个租户所共享使用。因此,为了针对不同租户提供不同版本的中间件,本发明的实施例在运行时中基于特定租户的定制需求对共享的类进行修改,同时不影响其他租户对该类的使用。
[0034]现在参看图3,其示出根据本发明一个实施例的修改中间件的方法的流程图。如图3所示,修改共享中间件的方法包括:步骤32,其中准备数据包,包括修改信息和租户信息,所述修改信息包括中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出修改内容针对的特定租户;以及步骤34,其中响应于获取到所述数据包,根据修改信息修改运行的中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。下面结合具体例子描述上述步骤的执行方式。
[0035]首先,在步骤32,准备一个数据包,用以指示如何对中间件中的类进行修改。具体地,该数据包需包括修改信息和租户信息。修改信息旨在指示出,对中间件中的哪个类进行怎样的修改,而租户信息旨在指示出上述修改是针对哪个租户进行的。[0036]在一个实施例中,修改信息包括要修改的特定类的信息。在一个例子中,该特定类的信息包括特定类的标识信息,例如类的名字或其他标识符。在一些情况下,中间件的运行可能包含由不同加载器加载的相同名字的类。为此,在一个实施例中,上述特定类的信息还包括一些与该特定类相关的元数据,用以辅助定位到该特定类。具体地,这样的元数据可以包括,要修改的特定类的源、对应的加载器的信息、类的版本信息等。在指示出要修改的特定类的基础上,修改信息还包括对该特定类的修改内容,用以指示出将要对上述特定类进行怎样的修改。在一个实施例中,修改内容包含上述特定类的修改后的内容,即更新版本内容。在另一实施例中,修改内容包含应该对上述特定类进行的修改,也就是修改前和修改后的差异内容。
[0037]除了上述修改信息之外,数据包还包含租户信息,用于指示出上述修改信息所针对的特定租户。在一个实施例中,租户信息包含租户的标识信息,例如租户ID。在一些情况下,租户信息还包括与租户相关的进一步的信息,用以辅助定位出特定租户,例如租户的IP地址。
[0038]下面结合一个具体例子描述上述修改信息和租户信息。在一个例子中,租户A希望对特定类Class Example进行修改。Class Example的原始版本中定义了两个成员方法methodl和method2。租户A希望修改methodl的具体执行,也就是将methodl修改为methodl’,同时添加method3。对于如上所述的定制需求,可以准备这样的数据包,其中修改信息包括类Class Example的标识信息和补充元数据,以及对该类的修改内容,租户信息包括租户A的标识信息。在一个例子中,修改内容可以包括该类的更新版本内容,例如methodl’,method2,method3。在另一例子中,修改内容可以包括修改前后的差异内容,例如methodl’ 和新添加的 method3。
[0039]对于如上所述的数据包,可以通过图4的方法流程来获取,S卩,图4示出准备上述数据包的子步骤。如图4所示,首先在步骤321,获取租户的定制请求;接着,在步骤322,根据定制请求,准备修改信息和租户信息;然后,在步骤323,根据预定格式将所述修改信息和租户信息封装为数据包。在一个实施例中,定制请求中已经指示了希望对特定类进行的修改。在这样的情况下,步骤322仅需要从定制请求中提取修改信息,并获取发出该定制请求的租户的信息。在另一实施例中,定制请求仅指定了对中间件的功能件的修改。在这样的情况下,在步骤322,需要获取与上述功能件相对应的类,并将对功能件的修改转化为对类的修改,从而准备修改信息。在准备了修改信息和租户信息的基础上,在步骤323,将修改信息和租户信息组织成预定格式,从而形成所需的数据包。上述预定格式可以是运行时环境能够识别的任何预先定义的格式。由此,准备了用于修改中间件中的类的数据包。
[0040]在一个实施例中,准备数据包的步骤还包括,将数据包通知给运行上述中间件的运行时环境。在一个实施例中,通过预定接口将数据包提交到运行时环境,使得运行时环境获取到该数据包。在一个实施例中,将数据包存储在预定位置,以便运行时环境根据预先约定到该预定位置来读取,从而获取到该数据包。可以理解,取决于运行时环境的设定,还可以通过其他方式将准备的数据包通知给运行时环境。
[0041]响应于获取到如上所述的数据包,执行步骤34,在运行时中对数据包中指定的特定类进行修改。下面首先描述在运行时中对类进行修改的实现方式。
[0042]在一个实施例中,要修改的中间件运行在Java运行环境JRE中。在这样的情况下,可以利用Java虚拟机JVM的参数Java Agent来进行类的修改。具体地,Java Agent能够在不修改原有的java程序代码的情况下,重新定义和修改加载在运行时的类,由此实现热替换或热启动。在Java Agent的上下文中,可以通过参数中的Instrumentation inst,添加自定义的ClassFileTransformer来改变类文件。其中ClassFileTransformer是JRE提供的一个类转换器接口,用以实现类文件的转换。换而言之,可以利用Java Agent调用类转换器,通过类转换器实现类文件的修改。在通过上述接口调用类转换器的情况下,类的转换在JVM定义类之前发生。因此,该接口适用于要转换类的还没有被加载的情况。对于已经加载的类,JRE还提供了另一接口 Retransform。通过该接口调用类转换器可以实现对已加载的类的修改。
[0043]利用以上类转换器的功能,就可以在运行时中对上述的特定类进行修改。具体地,在一个实施例中,首先判断该特定类是否已经加载。如果该特定类还没有加载,那么进行等待直到运行时加载该特定类。在该特定类的加载过程中,直接利用上述类加载器来修改该特定类。如果该特定类已经加载,那么通过接口 Retransform连接到类加载器,从而对特定类进行修改。
[0044]以上结合Java运行环境描述了类的修改的实现方式。然而,本发明的实施例并不局限于Java语言。其它类似的基于Class字节码由虚拟机执行的运行环境,例如C#运行环境,也提供有与以上的类转换器类似的接口。通过调用适当的接口,可以修改在运行时中加载的类。
[0045]下面描述对上述特定类进行修改的具体过程。图5示出根据一个实施例对类进行修改的方法流程,即步骤34的子步骤。如图5所示,首先在步骤341,响应于获得到数据包,从数据包中提取修改信息和租户信息。如前所述,数据包是按照运行时环境能够识别的预定格式进行封装的,因此,运行时环境可以容易地对数据包进行数据提取和分析,从中获取修改信息和租户信息。基于提取的数据,在步骤342中,定位出要修改的特定类。具体地,修改信息中包含有特定类的标识信息,以及与该特定类相关的元数据。基于这样的标识信息和元数据,运行时可以准备确定出要修改的特定类。接着,在步骤343,根据修改内容,对定位出的特定类进行修改;并且,在步骤344,在所述特定类中为上述修改内容添加与特定租户相关的执行条件。上述步骤343和344都可以通过上述的类转换器来执行。
[0046]如前所述,在一个实施例中,修改内容包含对上述特定类进行的修改,也就是修改前和修改后的差异内容。在这样的情况下,可以直接根据差异内容进行修改。在一个实施例中,修改内容包含上述特定类的更新版本内容。在这样的情况下,在步骤343,首先将上述特定类的原始版本内容与更新版本内容进行比对,从而确定出差异内容,然后根据差异内容进行修改。具体而言,对于差异内容中包含的重新定义的变量(field)和/或方法(method),将这样的变量和/或方法添加到上述特定类的类体中。在一个实施例中,有些程序语言允许添加全新的变量或方法,例如在之前的例子中,租户A对Class Example进行修改时请求添加全新的method3。在这样的情况下,可以将修改内容中新添加的全新的变量或方法添加到指定的特定类中。接着,在步骤344中,对于上述添加的变量/方法,添加与特定租户对应的执行条件,使其仅应用于特定租户。在一个例子中,在所添加的变量/方法前添加条件语句或判断语句,从而使得仅对上述特定租户执行所添加的变量/方法。在多数程序语言中,不允许对特定类中原有的元素(变量/方法)进行删除。如果租户指定的修改内容中指明不需要某个变量/方法,可以通过添加执行条件的方式跳过该变量/方法的执行。由此,通过对特定类进行修改并添加与特定租户对应的执行条件,修改后的特定类成为一个“代理”类。在特定租户访问该特定类时,首先访问该“代理”类,并经由该代理类中的执行条件引导到与该特定租户对应的版本,或者称为“后端”类。于是,特定租户可以获得自己定制的类的版本,而不影响其他租户。
[0047]对于多个租户分别提出定制请求的情况,可以针对每一租户的每一请求执行图3的方法步骤,从而使得各个租户分别获得自己定制的类的版本。下面结合一段示例性代码的例子描述修改特定类的过程。
[0048]图6示出一段示例性代码,其中上图示出类Class Foo的原始版本。在原始版本中,Class Foo中定义了成员方法method A,method B,以及其他的变量和方法。假定租户I在其对应数据包中指示出希望对methodA和methodB分别进行修改,修改后的内容称为vl版本。为此,修改Class Foo中对method A和method B的定义,分别在其中添加租户I重新定义的 vl 版本的方法,即 Foo$Vl.memebrMethodA ()和(“tenantl”).memebrMethodB (),并在添加的新版本前加上if引导的执行条件。也就是说,经过判断,如果当前租户为租户I的话,执行修改的vl版本的方法A和方法B ;否则仍然执行原始版本。类似地,租户2希望将methodA和methodB修改为v2版本。此时,在methodA和methodB的定义中分别添加租户2重新定义的v2版本的方法,即Foo$V2.memebrMethodA O和(“tenant2”).memebrMethodB O,并同样在添加的新版本前加上if引导的执行条件,使得仅在当前租户为租户2的情况下,执行修改的v2版本的方法A和方法B。注意,在图6的例子中,methodA是由static修饰的静态成员方法,method B是实例成员方法。如本领域技术人员所知,静态成员属于整个类,因此可以通过访问类来访问静态成员。但对于实例成员来说,则必须通过对象(object)进行访问。因此,图6的代码对于method A和methodB的访问处理有所不同。对于静态成员方法methodA,直接获取新定义的版本Foo$Vl.memebrMethodAO。对于实例成员方法method B,首先以租户ID作为关键词将实例存储为映射(map.put (“tenantl”,Foo$Vl)),然后利用租户ID在映射图中查询,从而获取到实例(map.get ( “ tenant I ”).memebrMethodB O )。通过如上所述对原始Class Foo进行的修改,修改后的Class Foo作用为一个“代理”类。当租户访问Class Foo时,首先访问该“代理”类,并经由其中的执行条件引导到对应的版本。具体地,通过作为“代理”的修改后的Class Foo,租户I经由实线箭头被引导到vl版本的类,租户2经由虚线箭头被引导到v2版本的类,而其他租户仍然执行Class Foo的原始版本。由此,在多个租户共享该类的同时,为特定租户提供了定制版本。
[0049]可以看到,图6中出于示例和简明的目的没有示出Class Foo中各个成员方法的具体内容。本领域技术人员可以理解,上述的methodA可以是任意内容的静态成员方法,methodB可以是任意内容的实例成员方法。此外,尽管图6以java为例示出了对类进行修改的方式,但是该修改方式也可以通过其他语言以其他形式实现。
[0050]在步骤34中根据如上所述的执行方式对类进行修改的基础上,本发明的一个实施例的方法还包括运行已修改的特定类。由于经过修改的特定类可以指向与租户对应的版本,因此各个租户将会获得自己定制的版本的类,进而获得与该类对应的功能件。于是,在多个租户共享同一中间件的同时,各个租户还获得了自己定制的功能件,实现了对中间件的定制和修改。
[0051]在一个实施例中,本发明实施例的方法还包括,存储已修改的特定类。具体地,可以直接记录和存储共享的特定类的已修改版本;或者,也可以分别记录该特定类的原始版本和与各个租户对应的特定版本。在一个实施例中,将已修改的特定类存储在非易失性介质的指定位置。从而,当中间件的运行由于某种原因而需要重启时,可以直接从指定位置读取已修改的特定类,而不必重新准备数据包以及重新修改特定类。
[0052]如上所述,根据本发明的实施例的方法,可以在运行时中针对特定租户的定制请求修改共享的中间件中的共享类,使得所进行的修改仅应用于该特定租户。由此,在多个租户共享同一中间件的同时,为各个租户提供中间件的不同版本,而不影响其他租户的使用,从而满足了既共享又定制的需求。
[0053]基于同一发明构思,本发明的实施例还提供了一种修改由多个租户共享的中间件的装置。图7示出根据本发明实施例的装置的框图,该装置总体上标注为70。如图7所示,该修改中间件的装置70包括:准备单元72,配置为准备数据包,所述数据包包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及修改单元74,配置为响应于获取到所述数据包,根据所述修改信息修改运行的中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。
[0054]根据一个实施例,上述特定类的信息包括该特定类的标识信息,以及与所述特定类相关的元数据。
[0055]在一个实施例中,所述准备单元72配置为:获取所述特定租户的定制请求;根据定制请求,准备修改信息和租户信息;以及根据预定格式将所述修改信息和租户信息封装为数据包。
[0056]根据一个实施例,上述定制请求指示对所述中间件的特定功能件的修改,相应地,上述准备单元72配置为,获取与所述功能件相对应的类作为上述特定类,并将对功能件的修改转化为对所述特定类的修改。
[0057]在一个实施例中,所述准备单元72配置为,将所述数据包通知给运行上述中间件的运行时环境。
[0058]根据一个实施例,上述修改单元74通过运行时中的类转换器对所述特定类进行修改。
[0059]根据一个实施例,上述修改单元74包括(未示出):提取模块,配置为从数据包中提取修改信息和租户信息;定位模块,配置为定位出要修改的特定类;修改模块,配置为根据修改内容,对所述特定类进行修改;以及条件添加模块,配置为在所述特定类中为上述修改内容添加与特定租户相关的执行条件。
[0060]在一个实施例中,修改内容包含所述特定类的更新版本内容;相应地,上述修改模块配置为,将所述特定类的原始版本内容与更新版本内容进行比对,从而确定出差异内容,根据差异内容对所述特定类进行修改。
[0061]根据一个实施例,上述修改模块配置为,将差异内容中包含的以下中的至少一项添加到所述特定类中:重新定义的变量、重新定义的方法、新添加的变量、以及新添加的方法。[0062]根据一个实施例,上述装置70还包括存储单元(未示出),配置为存储已修改的特定类
[0063]以上对中间件进行修改的装置70的具体执行方式可以参照之前结合具体例子对图3的方法的描述,在此不再赘述。
[0064]利用本发明实施例的方法和装置,可以在多个租户共享同一中间件的同时,为各个租户提供中间件的不同版本,而不影响其他租户的使用,从而满足了既共享又定制的需求。
[0065]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0066]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本【技术领域】的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本【技术领域】的其它普通技术人员能理解本文披露的各实施例。
【权利要求】
1.一种修改由多个租户共享的中间件的方法,包括: 准备数据包,所述数据包包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及 响应于获取到所述数据包,根据所述修改信息修改运行的所述中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。
2.根据权利要求1的方法,其中所述特定类的信息包括所述特定类的标识信息,以及与所述特定类相关的元数据。
3.根据权利要求1的方法,其中所述准备数据包包括: 获取所述特定租户的定制请求; 根据定制请求,准备修改信息和租户信息;以及 根据预定格式将所述修改信息和租户信息封装为数据包。
4.根据权利要求3的方法,其中所述定制请求指示对所述中间件的特定功能件的修改,所述准备修改信息包括,获取与所述功能件相对应的类作为上述特定类,并将对功能件的修改转化为对所述特定类的修改。
5.根据权利要求1的方法,其中所述准备数据包还包括,将所述数据包通知给运行所述中间件的运行时环境。
6.根据权利要求1的方法,其中修改所述特定类包括通过运行时中的类转换器对所述特定类进行修改。
7.根据权利要求1的方法,其中修改所述特定类包括: 从数据包中提取修改信息和租户信息; 定位出要修改的特定类; 根据修改内容,对所述特定类进行修改;以及 在所述特定类中为上述修改内容添加与特定租户相关的执行条件。
8.根据权利要求7的方法,其中修改内容包含所述特定类的更新版本内容,所述根据修改内容对所述特定类进行修改包括,将所述特定类的原始版本内容与更新版本内容进行比对,从而确定出差异内容,根据差异内容对所述特定类进行修改。
9.根据权利要求8的方法,其中根据差异内容对所述特定类进行修改包括,将差异内容中包含的以下中的至少一个添加到所述特定类中:重新定义的变量、重新定义的方法、新添加的变量、以及新添加的方法。
10.根据权利要求1的方法,还包括存储已修改的特定类。
11.一种修改由多个租户共享的中间件的装置,包括: 准备单元,配置为准备数据包,所述数据包包括修改信息和租户信息,所述修改信息包括所述中间件中要修改的特定类的信息以及对该特定类的修改内容,所述租户信息指示出所述修改内容针对的特定租户;以及 修改单元,配置为响应于获取到所述数据包,根据所述修改信息修改运行的所述中间件中的所述特定类,并使得所述修改内容仅应用于所述特定租户。
12.根据权利要求11的装置,其中所述特定类的信息包括所述特定类的标识信息,以及与所述特定类相关的元数据。
13.根据权利要求11的装置,其中所述准备单元配置为: 获取所述特定租户的定制请求; 根据定制请求,准备修改信息和租户信息;以及 根据预定格式将所述修改信息和租户信息封装为数据包。
14.根据权利要求13的装置,其中所述定制请求指示对所述中间件的特定功能件的修改,所述准备单元配置为,获取与所述功能件相对应的类作为上述特定类,并将对功能件的修改转化为对所述特定类的修改。
15.根据权利要求11的装置,其中所述准备单元配置为,将所述数据包通知给运行所述中间件的运行时环境。
16.根据权利要求11的装置,其中所述修改单元通过运行时中的类转换器对所述特定类进行修改。
17.根据权利要求11的装置,其中所述修改单元包括: 提取模块,配置为从数据包中提取修改信息和租户信息; 定位模块,配置为定位出要修改的特定类; 修改模块,配置为根据修改内容,对所述特定类进行修改;以及 条件添加模块,配置为在所述特定类中为上述修改内容添加与特定租户相关的执行条件。
18.根据权利要求17的装置,其中修改内容包含所述特定类的更新版本内容,所述修改模块配置为,将所述特定类的原始版本内容与更新版本内容进行比对,从而确定出差异内容,根据差异内容对所述特定类进行修改。
19.根据权利要求18的装置,其中所述修改模块配置为,将差异内容中包含的以下中的至少一项添加到所述特定类中:重新定义的变量、重新定义的方法、新添加的变量、以及新添加的方法。
20.根据权利要求11的装置,还包括存储单元,配置为存储已修改的特定类。
【文档编号】G06F9/44GK103853535SQ201210505784
【公开日】2014年6月11日 申请日期:2012年11月30日 优先权日:2012年11月30日
【发明者】蔡俊杰, 李三红, 吕晶, 陈磊, 高巍巍 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1