修改中間件的方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種修改由多個(gè)租戶共享的中間件的方法和裝置。所述方法包括:準(zhǔn)備數(shù)據(jù)包,其包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。本發(fā)明實(shí)施例的裝置與上述方法對(duì)應(yīng)。利用本發(fā)明實(shí)施例的方法和裝置,可以在多個(gè)租戶共享同一中間件的同時(shí),為各個(gè)租戶提供中間件的不同版本,而不影響其他租戶的使用,從而滿足既共享又定制的需求。
【專利說明】修改中間件的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及共享的中間件,更具體而言,涉及修改共享的中間件的方法和裝置。
【背景技術(shù)】
[0002]隨著信息技術(shù)和互聯(lián)網(wǎng)的發(fā)展,資源共享成為一種趨勢。例如,在云環(huán)境中,多個(gè)用戶應(yīng)用可以共享同一中間件,在該中間件上運(yùn)行的應(yīng)用實(shí)例可以由多個(gè)用戶所共享,從而以高密度部署來實(shí)現(xiàn)最大可能的資源共享,以節(jié)省硬件和軟件成本。在這樣的情況下,每個(gè)用戶并不獨(dú)立地?fù)碛泄蚕淼闹虚g件,因此這樣的用戶往往稱為“租戶”(tenant)。然而,另一方面,在實(shí)現(xiàn)共享的同時(shí),各個(gè)租戶可能對(duì)于共享的中間件還各自具有獨(dú)有的需求。
[0003]圖1示出一個(gè)共享中間件的示意圖。在圖1的示意圖中,在Java運(yùn)行環(huán)境(JRE)中運(yùn)行了作為中間件的WAS (WebSphere Application Server)。多個(gè)租戶A, B, C, D可以共享該中間件WAS,并基于WAS運(yùn)行其各自的用戶應(yīng)用。然而,各個(gè)租戶對(duì)于該中間件可能具有各自的定制需求。例如,租戶A可能希望對(duì)中間件的某個(gè)功能件進(jìn)行修改,例如形成版本VA,以滿足其專有的應(yīng)用需求;租戶B可能希望對(duì)該功能件進(jìn)行更新和升級(jí),形成版本VB,以提高運(yùn)行性能;而租戶C和D僅僅希望保持中間件的原始缺省版本Vtlt5在這樣的情況下,就希望能夠在租戶A,B, C,D仍然共享該中間件的情況下,針對(duì)不同租戶提供不同修改版本而不影響其他租戶。
[0004]在現(xiàn)有技術(shù)的一個(gè)方案中,為了在多租戶共享的系統(tǒng)中提供租戶之間的隔離,在數(shù)據(jù)庫中定義針對(duì)多個(gè)租戶的多個(gè)分區(qū),每個(gè)分區(qū)僅與一個(gè)租戶相關(guān)聯(lián)。將系統(tǒng)中所有租戶共享的內(nèi)容部分存儲(chǔ)在數(shù)據(jù)庫中,并將與每個(gè)租戶對(duì)應(yīng)的租戶內(nèi)容部分存儲(chǔ)在其自有的分區(qū)中。通過使得每個(gè)分區(qū)僅能被一個(gè)租戶訪問來保持各個(gè)分區(qū)之間的隔離和獨(dú)立。然而,這樣的方案并不能在運(yùn)行時(shí)過程中實(shí)現(xiàn)中間件的動(dòng)態(tài)修改。因此,期望提出新的方案來滿足租戶在共享的同時(shí)實(shí)現(xiàn)定制的需求。
【發(fā)明內(nèi)容】
[0005]考慮到現(xiàn)有技術(shù)中存在的問題,提出本發(fā)明,通過對(duì)運(yùn)行的中間件進(jìn)行定制和修改來為各個(gè)租戶提供共享的中間件的不同版本,克服現(xiàn)有技術(shù)的不足。
[0006]根據(jù)本發(fā)明的一個(gè)方面,提供了一種修改由多個(gè)租戶共享的中間件的方法,包括:準(zhǔn)備數(shù)據(jù)包,所述數(shù)據(jù)包包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的所述中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。
[0007]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種修改由多個(gè)租戶共享的中間件的裝置,包括:準(zhǔn)備單元,配置為準(zhǔn)備數(shù)據(jù)包,所述數(shù)據(jù)包包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及修改單元,配置為響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的所述中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。
[0008]利用本發(fā)明實(shí)施例的方法和裝置,可以在多個(gè)租戶共享同一中間件的同時(shí),為各個(gè)租戶提供中間件的不同版本,而不影響其他租戶的使用,從而滿足了既共享又定制的需求。
【專利附圖】
【附圖說明】
[0009]通過結(jié)合附圖對(duì)本公開示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯,其中,在本公開示例性實(shí)施方式中,相同的參考標(biāo)號(hào)通常代表相同部件。
[0010]圖1示出一個(gè)共享中間件的示意圖;
[0011]圖2示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖;
[0012]圖3示出根據(jù)本發(fā)明一個(gè)實(shí)施例的修改中間件的方法的流程圖;
[0013]圖4示出根據(jù)一個(gè)實(shí)施例準(zhǔn)備數(shù)據(jù)包的子步驟;
[0014]圖5示出根據(jù)一個(gè)實(shí)施例對(duì)類進(jìn)行修改的子步驟;
[0015]圖6示出對(duì)類進(jìn)行修改的示例性代碼;以及
[0016]圖7示出根據(jù)本發(fā)明實(shí)施例的裝置的框圖。
【具體實(shí)施方式】
[0017]下面將參照附圖更詳細(xì)地描述本公開的優(yōu)選實(shí)施方式。雖然附圖中顯示了本公開的優(yōu)選實(shí)施方式,然而應(yīng)該理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0018]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本公開可以具體實(shí)現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0019]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀的介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0020]計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于一電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0021]計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0022]可以以一種或多種程序設(shè)計(jì)語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計(jì)語言一諸如”C”語言或類似的程序設(shè)計(jì)語言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0023]下面將參照本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,這些計(jì)算機(jī)程序指令通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0024]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在能使得計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出一個(gè)包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。
[0025]也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令能夠提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0026]圖2示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框圖。圖2顯示的計(jì)算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施例的功能和使用范圍帶來任何限制。
[0027]如圖2所示,計(jì)算機(jī)系統(tǒng)/服務(wù)器12以通用計(jì)算設(shè)備的形式表現(xiàn)。計(jì)算機(jī)系統(tǒng)/服務(wù)器12的組件可以包括但不限于:一個(gè)或者多個(gè)處理器或者處理單元16,系統(tǒng)存儲(chǔ)器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲(chǔ)器28和處理單元16)的總線18。
[0028]總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲(chǔ)器總線或者存儲(chǔ)器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強(qiáng)型ISA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局域總線以及外圍組件互連(PCI)總線。
[0029]計(jì)算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計(jì)算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計(jì)算機(jī)系統(tǒng)/服務(wù)器12訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動(dòng)的和不可移動(dòng)的介質(zhì)。
[0030]系統(tǒng)存儲(chǔ)器28可以包括易失性存儲(chǔ)器形式的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲(chǔ)器(RAM)30和/或高速緩存存儲(chǔ)器32。計(jì)算機(jī)系統(tǒng)/服務(wù)器12可以進(jìn)一步包括其它可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì)。僅作為舉例,存儲(chǔ)系統(tǒng)34可以用于讀寫不可移動(dòng)的、非易失性磁介質(zhì)(圖3未顯示,通常稱為“硬盤驅(qū)動(dòng)器”)。盡管圖1中未示出,可以提供用于對(duì)可移動(dòng)非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動(dòng)器,以及對(duì)可移動(dòng)非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動(dòng)器。在這些情況下,每個(gè)驅(qū)動(dòng)器可以通過一個(gè)或者多個(gè)數(shù)據(jù)介質(zhì)接口與總線18相連。存儲(chǔ)器28可以包括至少一個(gè)程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個(gè))程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實(shí)施例的功能。
[0031]具有一組(至少一個(gè))程序模塊42的程序/實(shí)用工具40,可以存儲(chǔ)在例如存儲(chǔ)器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個(gè)或者多個(gè)應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個(gè)或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施例中的功能和/或方法。
[0032]計(jì)算機(jī)系統(tǒng)/服務(wù)器12也可以與一個(gè)或多個(gè)外部設(shè)備14 (例如鍵盤、指向設(shè)備、顯示器24等)通信,還可與一個(gè)或者多個(gè)使得用戶能與該計(jì)算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè)備通信,和/或與使得該計(jì)算機(jī)系統(tǒng)/服務(wù)器12能與一個(gè)或多個(gè)其它計(jì)算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口 22進(jìn)行。并且,計(jì)算機(jī)系統(tǒng)/服務(wù)器12還可以通過網(wǎng)絡(luò)適配器20與一個(gè)或者多個(gè)網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過總線18與計(jì)算機(jī)系統(tǒng)/服務(wù)器12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合計(jì)算機(jī)系統(tǒng)/服務(wù)器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動(dòng)器、冗余處理單元、外部磁盤驅(qū)動(dòng)陣列、RAID系統(tǒng)、磁帶驅(qū)動(dòng)器以及數(shù)據(jù)備份存儲(chǔ)系統(tǒng)等。
[0033]以下結(jié)合附圖和具體例子描述本發(fā)明的實(shí)施方式。在本發(fā)明的實(shí)施例中,為了滿足多個(gè)租戶能夠共享同一中間件,同時(shí)對(duì)該中間件進(jìn)行定制的需求,為多個(gè)租戶提供共享的中間件的不同版本??梢岳斫?,對(duì)于通過面向?qū)ο蟪绦驅(qū)崿F(xiàn)的中間件,中間件中的各個(gè)功能件可以對(duì)應(yīng)到程序中的各個(gè)類。因此,對(duì)中間件中的功能件的定制實(shí)際上相當(dāng)于修改中間件中與功能件相關(guān)的類。另一方面,對(duì)于共享的中間件,其中的各個(gè)類也都是被多個(gè)租戶所共享使用。因此,為了針對(duì)不同租戶提供不同版本的中間件,本發(fā)明的實(shí)施例在運(yùn)行時(shí)中基于特定租戶的定制需求對(duì)共享的類進(jìn)行修改,同時(shí)不影響其他租戶對(duì)該類的使用。
[0034]現(xiàn)在參看圖3,其示出根據(jù)本發(fā)明一個(gè)實(shí)施例的修改中間件的方法的流程圖。如圖3所示,修改共享中間件的方法包括:步驟32,其中準(zhǔn)備數(shù)據(jù)包,包括修改信息和租戶信息,所述修改信息包括中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出修改內(nèi)容針對(duì)的特定租戶;以及步驟34,其中響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)修改信息修改運(yùn)行的中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。下面結(jié)合具體例子描述上述步驟的執(zhí)行方式。
[0035]首先,在步驟32,準(zhǔn)備一個(gè)數(shù)據(jù)包,用以指示如何對(duì)中間件中的類進(jìn)行修改。具體地,該數(shù)據(jù)包需包括修改信息和租戶信息。修改信息旨在指示出,對(duì)中間件中的哪個(gè)類進(jìn)行怎樣的修改,而租戶信息旨在指示出上述修改是針對(duì)哪個(gè)租戶進(jìn)行的。[0036]在一個(gè)實(shí)施例中,修改信息包括要修改的特定類的信息。在一個(gè)例子中,該特定類的信息包括特定類的標(biāo)識(shí)信息,例如類的名字或其他標(biāo)識(shí)符。在一些情況下,中間件的運(yùn)行可能包含由不同加載器加載的相同名字的類。為此,在一個(gè)實(shí)施例中,上述特定類的信息還包括一些與該特定類相關(guān)的元數(shù)據(jù),用以輔助定位到該特定類。具體地,這樣的元數(shù)據(jù)可以包括,要修改的特定類的源、對(duì)應(yīng)的加載器的信息、類的版本信息等。在指示出要修改的特定類的基礎(chǔ)上,修改信息還包括對(duì)該特定類的修改內(nèi)容,用以指示出將要對(duì)上述特定類進(jìn)行怎樣的修改。在一個(gè)實(shí)施例中,修改內(nèi)容包含上述特定類的修改后的內(nèi)容,即更新版本內(nèi)容。在另一實(shí)施例中,修改內(nèi)容包含應(yīng)該對(duì)上述特定類進(jìn)行的修改,也就是修改前和修改后的差異內(nèi)容。
[0037]除了上述修改信息之外,數(shù)據(jù)包還包含租戶信息,用于指示出上述修改信息所針對(duì)的特定租戶。在一個(gè)實(shí)施例中,租戶信息包含租戶的標(biāo)識(shí)信息,例如租戶ID。在一些情況下,租戶信息還包括與租戶相關(guān)的進(jìn)一步的信息,用以輔助定位出特定租戶,例如租戶的IP地址。
[0038]下面結(jié)合一個(gè)具體例子描述上述修改信息和租戶信息。在一個(gè)例子中,租戶A希望對(duì)特定類Class Example進(jìn)行修改。Class Example的原始版本中定義了兩個(gè)成員方法methodl和method2。租戶A希望修改methodl的具體執(zhí)行,也就是將methodl修改為methodl’,同時(shí)添加method3。對(duì)于如上所述的定制需求,可以準(zhǔn)備這樣的數(shù)據(jù)包,其中修改信息包括類Class Example的標(biāo)識(shí)信息和補(bǔ)充元數(shù)據(jù),以及對(duì)該類的修改內(nèi)容,租戶信息包括租戶A的標(biāo)識(shí)信息。在一個(gè)例子中,修改內(nèi)容可以包括該類的更新版本內(nèi)容,例如methodl’,method2,method3。在另一例子中,修改內(nèi)容可以包括修改前后的差異內(nèi)容,例如methodl’ 和新添加的 method3。
[0039]對(duì)于如上所述的數(shù)據(jù)包,可以通過圖4的方法流程來獲取,S卩,圖4示出準(zhǔn)備上述數(shù)據(jù)包的子步驟。如圖4所示,首先在步驟321,獲取租戶的定制請(qǐng)求;接著,在步驟322,根據(jù)定制請(qǐng)求,準(zhǔn)備修改信息和租戶信息;然后,在步驟323,根據(jù)預(yù)定格式將所述修改信息和租戶信息封裝為數(shù)據(jù)包。在一個(gè)實(shí)施例中,定制請(qǐng)求中已經(jīng)指示了希望對(duì)特定類進(jìn)行的修改。在這樣的情況下,步驟322僅需要從定制請(qǐng)求中提取修改信息,并獲取發(fā)出該定制請(qǐng)求的租戶的信息。在另一實(shí)施例中,定制請(qǐng)求僅指定了對(duì)中間件的功能件的修改。在這樣的情況下,在步驟322,需要獲取與上述功能件相對(duì)應(yīng)的類,并將對(duì)功能件的修改轉(zhuǎn)化為對(duì)類的修改,從而準(zhǔn)備修改信息。在準(zhǔn)備了修改信息和租戶信息的基礎(chǔ)上,在步驟323,將修改信息和租戶信息組織成預(yù)定格式,從而形成所需的數(shù)據(jù)包。上述預(yù)定格式可以是運(yùn)行時(shí)環(huán)境能夠識(shí)別的任何預(yù)先定義的格式。由此,準(zhǔn)備了用于修改中間件中的類的數(shù)據(jù)包。
[0040]在一個(gè)實(shí)施例中,準(zhǔn)備數(shù)據(jù)包的步驟還包括,將數(shù)據(jù)包通知給運(yùn)行上述中間件的運(yùn)行時(shí)環(huán)境。在一個(gè)實(shí)施例中,通過預(yù)定接口將數(shù)據(jù)包提交到運(yùn)行時(shí)環(huán)境,使得運(yùn)行時(shí)環(huán)境獲取到該數(shù)據(jù)包。在一個(gè)實(shí)施例中,將數(shù)據(jù)包存儲(chǔ)在預(yù)定位置,以便運(yùn)行時(shí)環(huán)境根據(jù)預(yù)先約定到該預(yù)定位置來讀取,從而獲取到該數(shù)據(jù)包??梢岳斫?,取決于運(yùn)行時(shí)環(huán)境的設(shè)定,還可以通過其他方式將準(zhǔn)備的數(shù)據(jù)包通知給運(yùn)行時(shí)環(huán)境。
[0041]響應(yīng)于獲取到如上所述的數(shù)據(jù)包,執(zhí)行步驟34,在運(yùn)行時(shí)中對(duì)數(shù)據(jù)包中指定的特定類進(jìn)行修改。下面首先描述在運(yùn)行時(shí)中對(duì)類進(jìn)行修改的實(shí)現(xiàn)方式。
[0042]在一個(gè)實(shí)施例中,要修改的中間件運(yùn)行在Java運(yùn)行環(huán)境JRE中。在這樣的情況下,可以利用Java虛擬機(jī)JVM的參數(shù)Java Agent來進(jìn)行類的修改。具體地,Java Agent能夠在不修改原有的java程序代碼的情況下,重新定義和修改加載在運(yùn)行時(shí)的類,由此實(shí)現(xiàn)熱替換或熱啟動(dòng)。在Java Agent的上下文中,可以通過參數(shù)中的Instrumentation inst,添加自定義的ClassFileTransformer來改變類文件。其中ClassFileTransformer是JRE提供的一個(gè)類轉(zhuǎn)換器接口,用以實(shí)現(xiàn)類文件的轉(zhuǎn)換。換而言之,可以利用Java Agent調(diào)用類轉(zhuǎn)換器,通過類轉(zhuǎn)換器實(shí)現(xiàn)類文件的修改。在通過上述接口調(diào)用類轉(zhuǎn)換器的情況下,類的轉(zhuǎn)換在JVM定義類之前發(fā)生。因此,該接口適用于要轉(zhuǎn)換類的還沒有被加載的情況。對(duì)于已經(jīng)加載的類,JRE還提供了另一接口 Retransform。通過該接口調(diào)用類轉(zhuǎn)換器可以實(shí)現(xiàn)對(duì)已加載的類的修改。
[0043]利用以上類轉(zhuǎn)換器的功能,就可以在運(yùn)行時(shí)中對(duì)上述的特定類進(jìn)行修改。具體地,在一個(gè)實(shí)施例中,首先判斷該特定類是否已經(jīng)加載。如果該特定類還沒有加載,那么進(jìn)行等待直到運(yùn)行時(shí)加載該特定類。在該特定類的加載過程中,直接利用上述類加載器來修改該特定類。如果該特定類已經(jīng)加載,那么通過接口 Retransform連接到類加載器,從而對(duì)特定類進(jìn)行修改。
[0044]以上結(jié)合Java運(yùn)行環(huán)境描述了類的修改的實(shí)現(xiàn)方式。然而,本發(fā)明的實(shí)施例并不局限于Java語言。其它類似的基于Class字節(jié)碼由虛擬機(jī)執(zhí)行的運(yùn)行環(huán)境,例如C#運(yùn)行環(huán)境,也提供有與以上的類轉(zhuǎn)換器類似的接口。通過調(diào)用適當(dāng)?shù)慕涌?,可以修改在運(yùn)行時(shí)中加載的類。
[0045]下面描述對(duì)上述特定類進(jìn)行修改的具體過程。圖5示出根據(jù)一個(gè)實(shí)施例對(duì)類進(jìn)行修改的方法流程,即步驟34的子步驟。如圖5所示,首先在步驟341,響應(yīng)于獲得到數(shù)據(jù)包,從數(shù)據(jù)包中提取修改信息和租戶信息。如前所述,數(shù)據(jù)包是按照運(yùn)行時(shí)環(huán)境能夠識(shí)別的預(yù)定格式進(jìn)行封裝的,因此,運(yùn)行時(shí)環(huán)境可以容易地對(duì)數(shù)據(jù)包進(jìn)行數(shù)據(jù)提取和分析,從中獲取修改信息和租戶信息?;谔崛〉臄?shù)據(jù),在步驟342中,定位出要修改的特定類。具體地,修改信息中包含有特定類的標(biāo)識(shí)信息,以及與該特定類相關(guān)的元數(shù)據(jù)?;谶@樣的標(biāo)識(shí)信息和元數(shù)據(jù),運(yùn)行時(shí)可以準(zhǔn)備確定出要修改的特定類。接著,在步驟343,根據(jù)修改內(nèi)容,對(duì)定位出的特定類進(jìn)行修改;并且,在步驟344,在所述特定類中為上述修改內(nèi)容添加與特定租戶相關(guān)的執(zhí)行條件。上述步驟343和344都可以通過上述的類轉(zhuǎn)換器來執(zhí)行。
[0046]如前所述,在一個(gè)實(shí)施例中,修改內(nèi)容包含對(duì)上述特定類進(jìn)行的修改,也就是修改前和修改后的差異內(nèi)容。在這樣的情況下,可以直接根據(jù)差異內(nèi)容進(jìn)行修改。在一個(gè)實(shí)施例中,修改內(nèi)容包含上述特定類的更新版本內(nèi)容。在這樣的情況下,在步驟343,首先將上述特定類的原始版本內(nèi)容與更新版本內(nèi)容進(jìn)行比對(duì),從而確定出差異內(nèi)容,然后根據(jù)差異內(nèi)容進(jìn)行修改。具體而言,對(duì)于差異內(nèi)容中包含的重新定義的變量(field)和/或方法(method),將這樣的變量和/或方法添加到上述特定類的類體中。在一個(gè)實(shí)施例中,有些程序語言允許添加全新的變量或方法,例如在之前的例子中,租戶A對(duì)Class Example進(jìn)行修改時(shí)請(qǐng)求添加全新的method3。在這樣的情況下,可以將修改內(nèi)容中新添加的全新的變量或方法添加到指定的特定類中。接著,在步驟344中,對(duì)于上述添加的變量/方法,添加與特定租戶對(duì)應(yīng)的執(zhí)行條件,使其僅應(yīng)用于特定租戶。在一個(gè)例子中,在所添加的變量/方法前添加條件語句或判斷語句,從而使得僅對(duì)上述特定租戶執(zhí)行所添加的變量/方法。在多數(shù)程序語言中,不允許對(duì)特定類中原有的元素(變量/方法)進(jìn)行刪除。如果租戶指定的修改內(nèi)容中指明不需要某個(gè)變量/方法,可以通過添加執(zhí)行條件的方式跳過該變量/方法的執(zhí)行。由此,通過對(duì)特定類進(jìn)行修改并添加與特定租戶對(duì)應(yīng)的執(zhí)行條件,修改后的特定類成為一個(gè)“代理”類。在特定租戶訪問該特定類時(shí),首先訪問該“代理”類,并經(jīng)由該代理類中的執(zhí)行條件引導(dǎo)到與該特定租戶對(duì)應(yīng)的版本,或者稱為“后端”類。于是,特定租戶可以獲得自己定制的類的版本,而不影響其他租戶。
[0047]對(duì)于多個(gè)租戶分別提出定制請(qǐng)求的情況,可以針對(duì)每一租戶的每一請(qǐng)求執(zhí)行圖3的方法步驟,從而使得各個(gè)租戶分別獲得自己定制的類的版本。下面結(jié)合一段示例性代碼的例子描述修改特定類的過程。
[0048]圖6示出一段示例性代碼,其中上圖示出類Class Foo的原始版本。在原始版本中,Class Foo中定義了成員方法method A,method B,以及其他的變量和方法。假定租戶I在其對(duì)應(yīng)數(shù)據(jù)包中指示出希望對(duì)methodA和methodB分別進(jìn)行修改,修改后的內(nèi)容稱為vl版本。為此,修改Class Foo中對(duì)method A和method B的定義,分別在其中添加租戶I重新定義的 vl 版本的方法,即 Foo$Vl.memebrMethodA ()和(“tenantl”).memebrMethodB (),并在添加的新版本前加上if引導(dǎo)的執(zhí)行條件。也就是說,經(jīng)過判斷,如果當(dāng)前租戶為租戶I的話,執(zhí)行修改的vl版本的方法A和方法B ;否則仍然執(zhí)行原始版本。類似地,租戶2希望將methodA和methodB修改為v2版本。此時(shí),在methodA和methodB的定義中分別添加租戶2重新定義的v2版本的方法,即Foo$V2.memebrMethodA O和(“tenant2”).memebrMethodB O,并同樣在添加的新版本前加上if引導(dǎo)的執(zhí)行條件,使得僅在當(dāng)前租戶為租戶2的情況下,執(zhí)行修改的v2版本的方法A和方法B。注意,在圖6的例子中,methodA是由static修飾的靜態(tài)成員方法,method B是實(shí)例成員方法。如本領(lǐng)域技術(shù)人員所知,靜態(tài)成員屬于整個(gè)類,因此可以通過訪問類來訪問靜態(tài)成員。但對(duì)于實(shí)例成員來說,則必須通過對(duì)象(object)進(jìn)行訪問。因此,圖6的代碼對(duì)于method A和methodB的訪問處理有所不同。對(duì)于靜態(tài)成員方法methodA,直接獲取新定義的版本Foo$Vl.memebrMethodAO。對(duì)于實(shí)例成員方法method B,首先以租戶ID作為關(guān)鍵詞將實(shí)例存儲(chǔ)為映射(map.put (“tenantl”,F(xiàn)oo$Vl)),然后利用租戶ID在映射圖中查詢,從而獲取到實(shí)例(map.get ( “ tenant I ”).memebrMethodB O )。通過如上所述對(duì)原始Class Foo進(jìn)行的修改,修改后的Class Foo作用為一個(gè)“代理”類。當(dāng)租戶訪問Class Foo時(shí),首先訪問該“代理”類,并經(jīng)由其中的執(zhí)行條件引導(dǎo)到對(duì)應(yīng)的版本。具體地,通過作為“代理”的修改后的Class Foo,租戶I經(jīng)由實(shí)線箭頭被引導(dǎo)到vl版本的類,租戶2經(jīng)由虛線箭頭被引導(dǎo)到v2版本的類,而其他租戶仍然執(zhí)行Class Foo的原始版本。由此,在多個(gè)租戶共享該類的同時(shí),為特定租戶提供了定制版本。
[0049]可以看到,圖6中出于示例和簡明的目的沒有示出Class Foo中各個(gè)成員方法的具體內(nèi)容。本領(lǐng)域技術(shù)人員可以理解,上述的methodA可以是任意內(nèi)容的靜態(tài)成員方法,methodB可以是任意內(nèi)容的實(shí)例成員方法。此外,盡管圖6以java為例示出了對(duì)類進(jìn)行修改的方式,但是該修改方式也可以通過其他語言以其他形式實(shí)現(xiàn)。
[0050]在步驟34中根據(jù)如上所述的執(zhí)行方式對(duì)類進(jìn)行修改的基礎(chǔ)上,本發(fā)明的一個(gè)實(shí)施例的方法還包括運(yùn)行已修改的特定類。由于經(jīng)過修改的特定類可以指向與租戶對(duì)應(yīng)的版本,因此各個(gè)租戶將會(huì)獲得自己定制的版本的類,進(jìn)而獲得與該類對(duì)應(yīng)的功能件。于是,在多個(gè)租戶共享同一中間件的同時(shí),各個(gè)租戶還獲得了自己定制的功能件,實(shí)現(xiàn)了對(duì)中間件的定制和修改。
[0051]在一個(gè)實(shí)施例中,本發(fā)明實(shí)施例的方法還包括,存儲(chǔ)已修改的特定類。具體地,可以直接記錄和存儲(chǔ)共享的特定類的已修改版本;或者,也可以分別記錄該特定類的原始版本和與各個(gè)租戶對(duì)應(yīng)的特定版本。在一個(gè)實(shí)施例中,將已修改的特定類存儲(chǔ)在非易失性介質(zhì)的指定位置。從而,當(dāng)中間件的運(yùn)行由于某種原因而需要重啟時(shí),可以直接從指定位置讀取已修改的特定類,而不必重新準(zhǔn)備數(shù)據(jù)包以及重新修改特定類。
[0052]如上所述,根據(jù)本發(fā)明的實(shí)施例的方法,可以在運(yùn)行時(shí)中針對(duì)特定租戶的定制請(qǐng)求修改共享的中間件中的共享類,使得所進(jìn)行的修改僅應(yīng)用于該特定租戶。由此,在多個(gè)租戶共享同一中間件的同時(shí),為各個(gè)租戶提供中間件的不同版本,而不影響其他租戶的使用,從而滿足了既共享又定制的需求。
[0053]基于同一發(fā)明構(gòu)思,本發(fā)明的實(shí)施例還提供了一種修改由多個(gè)租戶共享的中間件的裝置。圖7示出根據(jù)本發(fā)明實(shí)施例的裝置的框圖,該裝置總體上標(biāo)注為70。如圖7所示,該修改中間件的裝置70包括:準(zhǔn)備單元72,配置為準(zhǔn)備數(shù)據(jù)包,所述數(shù)據(jù)包包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及修改單元74,配置為響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。
[0054]根據(jù)一個(gè)實(shí)施例,上述特定類的信息包括該特定類的標(biāo)識(shí)信息,以及與所述特定類相關(guān)的元數(shù)據(jù)。
[0055]在一個(gè)實(shí)施例中,所述準(zhǔn)備單元72配置為:獲取所述特定租戶的定制請(qǐng)求;根據(jù)定制請(qǐng)求,準(zhǔn)備修改信息和租戶信息;以及根據(jù)預(yù)定格式將所述修改信息和租戶信息封裝為數(shù)據(jù)包。
[0056]根據(jù)一個(gè)實(shí)施例,上述定制請(qǐng)求指示對(duì)所述中間件的特定功能件的修改,相應(yīng)地,上述準(zhǔn)備單元72配置為,獲取與所述功能件相對(duì)應(yīng)的類作為上述特定類,并將對(duì)功能件的修改轉(zhuǎn)化為對(duì)所述特定類的修改。
[0057]在一個(gè)實(shí)施例中,所述準(zhǔn)備單元72配置為,將所述數(shù)據(jù)包通知給運(yùn)行上述中間件的運(yùn)行時(shí)環(huán)境。
[0058]根據(jù)一個(gè)實(shí)施例,上述修改單元74通過運(yùn)行時(shí)中的類轉(zhuǎn)換器對(duì)所述特定類進(jìn)行修改。
[0059]根據(jù)一個(gè)實(shí)施例,上述修改單元74包括(未示出):提取模塊,配置為從數(shù)據(jù)包中提取修改信息和租戶信息;定位模塊,配置為定位出要修改的特定類;修改模塊,配置為根據(jù)修改內(nèi)容,對(duì)所述特定類進(jìn)行修改;以及條件添加模塊,配置為在所述特定類中為上述修改內(nèi)容添加與特定租戶相關(guān)的執(zhí)行條件。
[0060]在一個(gè)實(shí)施例中,修改內(nèi)容包含所述特定類的更新版本內(nèi)容;相應(yīng)地,上述修改模塊配置為,將所述特定類的原始版本內(nèi)容與更新版本內(nèi)容進(jìn)行比對(duì),從而確定出差異內(nèi)容,根據(jù)差異內(nèi)容對(duì)所述特定類進(jìn)行修改。
[0061]根據(jù)一個(gè)實(shí)施例,上述修改模塊配置為,將差異內(nèi)容中包含的以下中的至少一項(xiàng)添加到所述特定類中:重新定義的變量、重新定義的方法、新添加的變量、以及新添加的方法。[0062]根據(jù)一個(gè)實(shí)施例,上述裝置70還包括存儲(chǔ)單元(未示出),配置為存儲(chǔ)已修改的特定類
[0063]以上對(duì)中間件進(jìn)行修改的裝置70的具體執(zhí)行方式可以參照之前結(jié)合具體例子對(duì)圖3的方法的描述,在此不再贅述。
[0064]利用本發(fā)明實(shí)施例的方法和裝置,可以在多個(gè)租戶共享同一中間件的同時(shí),為各個(gè)租戶提供中間件的不同版本,而不影響其他租戶的使用,從而滿足了既共享又定制的需求。
[0065]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
[0066]以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說明的各實(shí)施例的范圍和精神的情況下,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說許多修改和變更都是顯而易見的。本文中所用術(shù)語的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌鲋械募夹g(shù)的技術(shù)改進(jìn),或者使本【技術(shù)領(lǐng)域】的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。
【權(quán)利要求】
1.一種修改由多個(gè)租戶共享的中間件的方法,包括: 準(zhǔn)備數(shù)據(jù)包,所述數(shù)據(jù)包包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及 響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的所述中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。
2.根據(jù)權(quán)利要求1的方法,其中所述特定類的信息包括所述特定類的標(biāo)識(shí)信息,以及與所述特定類相關(guān)的元數(shù)據(jù)。
3.根據(jù)權(quán)利要求1的方法,其中所述準(zhǔn)備數(shù)據(jù)包包括: 獲取所述特定租戶的定制請(qǐng)求; 根據(jù)定制請(qǐng)求,準(zhǔn)備修改信息和租戶信息;以及 根據(jù)預(yù)定格式將所述修改信息和租戶信息封裝為數(shù)據(jù)包。
4.根據(jù)權(quán)利要求3的方法,其中所述定制請(qǐng)求指示對(duì)所述中間件的特定功能件的修改,所述準(zhǔn)備修改信息包括,獲取與所述功能件相對(duì)應(yīng)的類作為上述特定類,并將對(duì)功能件的修改轉(zhuǎn)化為對(duì)所述特定類的修改。
5.根據(jù)權(quán)利要求1的方法,其中所述準(zhǔn)備數(shù)據(jù)包還包括,將所述數(shù)據(jù)包通知給運(yùn)行所述中間件的運(yùn)行時(shí)環(huán)境。
6.根據(jù)權(quán)利要求1的方法,其中修改所述特定類包括通過運(yùn)行時(shí)中的類轉(zhuǎn)換器對(duì)所述特定類進(jìn)行修改。
7.根據(jù)權(quán)利要求1的方法,其中修改所述特定類包括: 從數(shù)據(jù)包中提取修改信息和租戶信息; 定位出要修改的特定類; 根據(jù)修改內(nèi)容,對(duì)所述特定類進(jìn)行修改;以及 在所述特定類中為上述修改內(nèi)容添加與特定租戶相關(guān)的執(zhí)行條件。
8.根據(jù)權(quán)利要求7的方法,其中修改內(nèi)容包含所述特定類的更新版本內(nèi)容,所述根據(jù)修改內(nèi)容對(duì)所述特定類進(jìn)行修改包括,將所述特定類的原始版本內(nèi)容與更新版本內(nèi)容進(jìn)行比對(duì),從而確定出差異內(nèi)容,根據(jù)差異內(nèi)容對(duì)所述特定類進(jìn)行修改。
9.根據(jù)權(quán)利要求8的方法,其中根據(jù)差異內(nèi)容對(duì)所述特定類進(jìn)行修改包括,將差異內(nèi)容中包含的以下中的至少一個(gè)添加到所述特定類中:重新定義的變量、重新定義的方法、新添加的變量、以及新添加的方法。
10.根據(jù)權(quán)利要求1的方法,還包括存儲(chǔ)已修改的特定類。
11.一種修改由多個(gè)租戶共享的中間件的裝置,包括: 準(zhǔn)備單元,配置為準(zhǔn)備數(shù)據(jù)包,所述數(shù)據(jù)包包括修改信息和租戶信息,所述修改信息包括所述中間件中要修改的特定類的信息以及對(duì)該特定類的修改內(nèi)容,所述租戶信息指示出所述修改內(nèi)容針對(duì)的特定租戶;以及 修改單元,配置為響應(yīng)于獲取到所述數(shù)據(jù)包,根據(jù)所述修改信息修改運(yùn)行的所述中間件中的所述特定類,并使得所述修改內(nèi)容僅應(yīng)用于所述特定租戶。
12.根據(jù)權(quán)利要求11的裝置,其中所述特定類的信息包括所述特定類的標(biāo)識(shí)信息,以及與所述特定類相關(guān)的元數(shù)據(jù)。
13.根據(jù)權(quán)利要求11的裝置,其中所述準(zhǔn)備單元配置為: 獲取所述特定租戶的定制請(qǐng)求; 根據(jù)定制請(qǐng)求,準(zhǔn)備修改信息和租戶信息;以及 根據(jù)預(yù)定格式將所述修改信息和租戶信息封裝為數(shù)據(jù)包。
14.根據(jù)權(quán)利要求13的裝置,其中所述定制請(qǐng)求指示對(duì)所述中間件的特定功能件的修改,所述準(zhǔn)備單元配置為,獲取與所述功能件相對(duì)應(yīng)的類作為上述特定類,并將對(duì)功能件的修改轉(zhuǎn)化為對(duì)所述特定類的修改。
15.根據(jù)權(quán)利要求11的裝置,其中所述準(zhǔn)備單元配置為,將所述數(shù)據(jù)包通知給運(yùn)行所述中間件的運(yùn)行時(shí)環(huán)境。
16.根據(jù)權(quán)利要求11的裝置,其中所述修改單元通過運(yùn)行時(shí)中的類轉(zhuǎn)換器對(duì)所述特定類進(jìn)行修改。
17.根據(jù)權(quán)利要求11的裝置,其中所述修改單元包括: 提取模塊,配置為從數(shù)據(jù)包中提取修改信息和租戶信息; 定位模塊,配置為定位出要修改的特定類; 修改模塊,配置為根據(jù)修改內(nèi)容,對(duì)所述特定類進(jìn)行修改;以及 條件添加模塊,配置為在所述特定類中為上述修改內(nèi)容添加與特定租戶相關(guān)的執(zhí)行條件。
18.根據(jù)權(quán)利要求17的裝置,其中修改內(nèi)容包含所述特定類的更新版本內(nèi)容,所述修改模塊配置為,將所述特定類的原始版本內(nèi)容與更新版本內(nèi)容進(jìn)行比對(duì),從而確定出差異內(nèi)容,根據(jù)差異內(nèi)容對(duì)所述特定類進(jìn)行修改。
19.根據(jù)權(quán)利要求18的裝置,其中所述修改模塊配置為,將差異內(nèi)容中包含的以下中的至少一項(xiàng)添加到所述特定類中:重新定義的變量、重新定義的方法、新添加的變量、以及新添加的方法。
20.根據(jù)權(quán)利要求11的裝置,還包括存儲(chǔ)單元,配置為存儲(chǔ)已修改的特定類。
【文檔編號(hào)】G06F9/44GK103853535SQ201210505784
【公開日】2014年6月11日 申請(qǐng)日期:2012年11月30日 優(yōu)先權(quán)日:2012年11月30日
【發(fā)明者】蔡俊杰, 李三紅, 呂晶, 陳磊, 高巍巍 申請(qǐng)人:國際商業(yè)機(jī)器公司