本發(fā)明屬于系統(tǒng)應(yīng)用程序的熱部署領(lǐng)域,尤其涉及基于JCL框架的應(yīng)用熱部署方法和裝置。
背景技術(shù):
傳統(tǒng)的基于SSH(Struts+Spring+Hibernate)框架的Web應(yīng)用程序,在上線(xiàn)新功能時(shí)(例如新版Web應(yīng)用上線(xiàn)時(shí)),必須重新部署應(yīng)用,給系統(tǒng)造成了一段時(shí)間的不可用狀態(tài)。然而,重新部署應(yīng)用所導(dǎo)致的不可用狀態(tài)對(duì)一些需要時(shí)刻連線(xiàn)或者持續(xù)運(yùn)行的業(yè)務(wù)系統(tǒng)(例如金融、電力、水利等行業(yè)的部分業(yè)務(wù)系統(tǒng))會(huì)造成有很大的影響。因此,當(dāng)前需求能夠在類(lèi)似業(yè)務(wù)系統(tǒng)中實(shí)現(xiàn)Web程序或應(yīng)用的熱部署,即,在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件卻不需要重新啟動(dòng)該應(yīng)用。
同時(shí),JCL(Jakarata Commons Logging或Apache Commons Logging)框架是一種完全開(kāi)源的日志框架, JCL可以提供一個(gè)類(lèi)庫(kù)用于從JARs(即多個(gè)jar文件)中加載類(lèi)(即后綴名為.Class的文件),它特別適用于在一個(gè)應(yīng)用程序中有區(qū)別地加載多個(gè)版本中相同的類(lèi)(.Class),因此,其也是一款優(yōu)秀的開(kāi)源的java類(lèi)加載器(class loader),并能夠有效地管理加載的類(lèi)(.Class),例如,對(duì)這些類(lèi)實(shí)施隔離、讀取、卸載等。
技術(shù)實(shí)現(xiàn)要素:
為解決以上技術(shù)問(wèn)題的或其他技術(shù)問(wèn)題,本發(fā)明提供以下技術(shù)方案。
按照本發(fā)明的一方面,提供一種基于JCL框架的應(yīng)用熱部署方法,其特征在于:
以jar文件形式模塊化地向容器的應(yīng)用目錄發(fā)布新增加的第一應(yīng)用模塊,并且為所述第一應(yīng)用模塊在相應(yīng)的容器中更新定義配置文件,其中所述第一應(yīng)用模塊包括其接口對(duì)應(yīng)的類(lèi),所述第一應(yīng)用模塊的接口至少包含有初始化方法和執(zhí)行方法;
在其他應(yīng)用在應(yīng)用運(yùn)行系統(tǒng)運(yùn)行時(shí),通過(guò)監(jiān)測(cè)所述應(yīng)用目錄和配置文件的變化來(lái)發(fā)現(xiàn)所述第一應(yīng)用模塊并發(fā)出相應(yīng)的第一調(diào)用指令;以及
基于所述第一調(diào)用指令,通過(guò)類(lèi)加載器從所述應(yīng)用目錄加載運(yùn)行所述第一應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法,從而使所述應(yīng)用運(yùn)行系統(tǒng)能夠執(zhí)行所述第一應(yīng)用模塊對(duì)應(yīng)的新功能。
根據(jù)本發(fā)明一實(shí)施例的熱部署方法,其中,所述第一應(yīng)用模塊的接口還包括有銷(xiāo)毀方法;所述方法還包括步驟:
在應(yīng)用運(yùn)行系統(tǒng)完全不需要所述第一應(yīng)用模塊對(duì)應(yīng)的新功能時(shí),通過(guò)類(lèi)加載器加載運(yùn)行所述第一應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的銷(xiāo)毀方法,從而卸載所述第一應(yīng)用模塊,并在所述應(yīng)用目錄和配置文件中分別刪除該第一應(yīng)用模塊所對(duì)應(yīng)的內(nèi)容。
根據(jù)本發(fā)明一實(shí)施例的熱部署方法,其中,所述方法還包括步驟:在所述第一應(yīng)用模塊被加載后,所述第一應(yīng)用模塊在所述應(yīng)用目錄中被記載為屬于已有的應(yīng)用模塊。
根據(jù)本發(fā)明一實(shí)施例的熱部署方法,其中,在所述應(yīng)用運(yùn)行系統(tǒng)啟動(dòng)時(shí),檢測(cè)所述應(yīng)用目錄中所有已有的應(yīng)用模塊并發(fā)出相應(yīng)的第二調(diào)用指令;
基于所述第二調(diào)用指令,通過(guò)類(lèi)加載器從所述應(yīng)用目錄加載運(yùn)行所有已有的應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法。
按照本發(fā)明的又一方面,一種基于JCL框架的應(yīng)用熱部署裝置,其特征在于,包括:
容器,其被配置為:以jar文件形式模塊化地向其應(yīng)用目錄發(fā)布新增加的第一應(yīng)用模塊,并且為所述第一應(yīng)用模塊更新定義配置文件,其中所述第一應(yīng)用模塊包括其接口對(duì)應(yīng)的類(lèi),所述第一應(yīng)用模塊的接口至少包含有初始化方法和執(zhí)行方法;
監(jiān)測(cè)模塊,其被配置為:在其他應(yīng)用在應(yīng)用運(yùn)行系統(tǒng)運(yùn)行時(shí),通過(guò)監(jiān)測(cè)所述應(yīng)用目錄和配置文件的變化來(lái)發(fā)現(xiàn)所述第一應(yīng)用模塊并發(fā)出相應(yīng)的第一調(diào)用指令;以及
加載運(yùn)行模塊,其被配置為:基于所述第一調(diào)用指令,通過(guò)類(lèi)加載器從所述應(yīng)用目錄加載運(yùn)行所述第一應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法,從而使所述應(yīng)用運(yùn)行系統(tǒng)能夠執(zhí)行所述第一應(yīng)用模塊對(duì)應(yīng)的新功能。
根據(jù)本發(fā)明一實(shí)施例的熱部署裝置,其中,所述第一應(yīng)用模塊的接口還包括有銷(xiāo)毀方法;所述應(yīng)用熱部署裝置還包括:
卸載模塊,其被配置為:在應(yīng)用運(yùn)行系統(tǒng)完全不需要所述第一應(yīng)用模塊對(duì)應(yīng)的新功能時(shí),通過(guò)類(lèi)加載器加載運(yùn)行所述第一應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的銷(xiāo)毀方法,從而卸載所述第一應(yīng)用模塊,并在所述應(yīng)用目錄和配置文件中分別刪除該第一應(yīng)用模塊所對(duì)應(yīng)的內(nèi)容。
根據(jù)本發(fā)明一實(shí)施例的熱部署裝置,其中,所述容器還被配置為:在所述第一應(yīng)用模塊被加載后,所述第一應(yīng)用模塊在所述應(yīng)用目錄中被記載為屬于已有的應(yīng)用模塊。
根據(jù)本發(fā)明一實(shí)施例的熱部署裝置,其中,還包括:
啟動(dòng)檢測(cè)模塊,其被配置為:在所述應(yīng)用運(yùn)行系統(tǒng)啟動(dòng)時(shí),檢測(cè)所述應(yīng)用目錄中所有已有的應(yīng)用模塊并發(fā)出相應(yīng)的第二調(diào)用指令;
所述加載運(yùn)行模塊還被配置為:基于所述第二調(diào)用指令,通過(guò)類(lèi)加載器從所述應(yīng)用目錄加載運(yùn)行所有已有的應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法
根據(jù)以下描述和附圖本發(fā)明的以上特征和操作將變得更加顯而易見(jiàn)。
附圖說(shuō)明
從結(jié)合附圖的以下詳細(xì)說(shuō)明中,將會(huì)使本發(fā)明的上述和其他目的及優(yōu)點(diǎn)更加完整清楚,其中,相同或相似的要素采用相同的標(biāo)號(hào)表示。
圖1是按照本發(fā)明一實(shí)施例的應(yīng)用熱部署裝置的模塊結(jié)構(gòu)示意圖。
圖2是按照本發(fā)明一實(shí)施例的應(yīng)用熱部署方法的流程示意圖。
圖3是按照本發(fā)明一實(shí)施例的應(yīng)用熱部署方法的應(yīng)用卸載過(guò)程示意圖。
圖4是圖1所示實(shí)施例的應(yīng)用熱部署裝置所屬的應(yīng)用運(yùn)行系統(tǒng)的啟動(dòng)過(guò)程示意圖。
具體實(shí)施方式
現(xiàn)在將參照附圖更加完全地描述本發(fā)明,附圖中示出了本發(fā)明的示例性實(shí)施例。但是,本發(fā)明可按照很多不同的形式實(shí)現(xiàn),并且不應(yīng)該被理解為限制于這里闡述的實(shí)施例。相反,提供這些實(shí)施例使得本公開(kāi)變得徹底和完整,并將本發(fā)明的構(gòu)思完全傳遞給本領(lǐng)域技術(shù)人員。附圖中,相同的標(biāo)號(hào)指代相同的元件或部件,因此,將省略對(duì)它們的描述。
附圖中所示的一些方框圖是功能實(shí)體,不一定必須與物理或邏輯上獨(dú)立的實(shí)體相對(duì)應(yīng)??梢圆捎密浖问絹?lái)實(shí)現(xiàn)這些功能實(shí)體,或者在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或者在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
在本文中,“類(lèi)”是指后綴名為“.class”的文件。
圖1所示為按照本發(fā)明一實(shí)施例的應(yīng)用熱部署裝置的模塊結(jié)構(gòu)示意圖。本發(fā)明實(shí)施例的應(yīng)用熱部署裝置是應(yīng)用級(jí)別的類(lèi)管理裝置,其能夠管理每一個(gè)新增應(yīng)用模塊(例如一個(gè)新的app)的對(duì)接、部署和/或刪除,尤其是用于對(duì)應(yīng)用運(yùn)行系統(tǒng)400新增部署應(yīng)用(例如應(yīng)用模塊C)。 在該實(shí)施例中,應(yīng)用模塊A和應(yīng)用模塊B示意為已經(jīng)在系統(tǒng)中持續(xù)運(yùn)行的應(yīng)用,例如,核心應(yīng)用,其可以實(shí)現(xiàn)各種核心服務(wù)功能。本發(fā)明的應(yīng)用的主要功能不是限制性的,例如,其根據(jù)本發(fā)明的應(yīng)用熱部署裝置所對(duì)應(yīng)的應(yīng)用運(yùn)行系統(tǒng)400的不同而不同。應(yīng)用運(yùn)行系統(tǒng)400可以是需要時(shí)刻連線(xiàn)或者持續(xù)運(yùn)行的業(yè)務(wù)系統(tǒng)(例如金融、電力、水利等行業(yè)的部分業(yè)務(wù)系統(tǒng)),因此,需要其核心應(yīng)用的持續(xù)運(yùn)行來(lái)為其持續(xù)運(yùn)行提供支持,即使在新部署應(yīng)用模塊C時(shí),應(yīng)用運(yùn)行系統(tǒng)400要求不存在不可用狀態(tài)。
如圖1所示,應(yīng)用熱部署裝置主要地包括容器100、啟動(dòng)檢測(cè)模塊200、監(jiān)測(cè)模塊300和加載運(yùn)行模塊410,還可以包括卸載模塊420。
具體地,應(yīng)用運(yùn)行系統(tǒng)400的核心服務(wù)或者核心應(yīng)用(例如應(yīng)用模塊B和應(yīng)用模塊C)都是部署在tomcat或者jboss這樣的容器100中,容器100中具有應(yīng)用目錄110(即應(yīng)用目錄文件)和應(yīng)用配置文件120,其是基于JCL框架的,在需要上線(xiàn)新的功能或?qū)ο到y(tǒng)應(yīng)用進(jìn)行更新時(shí),該功能對(duì)應(yīng)的應(yīng)用模塊C以jar文件形式模塊化地向其應(yīng)用目錄110發(fā)布新增加的應(yīng)用模塊C,并且為應(yīng)用模塊C更新定義配置文件120,其中,應(yīng)用模塊C包括其接口對(duì)應(yīng)的類(lèi),應(yīng)用模塊C的接口至少包含有初始化方法和執(zhí)行方法。其中,“新增加”的應(yīng)用模塊是相對(duì)容器100已有的應(yīng)用模塊來(lái)定義的,其可以需要上線(xiàn)新的功能對(duì)應(yīng)的應(yīng)用模塊或?qū)ο到y(tǒng)應(yīng)用進(jìn)行更新時(shí)對(duì)應(yīng)的應(yīng)用模塊。
基于JCL框架的容器100本身還具有一個(gè)基于Java虛擬機(jī)(Java Virtual Machine,JVM)的操作系統(tǒng)級(jí)的類(lèi)加載器130,其能夠?qū)⑷萜?00中的應(yīng)用里的類(lèi)(Class)都加載到內(nèi)存里。
繼續(xù)如圖1所示,監(jiān)測(cè)模塊300被配置為:在其他應(yīng)用(例如應(yīng)用模塊A或應(yīng)用模塊B在應(yīng)用運(yùn)行系統(tǒng)運(yùn)行時(shí),通過(guò)監(jiān)測(cè)應(yīng)用目錄110和配置文件120的變化來(lái)發(fā)現(xiàn)應(yīng)用模塊C并發(fā)出相應(yīng)的調(diào)用指令;因此,監(jiān)測(cè)模塊300主要是用來(lái)監(jiān)測(cè)新增加的應(yīng)用模塊。
繼續(xù)如圖1所示,加載運(yùn)行模塊410被配置為:基于所述調(diào)用指令,通過(guò)類(lèi)加載器130從應(yīng)用目錄110加載運(yùn)行應(yīng)用模塊C的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法(即運(yùn)行執(zhí)行方法對(duì)應(yīng)的class文件),從而使應(yīng)用運(yùn)行系統(tǒng)400能夠執(zhí)行應(yīng)用模塊C對(duì)應(yīng)的新功能。將理解,在存在相應(yīng)的調(diào)用指令時(shí),加載運(yùn)行模塊410可以對(duì)應(yīng)用目錄100中的其他應(yīng)用模塊進(jìn)行類(lèi)似的加載運(yùn)行處理。
在一實(shí)施例中,新增加的應(yīng)用模塊C的接口還包括有銷(xiāo)毀方法; 卸載模塊410被配置為:在應(yīng)用運(yùn)行系統(tǒng)完全不需要應(yīng)用模塊C對(duì)應(yīng)的新功能時(shí),通過(guò)類(lèi)加載器130加載運(yùn)行應(yīng)用模塊C的接口對(duì)應(yīng)的類(lèi)的銷(xiāo)毀方法(即運(yùn)行銷(xiāo)毀方法對(duì)于的class文件),從而卸載應(yīng)用模塊C,并在應(yīng)用目錄110和配置文件120中分別刪除該第一應(yīng)用模塊所對(duì)應(yīng)的內(nèi)容。需要說(shuō)明的是,卸載模塊410可以對(duì)應(yīng)用目錄100中的其他應(yīng)用模塊進(jìn)行類(lèi)似的卸載處理。
以上實(shí)施例的應(yīng)用熱部署裝置, 得益于JCL開(kāi)源框架的自身優(yōu)勢(shì),在加載jar文件時(shí),可以做到每個(gè)jar所加載的class及l(fā)ib相互獨(dú)立,并不需要額外開(kāi)發(fā)隔離功能來(lái)保證每個(gè)jar中的類(lèi)互不沖突.
在一實(shí)施例中,容器100還被配置為:在應(yīng)用模塊C被加載后,應(yīng)用模塊C在所述應(yīng)用目錄110中被記載為屬于已有的應(yīng)用模塊。在系統(tǒng)啟動(dòng)時(shí),應(yīng)用運(yùn)行系統(tǒng)400將對(duì)應(yīng)地運(yùn)行所所有已有的應(yīng)用模塊。如圖1所示,應(yīng)用熱部署裝置中還設(shè)置有啟動(dòng)檢測(cè)模塊200,其被配置為:在所述應(yīng)用運(yùn)行系統(tǒng)啟動(dòng)時(shí),檢測(cè)應(yīng)用目錄110中所有已有的應(yīng)用模塊(例如檢測(cè)到應(yīng)用模塊A和應(yīng)用模塊B)并發(fā)出相應(yīng)的調(diào)用指令;加載運(yùn)行模塊410還被配置為:基于所述調(diào)用指令,通過(guò)類(lèi)加載器130從應(yīng)用目錄110加載運(yùn)行所有已有的應(yīng)用模塊(例如檢測(cè)到應(yīng)用模塊A和應(yīng)用模塊B)的接口對(duì)應(yīng)的類(lèi)的執(zhí)行方法;從而,系統(tǒng)在啟動(dòng)運(yùn)行時(shí),即具有相應(yīng)的服務(wù)功能。
圖2所示為按照本發(fā)明一實(shí)施例的應(yīng)用熱部署方法的流程示意圖,圖3所示為按照本發(fā)明一實(shí)施例的應(yīng)用熱部署方法的應(yīng)用卸載過(guò)程示意圖,圖4所示為圖1所示實(shí)施例的應(yīng)用熱部署裝置所屬的應(yīng)用運(yùn)行系統(tǒng)的啟動(dòng)過(guò)程示意圖。以下結(jié)合圖1至圖4詳細(xì)示例說(shuō)明本發(fā)明實(shí)施例的應(yīng)用熱部署方法。
首先,步驟S11,發(fā)布新增加的應(yīng)用模塊。以jar文件形式模塊化地向容器100的應(yīng)用目錄110發(fā)布新增加的例如應(yīng)用模塊C,并且為應(yīng)用模塊C在容器100中更新定義配置文件120。
在該實(shí)施例中,為了實(shí)現(xiàn)JCL框架的完整功能,要實(shí)現(xiàn)如下細(xì)節(jié)功能和目標(biāo):
(1)在打包成jar文件之前,定義一個(gè)接口,每一個(gè)新增模塊中都必須包含唯一的一個(gè)實(shí)現(xiàn)了該接口的類(lèi),該接口包含有初始化、執(zhí)行、銷(xiāo)毀三個(gè)方法;一個(gè)新增加的應(yīng)用模塊C實(shí)現(xiàn)上述接口并完成開(kāi)發(fā)后,打包成一個(gè)jar文件,然后發(fā)布到應(yīng)用所指定的目錄,即相應(yīng)的應(yīng)用目錄110,并且文件名、配置項(xiàng)必須遵循一定的格式標(biāo)準(zhǔn)。
(2)定義相應(yīng)的配置文件120,將例如核心應(yīng)用新增加的應(yīng)用模塊C的必要信息配置在這里,這樣,核心應(yīng)用可以根據(jù)需要監(jiān)控或者在啟動(dòng)時(shí)根據(jù)此文件的內(nèi)容加載所有的新增加的應(yīng)用模塊,配置文件的每一項(xiàng)必須標(biāo)明新增加的應(yīng)用模塊的名稱(chēng)、存儲(chǔ)的路徑等。
步驟S21,監(jiān)測(cè)模塊300監(jiān)測(cè)應(yīng)用目錄110和配置文件120的變化。遮掩該,監(jiān)測(cè)模塊300可以監(jiān)聽(tīng)?wèi)?yīng)用發(fā)布目錄中每個(gè)應(yīng)用的變動(dòng)。這樣,當(dāng)某個(gè)應(yīng)用部署(或重新部署)之后,進(jìn)入步驟S22,發(fā)現(xiàn)新增加的應(yīng)用模塊,監(jiān)測(cè)模塊300可以得到通知,進(jìn)而準(zhǔn)備進(jìn)行熱部署處理,觸發(fā)調(diào)用指令,即步驟S31。
步驟S32,加載該新增加的應(yīng)用。具體地,應(yīng)用運(yùn)行系統(tǒng)400通過(guò)加載運(yùn)行模塊410, 基于監(jiān)測(cè)模塊300觸發(fā)的調(diào)用指令,通過(guò)類(lèi)加載器130從應(yīng)用目錄110加載運(yùn)行應(yīng)用模塊C的接口對(duì)應(yīng)的類(lèi)(class)的執(zhí)行方法。
步驟S41執(zhí)行新增加應(yīng)用對(duì)應(yīng)的功能,例如,使應(yīng)用運(yùn)行系統(tǒng)400能夠執(zhí)行應(yīng)用模塊C對(duì)應(yīng)的新功能。
在一實(shí)施例中,在應(yīng)用運(yùn)行系統(tǒng)400接收到不需要執(zhí)行某一應(yīng)用對(duì)應(yīng)的功能時(shí),如圖3所示,即步驟S32,進(jìn)入步驟S33,通過(guò)類(lèi)加載器130加載該應(yīng)用的接口對(duì)應(yīng)的銷(xiāo)毀方法;進(jìn)一步進(jìn)入步驟S34,卸載該應(yīng)用模塊,并在應(yīng)用目錄110和配置文件120中分別刪除該應(yīng)用模塊所對(duì)應(yīng)的內(nèi)容,則該功能將從系統(tǒng)中永久卸載。
在一實(shí)施例中,在系統(tǒng)啟動(dòng)的過(guò)程,通過(guò)圖4所示的方法加載有已添加的新增應(yīng)用模塊和已有的應(yīng)用塊。如圖4所示,啟動(dòng)檢測(cè)模塊200檢測(cè)所有已有的應(yīng)用模塊,即步驟S23,該步驟是通過(guò)向容器100中的應(yīng)用目錄110和配置文件120進(jìn)行檢測(cè)的;進(jìn)一步,S24返回檢測(cè)的結(jié)果,可以返回應(yīng)用目錄110中所有已有的應(yīng)用模塊(例如,應(yīng)用模塊A、B和C);進(jìn)一步,啟動(dòng)檢測(cè)模塊200觸發(fā)調(diào)用指令,并發(fā)送至應(yīng)用運(yùn)行系統(tǒng)400的加載運(yùn)行模塊410;進(jìn)一步步驟S36, 具體地,應(yīng)用運(yùn)行系統(tǒng)400通過(guò)加載運(yùn)行模塊410, 基于啟動(dòng)檢測(cè)模塊200觸發(fā)的調(diào)用指令,通過(guò)類(lèi)加載器130從應(yīng)用目錄110加載運(yùn)行所有應(yīng)用模塊的接口對(duì)應(yīng)的類(lèi)(class)的執(zhí)行方法;從而,應(yīng)用運(yùn)行系統(tǒng)400執(zhí)行所有已有的應(yīng)用對(duì)應(yīng)的功能,即步驟S41。
以上實(shí)施例的應(yīng)用熱部署裝置和方法具有以下功能:
第一,得益于JCL開(kāi)源框架的自身優(yōu)勢(shì),在加載jar文件時(shí),可以做到每個(gè)jar所加載的class及l(fā)ib相互獨(dú)立,并不需要額外開(kāi)發(fā)隔離功能來(lái)保證每個(gè)jar文件中的類(lèi)互不沖突,即自動(dòng)為每一個(gè)應(yīng)用間建立了隔離,并且每個(gè)應(yīng)用模塊獨(dú)立地運(yùn)行,新增的應(yīng)用模塊并不可能依賴(lài)不同版本的jar文件包、也不會(huì)導(dǎo)致類(lèi)沖突。
第二,在系統(tǒng)內(nèi),開(kāi)發(fā)一個(gè)對(duì)應(yīng)的jar加載方法,能夠?qū)涌诘膉ar文件進(jìn)行加載,其中使用JCL 框架的類(lèi)加載器來(lái)加載jar文件中的class及依賴(lài)lib文件。
第三,系統(tǒng)內(nèi)實(shí)現(xiàn)了一個(gè)監(jiān)測(cè)模塊, 其對(duì)應(yīng)具有一個(gè)監(jiān)測(cè)方法;它將監(jiān)測(cè)在前面約定好的文件目錄及配置文件,當(dāng)新增的jar文件被拷貝到目標(biāo)目錄是,同時(shí)配置文件也被修改,新增加應(yīng)用模塊后,該監(jiān)測(cè)方法被觸發(fā),調(diào)用先前實(shí)現(xiàn)的jar加載方法將新增加的應(yīng)用模塊實(shí)時(shí)的熱部署到核心系統(tǒng)內(nèi)。這樣,就可以通過(guò)系統(tǒng)調(diào)用 jar文件里的執(zhí)行方法(在接口中所定義的)來(lái)運(yùn)行新增的功能。
第四,當(dāng)不在需要某一功能時(shí),可以調(diào)用該功能對(duì)應(yīng)的jar文件里的銷(xiāo)毀方法來(lái)卸載已加載的應(yīng)用,同時(shí)刪除配置文件里對(duì)應(yīng)的內(nèi)容,則該功能將永久從系統(tǒng)中卸載。
因此,基于JCL框架的應(yīng)用熱部署方法可以在不修改部署版本的情況下,動(dòng)態(tài)地新增系統(tǒng)功能,系統(tǒng)不存在不可用狀態(tài),實(shí)現(xiàn)了Web應(yīng)用的熱部署,整個(gè)框架完全開(kāi)源,適合應(yīng)用于時(shí)刻需要在線(xiàn)、不能輕易中斷的系統(tǒng)上使用。
以上例子主要說(shuō)明了本發(fā)明的基于JCL的熱部署方法和裝置。盡管只對(duì)其中一些本發(fā)明的實(shí)施方式進(jìn)行了描述,但是本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)了解,本發(fā)明可以在不偏離其主旨與范圍內(nèi)以許多其他的形式實(shí)施。因此,所展示的例子與實(shí)施方式被視為示意性的而非限制性的,在不脫離如所附各權(quán)利要求所定義的本發(fā)明精神及范圍的情況下,本發(fā)明可能涵蓋各種的修改與替換。