專利名稱:Java系統(tǒng)業(yè)務(wù)單元插件式管理系統(tǒng)及業(yè)務(wù)功能動(dòng)態(tài)變更方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),尤其是一種Java系統(tǒng)業(yè)務(wù)單元的插件式管理系統(tǒng);本發(fā)明還涉及一種對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法,尤其是一種Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法。
背景技術(shù):
開發(fā)與運(yùn)行一個(gè)Java程序,首先要將編寫完畢的Java源代碼使用JDK (Java Development Kit)提供的工具編譯成中間格式——字節(jié)碼(ByteCode),隨后,啟動(dòng) JVM(Java Virtual Machine,Java虛擬機(jī),用于解釋字節(jié)碼并進(jìn)行執(zhí)行的虛擬計(jì)算機(jī)),由 JVM調(diào)用其內(nèi)置的組件——類加載器(ClassLoader),對(duì)字節(jié)碼進(jìn)行裝載,并解釋執(zhí)行。字節(jié)碼有可能存在于文件系統(tǒng)中,也有可能存在于遠(yuǎn)端網(wǎng)絡(luò)中,所以,類加載器在裝載字節(jié)碼時(shí),需要運(yùn)用不同的加載策略。Java類可以理解為由Java語(yǔ)言級(jí)別提供的、與現(xiàn)實(shí)中的對(duì)象級(jí)別相對(duì)應(yīng)的功能單元,一般的,在Java的一個(gè)類中,包含了一個(gè)或多個(gè)接口或方法。類加載器是JVM的一個(gè)重要組件,用于裝載Java字節(jié)碼,以便進(jìn)行后續(xù)的執(zhí)行使用,類加載器包括4種類型,如圖 1的Java系統(tǒng)類加載器的總體框架圖所示,其中,自上而下排列的啟動(dòng)類加載器、擴(kuò)展類加載器、系統(tǒng)類加載器為JVM自帶的加載器,開發(fā)者是無法更改其內(nèi)部對(duì)字節(jié)碼的加載行為的,具體來說,啟動(dòng)類加載器用來加載Java的核心庫(kù),是用原生代碼來實(shí)現(xiàn)的,在JVM啟動(dòng)時(shí)自動(dòng)構(gòu)造,并由操作系統(tǒng)本地代碼實(shí)現(xiàn);擴(kuò)展類加載器用來加載Java的擴(kuò)展庫(kù),Java虛擬機(jī)的實(shí)現(xiàn)會(huì)提供一個(gè)擴(kuò)展庫(kù)目錄,該類加載器在此目錄里面查找并加載Java類;系統(tǒng)類加載器根據(jù)Java應(yīng)用的類路徑(ClassPath)來加載Java類,一般來說,Java應(yīng)用的類都是由它來完成加載。圖1中所示的自定義類加載器可以理解為JVM為開發(fā)者提供的一套字節(jié)碼加載的抽象機(jī)制,其提供了對(duì)字節(jié)碼進(jìn)行載入、連接的底層接口,開發(fā)者可以實(shí)現(xiàn)自定義Java字節(jié)碼的加載方式。傳統(tǒng)的Java字節(jié)碼加載方式是將Java字節(jié)碼保存為一個(gè)個(gè)的.class 文件,啟動(dòng)JVM后,JVM調(diào)用自帶的類加載器(一般情況下,為系統(tǒng)類加載器)對(duì).class文件中的字節(jié)碼進(jìn)行加載。但是,實(shí)際應(yīng)用中,字節(jié)碼可能是通過某種壓縮形式打包為一個(gè)壓縮包,并存在于遠(yuǎn)端服務(wù)器上的,這時(shí),如何讓JVM載入字節(jié)碼就需要開發(fā)者對(duì)自定義類加載器的行為進(jìn)行改變,以適應(yīng)實(shí)際中的需求。對(duì)于面向移動(dòng)互聯(lián)網(wǎng)的“網(wǎng)絡(luò)服務(wù)型”業(yè)務(wù),在技術(shù)上,一般通過構(gòu)建網(wǎng)絡(luò)應(yīng)用程序,并為手機(jī)終端提供數(shù)據(jù)的上行、下載功能來支撐其實(shí)現(xiàn)?!熬W(wǎng)絡(luò)服務(wù)型”業(yè)務(wù)本身是由多個(gè)不同種類的子業(yè)務(wù)組成的業(yè)務(wù)集合,單個(gè)子業(yè)務(wù)具有簡(jiǎn)單、輕量的特點(diǎn),基于子業(yè)務(wù)的上述特點(diǎn),為了方便系統(tǒng)管理,需要容許所有子業(yè)務(wù)均運(yùn)行在同一個(gè)系統(tǒng)上,并且要求當(dāng)某一個(gè)子業(yè)務(wù)需要變更業(yè)務(wù)邏輯時(shí),不會(huì)影響到其他子業(yè)務(wù)的正常運(yùn)行。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)中對(duì)于運(yùn)行在同一系統(tǒng)上的面向移動(dòng)互聯(lián)網(wǎng)的 “網(wǎng)絡(luò)服務(wù)型”業(yè)務(wù)無法在不影響其他子業(yè)務(wù)及系統(tǒng)正常運(yùn)行的前提下變更某一業(yè)務(wù)的業(yè)務(wù)功能或邏輯的缺點(diǎn),提出一種插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng)和應(yīng)用該系統(tǒng)在Java 系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法。為達(dá)到上述目的,本發(fā)明所采用的第一個(gè)技術(shù)方案是
一種插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),包括至少一個(gè)用于表征某一業(yè)務(wù)功能單元的插件,每個(gè)插件包括至少一個(gè)業(yè)務(wù)服務(wù)接口 ;用于描述插件功能與配置參數(shù)的插件構(gòu)建包;用于讀取插件構(gòu)建包內(nèi)的數(shù)據(jù)信息并將其解析后載入JVM的插件類加載器;一個(gè)用于管理插件、并對(duì)插件進(jìn)行新增、刪除、更新操作的插件容器。上述技術(shù)方案還可以進(jìn)一步完善
作為優(yōu)選,插件帶有一個(gè)唯一的插件標(biāo)識(shí)符,一個(gè)插件的每個(gè)業(yè)務(wù)服務(wù)接口均帶有一個(gè)唯一的接口標(biāo)識(shí)符。作為優(yōu)選,插件構(gòu)建包是一個(gè)Jar包,插件構(gòu)建包內(nèi)的數(shù)據(jù)信息至少包括實(shí)現(xiàn)插件業(yè)務(wù)功能的所有Java字節(jié)碼、插件業(yè)務(wù)功能實(shí)現(xiàn)過程中需要使用的資源文件及配置文件、第三方Jar包信息。作為優(yōu)選,插件構(gòu)建包至少包括包含字節(jié)碼的第一文件夾、包含資源文件和配置文件的第二文件夾、包含第三方Jar包的第三文件夾。作為優(yōu)選,插件容器用于注冊(cè)與反注冊(cè)插件、獲取每個(gè)插件的業(yè)務(wù)服務(wù)接口列表、 設(shè)置插件與業(yè)務(wù)服務(wù)接口的服務(wù)狀態(tài)、以及調(diào)用插件的業(yè)務(wù)服務(wù)接口。作為優(yōu)選,每個(gè)插件均具有激活和非激活兩種服務(wù)狀態(tài);插件的每個(gè)業(yè)務(wù)服務(wù)接口均具有激活和非激活兩種服務(wù)狀態(tài),當(dāng)業(yè)務(wù)服務(wù)接口和插件均處于激活的服務(wù)狀態(tài)時(shí), 提供相應(yīng)的業(yè)務(wù)服務(wù),否則,不提供業(yè)務(wù)服務(wù)。為達(dá)到上述發(fā)明目的,本發(fā)明所提供的第二個(gè)技術(shù)方案是
一種Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法,包括如下步驟
(5001)修改插件的插件構(gòu)建包中的字節(jié)碼,形成新的插件構(gòu)建包;
(5002)發(fā)送一個(gè)刪除插件接口的請(qǐng)求至插件容器;
(5003)插件容器完成插件刪除;
(5004)發(fā)送一個(gè)新增插件接口的請(qǐng)求至插件容器; (S005)建立插件容器與新增插件的關(guān)聯(lián)。上述技術(shù)方案還可以進(jìn)一步完善 作為優(yōu)選,新增插件操作包括如下步驟
(S005. 1)發(fā)送請(qǐng)求至插件容器,請(qǐng)求包括新加入插件的插件標(biāo)識(shí)符、插件構(gòu)建包路徑 fn息;
(S005. 2)調(diào)用插件容器的新增接口 ; (S005. 3)插件容器新建一個(gè)插件類加載器;
(S005. 4)插件類加載器解析插件構(gòu)建包,并載入插件構(gòu)建包中包含的信息;
5(S005. 5)插件類加載器根據(jù)插件構(gòu)建包提供的元數(shù)據(jù),建立插件的插件構(gòu)建器; (S005. 6)調(diào)用插件構(gòu)建器的初始化方法初始化插件; (S005. 7)將初始化完成的插件的插件標(biāo)識(shí)符注冊(cè)進(jìn)插件容器; (S005.8)返回結(jié)果至請(qǐng)求方。作為優(yōu)選,步驟(S005. 3)進(jìn)一步包括如下步驟
(S005. 3. 1)插件類加載器根據(jù)插件構(gòu)建包路徑信息獲取插件構(gòu)建包,并將其整體讀入內(nèi)存;
(S005. 3. 2)遍歷插件構(gòu)建包中的所有.class文件、及l(fā)ib目錄下的所有Jar包; (S005. 3. 3)調(diào)用第一種方法將頂層的.class文件或資源文件載入內(nèi)存,如果是lib 目錄下的Jar包文件,則調(diào)用第二種方法將Jar包文件中的.class文件和資源文件載入內(nèi)存;
(S005. 3. 4)在內(nèi)存中對(duì)每一個(gè).class文件賦予唯一名稱; (S005. 3. 5)得到一張Java類名稱到Java類字節(jié)碼的映射表; (S005. 3. 6)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋映射表,獲取對(duì)應(yīng)的Java字節(jié)碼,并調(diào)用底層字節(jié)碼載入接口載入字節(jié)碼;
(S005. 3. 7)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋映射表,獲取對(duì)應(yīng)的資源數(shù)據(jù)。由于上述技術(shù)方案的采用,本發(fā)明具有以下優(yōu)點(diǎn)
在某一業(yè)務(wù)邏輯發(fā)生變更時(shí),只需要將業(yè)務(wù)功能相應(yīng)的“插件”在代碼級(jí)別進(jìn)行修改, 再通過設(shè)定的機(jī)制觸發(fā),即可實(shí)現(xiàn)系統(tǒng)對(duì)該插件的自動(dòng)載入,獲得更新后的業(yè)務(wù)邏輯。在業(yè)務(wù)邏輯更新的過程中,系統(tǒng)不需要重新啟動(dòng),也不會(huì)影響其他業(yè)務(wù)功能的正常運(yùn)行,從而提高了業(yè)務(wù)的開發(fā)、部署、實(shí)施效率。
圖1為一種Java類加載器架構(gòu)圖2為本發(fā)明所涉及的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng)的一種架構(gòu)圖; 圖3為外部代碼調(diào)用插件服務(wù)接口的一種時(shí)序圖; 圖4為插件容器新增插件接口的一種時(shí)序圖; 圖5為動(dòng)態(tài)變更業(yè)務(wù)功能方法的一種時(shí)序圖。
具體實(shí)施例方式下面結(jié)合附圖,對(duì)本發(fā)明的具體實(shí)施方式
做進(jìn)一步說明
如圖2所示的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),包括插件、插件構(gòu)建包、插件類加載器和插件容器四個(gè)部分,具體的
插件用于表征某一業(yè)務(wù)功能單元,每個(gè)插件包括至少一個(gè)業(yè)務(wù)服務(wù)接口,在其內(nèi)部則根據(jù)不同的業(yè)務(wù)寫入具體的業(yè)務(wù)實(shí)現(xiàn)。插件帶有一個(gè)唯一的插件標(biāo)識(shí)符,一個(gè)插件的每個(gè)業(yè)務(wù)服務(wù)接口均帶有一個(gè)唯一的接口標(biāo)識(shí)符,因此,外部代碼調(diào)用某個(gè)插件的業(yè)務(wù)功能時(shí),只需提供該插件的標(biāo)識(shí)符及服務(wù)接口的標(biāo)識(shí)符,就能夠定位到具體的業(yè)務(wù)功能,并調(diào)用該功能。每個(gè)插件均具有激活和非激活兩種服務(wù)狀態(tài),插件的每個(gè)業(yè)務(wù)服務(wù)接口也均具有激活和非激活兩種服務(wù)狀態(tài),當(dāng)服務(wù)接口的服務(wù)狀態(tài)及其所關(guān)聯(lián)的插件的服務(wù)狀態(tài)均為激活時(shí),該服務(wù)接口才提供相應(yīng)的業(yè)務(wù)服務(wù),否則,不提供業(yè)務(wù)服務(wù)。插件構(gòu)建包是一個(gè)用于描述插件功能與配置參數(shù)的靜態(tài)數(shù)據(jù)包,具體的,它是一個(gè)Jar包,插件構(gòu)建包內(nèi)的數(shù)據(jù)信息至少包括實(shí)現(xiàn)插件業(yè)務(wù)功能的所有Java字節(jié)碼、Jar 包元數(shù)據(jù)、插件元數(shù)據(jù)、插件業(yè)務(wù)功能實(shí)現(xiàn)過程中需要使用的資源文件及配置文件、第三方Jar包信息,在本實(shí)施例中,字節(jié)碼存儲(chǔ)在com文件夾中、資源文件和配置文件存儲(chǔ)在 config文件夾中、第三方Jar包存儲(chǔ)在lib文件夾中、Jar包元數(shù)據(jù)存儲(chǔ)在META-INF文件夾中。需要說明的是,上述文件夾的名稱可以按照業(yè)務(wù)進(jìn)行靈活定義。用于讀取插件構(gòu)建包內(nèi)的數(shù)據(jù)信息并將其解析后載入JVM的插件類加載器; 一個(gè)用于管理插件、并對(duì)插件進(jìn)行新增、刪除、更新操作的插件容器,插件容器用于注
冊(cè)與反注冊(cè)插件、獲取當(dāng)前插件列表,獲取每個(gè)插件的業(yè)務(wù)服務(wù)接口列表、設(shè)置插件與業(yè)務(wù)服務(wù)接口的服務(wù)狀態(tài)(激活或非激活)、以及調(diào)用某一個(gè)插件的某一個(gè)業(yè)務(wù)服務(wù)接口。通過上述插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),實(shí)現(xiàn)了 Java系統(tǒng)運(yùn)行時(shí)業(yè)務(wù)功能的動(dòng)態(tài)變更,具體的,如圖5所示,動(dòng)態(tài)變更方法包括如下步驟
(5001)修改插件的插件構(gòu)建包中的字節(jié)碼,形成新的插件構(gòu)建包;
(5002)發(fā)送一個(gè)刪除插件接口的請(qǐng)求至插件容器;
(5003)插件容器完成插件刪除;
(5004)發(fā)送一個(gè)新增插件接口的請(qǐng)求至插件容器; (S005)建立插件容器與新增插件的關(guān)聯(lián)。如圖4所示,上述新增插件操作包括如下步驟
(S005. 1)發(fā)送請(qǐng)求至插件容器,請(qǐng)求包括新加入插件的插件標(biāo)識(shí)符、插件構(gòu)建包路徑 fn息;
(S005. 2)調(diào)用插件容器的新增接口 ; (S005. 3)插件容器新建一個(gè)插件類加載器;
(S005. 4)插件類加載器解析插件構(gòu)建包,并載入插件構(gòu)建包中包含的信息; (S005. 5)插件類加載器根據(jù)插件構(gòu)建包提供的元數(shù)據(jù),建立插件的插件構(gòu)建器; (S005. 6)調(diào)用插件構(gòu)建器的初始化方法初始化插件; (S005. 7)將初始化完成的插件的插件標(biāo)識(shí)符注冊(cè)進(jìn)插件容器; (S005.8)返回結(jié)果至請(qǐng)求方。步驟(S005. 3)進(jìn)一步包括如下步驟
(S005. 3. 1)插件類加載器根據(jù)插件構(gòu)建包路徑信息獲取插件構(gòu)建包,并將其整體讀入內(nèi)存;
(S005. 3. 2)遍歷插件構(gòu)建包中的所有.class文件、及l(fā)ib目錄下的所有Jar包; (S005. 3. 3)調(diào)用第一種方法將頂層的.class文件或資源文件載入內(nèi)存,如果是,調(diào)用第二種方法將lib目錄下的Jar包文件中的.class文件和資源文件載入內(nèi)存; (S005. 3. 4)在內(nèi)存中對(duì)每一個(gè).class文件賦予唯一名稱; (S005. 3. 5)得到一張Java類名稱到Java類字節(jié)碼的映射表;(S005. 3. 6)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋映射表,獲取對(duì)應(yīng)的Java字節(jié)碼,并調(diào)用底層字節(jié)碼載入接口載入字節(jié)碼;
(S005. 3. 7)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋映射表,獲取對(duì)應(yīng)的資源數(shù)據(jù)。從插件功能的角度看,插件主要提供了兩類范疇的業(yè)務(wù)服務(wù),一類是客戶端的通用登錄服務(wù)。具體的,首先由客戶端發(fā)出通用登錄請(qǐng)求,該請(qǐng)求附帶有具體的業(yè)務(wù)數(shù)據(jù)請(qǐng)求,通訊子系統(tǒng)在接收到請(qǐng)求后,將請(qǐng)求路由至登錄服務(wù)插件進(jìn)行處理,登錄服務(wù)插件將生成唯一的登錄請(qǐng)求碼(LRC),并根據(jù)上行的業(yè)務(wù)請(qǐng)求碼(BRC)將請(qǐng)求轉(zhuǎn)發(fā)至具體的業(yè)務(wù)插件進(jìn)行處理,業(yè)務(wù)插件處理完成后,將LRC連同其他返回?cái)?shù)據(jù)以一種特定的二進(jìn)制編碼(如 TLV編碼)的格式一并返回給客戶端。當(dāng)客戶端內(nèi)存中已存在BRC時(shí),請(qǐng)求將會(huì)直接路由至具體的業(yè)務(wù)插件。在登錄插件中還包括服務(wù)地址轉(zhuǎn)跳的功能,具體的,運(yùn)維人員根據(jù)需要變更業(yè)務(wù)的服務(wù)地址,登錄插件在接收到客戶端的請(qǐng)求后,會(huì)判斷客戶端請(qǐng)求的具體業(yè)務(wù)的服務(wù)地址是否發(fā)生了變更,如果發(fā)生變更,則將最新的服務(wù)地址下發(fā)給客戶端,并提示客戶端訪問新的服務(wù)地址。如圖3所示,外部代碼向系統(tǒng)請(qǐng)求服務(wù),以及系統(tǒng)調(diào)用插件處理請(qǐng)求的過程包括如下步驟
(5001)請(qǐng)求服務(wù)的外部代碼向插件容器提供插件標(biāo)識(shí)符、接口標(biāo)識(shí)符、業(yè)務(wù)服務(wù)接口的輸入?yún)?shù);
(5002)插件容器根據(jù)插件標(biāo)識(shí)符定位到插件,插件根據(jù)接口標(biāo)識(shí)符定位到服務(wù)接口;
(5003)調(diào)用服務(wù)接口,并返回結(jié)果至業(yè)務(wù)請(qǐng)求方。應(yīng)理解,該實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。此外應(yīng)理解,在閱讀了本發(fā)明講授的內(nèi)容之后,本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明作各種改動(dòng)或修改,這些等價(jià)形式同樣落于本申請(qǐng)所附權(quán)利要求書所限定的范圍。
權(quán)利要求
1.一種插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于它包括至少一個(gè)用于表征某一業(yè)務(wù)功能單元的插件,每個(gè)所述的插件包括至少一個(gè)業(yè)務(wù)服務(wù)接口 ;用于描述插件功能與配置參數(shù)的插件構(gòu)建包;用于讀取所述的插件構(gòu)建包內(nèi)的數(shù)據(jù)信息并將其解析后載入 JVM的插件類加載器;一個(gè)用于管理所述的插件、并對(duì)所述的插件進(jìn)行新增、刪除、更新操作的插件容器。
2.根據(jù)權(quán)利要求1所述的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于所述的插件帶有一個(gè)唯一的插件標(biāo)識(shí)符,一個(gè)所述的插件的每個(gè)業(yè)務(wù)服務(wù)接口均帶有一個(gè)唯一的接口標(biāo)識(shí)符。
3.根據(jù)權(quán)利要求1所述的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于所述的插件構(gòu)建包是一個(gè)Jar包,所述的插件構(gòu)建包內(nèi)的數(shù)據(jù)信息至少包括實(shí)現(xiàn)插件業(yè)務(wù)功能的所有Java字節(jié)碼、插件業(yè)務(wù)功能實(shí)現(xiàn)過程中需要使用的資源文件及配置文件、第三方Jar包 fn息ο
4.根據(jù)權(quán)利要求3所述的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于所述的插件構(gòu)建包至少包括包含字節(jié)碼的第一文件夾、包含資源文件和配置文件的第二文件夾、包含第三方Jar包的第三文件夾。
5.根據(jù)權(quán)利要求1所述的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于所述的插件容器用于注冊(cè)與反注冊(cè)所述的插件、獲取每個(gè)所述的插件的業(yè)務(wù)服務(wù)接口列表、設(shè)置所述的插件與業(yè)務(wù)服務(wù)接口的服務(wù)狀態(tài)、以及調(diào)用所述的插件的所述的業(yè)務(wù)服務(wù)接口。
6.根據(jù)權(quán)利要求5所述的插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng),其特征在于每個(gè)所述的插件均具有激活和非激活兩種服務(wù)狀態(tài);所述的插件的每個(gè)所述的業(yè)務(wù)服務(wù)接口均具有激活和非激活兩種服務(wù)狀態(tài),當(dāng)業(yè)務(wù)服務(wù)接口和插件均處于激活的服務(wù)狀態(tài)時(shí),提供相應(yīng)的業(yè)務(wù)服務(wù),否則,不提供業(yè)務(wù)服務(wù)。
7.—種Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法,其特征在于,包括如下步驟(5001)修改插件的插件構(gòu)建包中的字節(jié)碼,形成新的插件構(gòu)建包;(5002)發(fā)送一個(gè)刪除插件接口的請(qǐng)求至插件容器;(5003)插件容器完成插件刪除;(5004)發(fā)送一個(gè)新增插件接口的請(qǐng)求至插件容器; (S005)建立所述的插件容器與所述的新增插件的關(guān)聯(lián)。
8.根據(jù)權(quán)利要求7所述的Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法,其特征在于,所述的新增插件操作包括如下步驟(S005. 1)發(fā)送請(qǐng)求至插件容器,所述的請(qǐng)求包括新加入插件的插件標(biāo)識(shí)符、插件構(gòu)建包路徑信息;(S005. 2)調(diào)用所述的插件容器的新增接口 ;(S005. 3)所述的插件容器新建一個(gè)插件類加載器;(S005. 4)所述的插件類加載器解析所述的插件構(gòu)建包,并載入所述的插件構(gòu)建包中包含的信息;(S005. 5)所述的插件類加載器根據(jù)所述的插件構(gòu)建包提供的元數(shù)據(jù),建立所述的插件的插件構(gòu)建器;(S005. 6)調(diào)用所述的插件構(gòu)建器的初始化方法初始化所述的插件; (S005. 7)將初始化完成的插件的插件標(biāo)識(shí)符注冊(cè)進(jìn)所述的插件容器;(S005.8)返回結(jié)果至請(qǐng)求方。
9.根據(jù)權(quán)利要求8所述的Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法,其特征在于,所述的步驟(S005. 3)進(jìn)一步包括如下步驟(S005. 3. 1)所述的插件類加載器根據(jù)所述的插件構(gòu)建包路徑信息獲取所述的插件構(gòu)建包,并將其整體讀入內(nèi)存;(S005. 3. 2)遍歷所述的插件構(gòu)建包中的所有.class文件、及l(fā)ib目錄下的所有Jar包;(S005. 3. 3)調(diào)用第一種方法將頂層的.class文件或資源文件載入內(nèi)存,如果是lib 目錄下的Jar包文件,則調(diào)用第二種方法將Jar包文件中的.class文件和資源文件載入內(nèi)存;(S005. 3. 4)在內(nèi)存中對(duì)每一個(gè).class文件賦予唯一名稱; (S005. 3. 5)得到一張Java類名稱到Java類字節(jié)碼的映射表; (S005. 3. 6)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋所述的映射表,獲取對(duì)應(yīng)的Java字節(jié)碼,并調(diào)用底層字節(jié)碼載入接口載入所述的字節(jié)碼;(S005. 3. 7)根據(jù)給定的標(biāo)準(zhǔn)名稱搜尋所述的映射表,獲取對(duì)應(yīng)的資源數(shù)據(jù)。
全文摘要
本發(fā)明涉及一種插件式Java系統(tǒng)業(yè)務(wù)單元管理系統(tǒng)和應(yīng)用該系統(tǒng)在Java系統(tǒng)運(yùn)行時(shí)對(duì)業(yè)務(wù)功能進(jìn)行動(dòng)態(tài)變更的方法。上述管理系統(tǒng)包括至少一個(gè)用于表征某一業(yè)務(wù)功能單元的插件,每個(gè)插件包括至少一個(gè)業(yè)務(wù)服務(wù)接口;用于描述插件功能與配置參數(shù)的插件構(gòu)建包;用于讀取插件構(gòu)建包內(nèi)的數(shù)據(jù)信息并將其解析后載入JVM的插件類加載器;一個(gè)用于管理插件、并對(duì)插件進(jìn)行新增、刪除、更新操作的插件容器。在業(yè)務(wù)邏輯發(fā)生變更時(shí),只需要將業(yè)務(wù)功能相應(yīng)的“插件”在代碼級(jí)別進(jìn)行修改,再通過設(shè)定的機(jī)制觸發(fā),即可實(shí)現(xiàn)系統(tǒng)對(duì)該插件的自動(dòng)載入,獲得更新后的業(yè)務(wù)邏輯。在這個(gè)過程中,系統(tǒng)無需重新啟動(dòng),也不會(huì)影響其他業(yè)務(wù)功能的運(yùn)行,提高了業(yè)務(wù)的開發(fā)、部署、實(shí)施效率。
文檔編號(hào)G06F9/445GK102411506SQ20111018936
公開日2012年4月11日 申請(qǐng)日期2011年7月7日 優(yōu)先權(quán)日2011年7月7日
發(fā)明者汪弘 申請(qǐng)人:杭州典能科技有限公司