一種實(shí)現(xiàn)熱部署的處理方法、裝置及服務(wù)器的制造方法
【專利摘要】本發(fā)明公開了一種實(shí)現(xiàn)熱部署的處理方法,該方法包括:接收上傳的新的類文件替換舊的類文件,并接收更新文件列表;確定所述更新文件列表中的類文件的文件名在類管理列表中,加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;其中,所述類管理列表記錄有允許熱部署的類文件的文件名;本發(fā)明同時(shí)還公開了一種實(shí)現(xiàn)熱部署的處理裝置及服務(wù)器,通過本發(fā)明的方案,使服務(wù)器不必一直掃描應(yīng)用部署目錄便可實(shí)現(xiàn)熱部署功能,減少系統(tǒng)在更新時(shí)對(duì)資源的占用,提高更新效率,提升用戶體驗(yàn)。
【專利說明】-種實(shí)現(xiàn)熱部署的處理方法、裝置及服務(wù)器
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù),具體涉及一種實(shí)現(xiàn)熱部署的處理方法、裝置及服務(wù)器。
【背景技術(shù)】
[0002] 熱部署,即為在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件,卻不需要重新啟動(dòng)應(yīng)用?,F(xiàn)有的大 部分網(wǎng)頁(Web)服務(wù)器,例如Apache軟件基金會(huì)開發(fā)的應(yīng)用服務(wù)器Tomcat、IBM公司開發(fā) 的軟件平臺(tái)WebSphere、美國(guó)Oracle公司開發(fā)的應(yīng)用服務(wù)器WebLogic等,都提供調(diào)試模式 或者類似功能,當(dāng)Web服務(wù)器以調(diào)試模式運(yùn)行時(shí),Web服務(wù)器能夠?qū)崿F(xiàn)熱部署功能。但是, 現(xiàn)有技術(shù)在實(shí)際運(yùn)行中存在兩個(gè)不足之處:一是在更新過程中,Web服務(wù)器會(huì)一直掃描應(yīng) 用部署目錄,造成比較大的系統(tǒng)開銷,影響服務(wù)效率;二是Web服務(wù)器需要檢查每個(gè)文件是 否被更改或者是否有新的文件,會(huì)造成資源的浪費(fèi),影響更新效率。
【發(fā)明內(nèi)容】
[0003] 有鑒于此,本發(fā)明的主要目的在于提供一種實(shí)現(xiàn)熱部署的處理方法、裝置及服務(wù) 器,使服務(wù)器不必一直掃描應(yīng)用部署目錄便可實(shí)現(xiàn)熱部署功能,減少系統(tǒng)在更新時(shí)對(duì)資源 的占用,提1?更新效率,提升用戶體驗(yàn)。
[0004] 為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0005] 本發(fā)明提供了一種實(shí)現(xiàn)熱部署的處理方法,該處理方法包括:
[0006] 接收上傳的新的類文件替換舊的類文件,并接收更新文件列表;
[0007] 確定所述更新文件列表中的類文件的文件名在類管理列表中,加載文件名在類管 理列表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;所述類管理列表中記錄有允許熱部署的類文 件的文件名。
[0008] 上述方案中,在所述接收上傳的新的類文件替換舊的類文件之前,該方法還包括: 服務(wù)器在啟動(dòng)時(shí)加載類文件的過程,包括:
[0009] 當(dāng)服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有類文件的文件名,判 斷所述類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過用戶類加載器 (CustomClassloader)加載所述類文件并實(shí)例化,存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的統(tǒng)一資 源定位符(URL,Uniform Resource Locator)的映射關(guān)系;
[0010] 若判斷的結(jié)果為否,則通過應(yīng)用類加載器AppClassloader加載所述類文件并實(shí) 例化,存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
[0011] 上述方案中,該方法還包括:
[0012] 當(dāng)所述類文件為JAVA伺服小程序(sevlet)類文件且接收到頁面請(qǐng)求時(shí),提取所 述頁面請(qǐng)求中的URL,根據(jù)所述URL查找存儲(chǔ)的servlet實(shí)例與URL的映射關(guān)系,若找到所 述URL,則獲取與所述URL對(duì)應(yīng)的servlet實(shí)例,調(diào)用所述servlet實(shí)例的處理函數(shù)處理所 述頁面請(qǐng)求,返回處理結(jié)果;
[0013] 若找不到所述URL,則返回錯(cuò)誤提示信息或不執(zhí)行任何操作。
[0014] 上述方案中,所述調(diào)用所述servlet實(shí)例的處理函數(shù)處理所述頁面請(qǐng)求時(shí),該方 法還包括:
[0015] 所述servlet實(shí)例的處理函數(shù)調(diào)用下層的外觀模式(facade)類文件,在確 定存在所述facade類文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后, 判斷所述facade類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過 CustomClassloader加載所述facade類文件并實(shí)例化,返回facade實(shí)例;若判斷的結(jié)果為 否,貝1J通過AppClassloader加載所述facade類文件并實(shí)例化,返回facade實(shí)例。
[0016] 上述方案中,該方法還包括:
[0017] 所述servlet實(shí)例的處理函數(shù)調(diào)用下層的除facade類文件以外的其他類文 件,判斷所述其他類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過 CustomClassloader加載所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例;若判斷 的結(jié)果為否,則通過AppClassloader加載所述其他類文件并實(shí)例化,返回所述其他類文件 的實(shí)例。
[0018] 本發(fā)明還提供了一種實(shí)現(xiàn)熱部署的處理裝置,所述處理裝置包括類更新模塊,所 述類更新模塊包括:接收模塊、第一存儲(chǔ)模塊、第一確定模塊和第一用戶類加載模塊;其 中,
[0019] 所述接收模塊,用于接收上傳的新的類文件以替換舊的類文件,并接收更新文件 列表;
[0020] 所述第一存儲(chǔ)模塊,用于存儲(chǔ)類文件,并存儲(chǔ)更新文件列表和類管理列表;
[0021] 所述第一確定模塊,用于確定所述更新文件列表中的類文件的文件名在類管理列 表中時(shí),觸發(fā)第一用戶類加載模塊;
[0022] 所述第一用戶類加載模塊,用于加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí) 例替換舊實(shí)例。
[0023] 上述方案中,所述處理裝置還包括類加載模塊,所述類加載模塊包括:掃描模塊、 第二確定模塊、第二用戶類加載模塊、第一應(yīng)用類加載模塊和第二存儲(chǔ)模塊;其中,
[0024] 所述掃描模塊,用于在服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有類 文件的文件名;
[0025] 所述第二確定模塊,用于確定所述類文件的文件名在類管理列表中時(shí),觸發(fā)第二 用戶類加載模塊;確定所述類文件的文件名不在類管理列表中時(shí),觸發(fā)第一應(yīng)用類加載模 塊;
[0026] 所述第二用戶類加載模塊,用于通過CustomClassloader加載文件名在類管理列 表中的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ)模 塊;
[0027] 所述第一應(yīng)用類加載模塊,用于通過AppClassloader加載文件名不在類管理列 表中的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ)模 塊;
[0028] 相應(yīng)的,所述第二存儲(chǔ)模塊,用于存儲(chǔ)所述實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
[0029] 上述方案中,所述處理裝置還包括類運(yùn)行模塊,所述類運(yùn)行模塊包括:提取模塊、 查找獲取模塊和運(yùn)行模塊;其中,
[0030] 所述提取模塊,用于當(dāng)所述類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提取 所述頁面請(qǐng)求中的URL,將所述URL發(fā)送給查找獲取模塊;
[0031] 所述查找獲取模塊,用于根據(jù)所述提取模塊發(fā)送的URL查找存儲(chǔ)的servlet實(shí)例 與URL的映射關(guān)系,獲取與所述URL對(duì)應(yīng)的servlet實(shí)例,將所述servlet實(shí)例發(fā)送給運(yùn)行 模塊;
[0032] 所述運(yùn)行模塊,用于根據(jù)所述查找獲取模塊發(fā)送的servlet實(shí)例,調(diào)用所述 servlet實(shí)例的處理函數(shù)處理所述頁面請(qǐng)求,返回處理結(jié)果;還用于所述查找獲取模塊沒 有找到所述URL對(duì)應(yīng)的servlet實(shí)例時(shí),生成并返回錯(cuò)誤提示信息。
[0033] 上述方案中,所述運(yùn)行模塊還包括:調(diào)用模塊、第三用戶類加載模塊、第二應(yīng)用類 加載模塊;其中,
[0034] 所述調(diào)用模塊,用于servlet實(shí)例的處理函數(shù)調(diào)用下層的facade類文件,在確定 存在所述facade類文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后,判斷所 述facade類文件的文件名是否在類管理列表中,在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類加載 模塊;在判斷結(jié)果為否時(shí),觸發(fā)第二應(yīng)用類加載模塊;
[0035] 所述第三用戶類加載模塊,用于通過CustomClassloader加載文件名在類管理列 表中的facade類文件并實(shí)例化,返回facade實(shí)例;
[0036] 所述第二應(yīng)用類加載模塊,用于通過AppClassloader加載文件名不在類管理列 表中的facade類文件并實(shí)例化,返回facade實(shí)例。
[0037] 上述方案中,所述調(diào)用模塊,還用于當(dāng)servlet實(shí)例的處理函數(shù)調(diào)用下層的除 facade類文件以外的其他類文件時(shí),判斷所述其他類文件的文件名是否在類管理列表中, 在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類加載模塊;在判斷結(jié)果為否時(shí),觸發(fā)第二應(yīng)用類加載模 塊;
[0038] 所述第三用戶類加載模塊,還用于通過CustomClassloader加載文件名在類管理 列表中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例;
[0039] 所述第二應(yīng)用類加載模塊,還用于通過AppClassloader加載文件名不在類管理 列表中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例。
[0040] 本發(fā)明還提供了一種服務(wù)器,所述服務(wù)器包括本發(fā)明所述的實(shí)現(xiàn)熱部署的處理裝 置。
[0041] 本發(fā)明提供的一種實(shí)現(xiàn)熱部署的處理方法、裝置及服務(wù)器,接收上傳的新的類文 件替換舊的類文件,并接收更新文件列表;確定所述更新文件列表中的類文件的文件名在 類管理列表中,加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;所述類管理 列表中記錄有允許熱部署的類文件的文件名;如此,使服務(wù)器不必一直掃描應(yīng)用部署目錄 便可實(shí)現(xiàn)熱部署功能,減少系統(tǒng)在更新時(shí)對(duì)資源的占用,提高更新效率,提升用戶體驗(yàn)。
【專利附圖】
【附圖說明】
[0042] 圖1為本發(fā)明實(shí)現(xiàn)熱部署的處理方法的流程示意圖;
[0043] 圖2為本發(fā)明提供的類文件的加載處理方法的流程示意圖;
[0044] 圖3為本發(fā)明提供的運(yùn)行servlet類文件的方法的流程示意圖;
[0045] 圖4為本發(fā)明提供的調(diào)用facade類文件的方法的流程示意圖;
[0046] 圖5為本發(fā)明提供的調(diào)用除facade類文件以外的其他類文件的方法的流程示意 圖;
[0047] 圖6為本發(fā)明實(shí)現(xiàn)熱部署的處理裝置的結(jié)構(gòu)示意圖;
[0048] 圖7為本發(fā)明實(shí)現(xiàn)熱部署的處理裝置包括的類加載模塊的結(jié)構(gòu)示意圖;
[0049] 圖8為本發(fā)明實(shí)現(xiàn)熱部署的處理裝置包括的類運(yùn)行模塊的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0050] 本發(fā)明的基本思想是:預(yù)先配置類管理列表,所述類管理列表中記錄著不需要重 新啟動(dòng)系統(tǒng)就能實(shí)時(shí)更新的類文件的文件名,當(dāng)接收到上傳的新的類文件和更新文件列表 時(shí),判斷所述更新文件列表中的類文件的文件名是否在所述類管理列表中,若判斷的結(jié)果 為是,則加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;若判斷的結(jié)果為 否,則說明不能自動(dòng)加載新的類文件,需等到服務(wù)器重新啟動(dòng)時(shí)才開始生效。
[0051] 下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說明。
[0052] 圖1為本發(fā)明實(shí)現(xiàn)熱部署的處理方法流程示意圖,如圖1所示,該方法包括以下幾 個(gè)步驟:
[0053] 步驟101?步驟102 :服務(wù)器接收上傳的新的類文件替換舊的類文件,并接收更新 文件列表;
[0054] 這里,以模型視圖控制器(MVC,Model View Controller)三層架構(gòu)為例,將類文件 按層次分為三種:sevlet類、facade類和其他類;其中,所述其他類包括:工具類、輔助類、 數(shù)據(jù)庫(kù)實(shí)體類等;
[0055] 所述更新文件列表中存儲(chǔ)著待更新的類文件的文件名;其中,所述類文件可以是 sevlet類的類文件、facade類的類文件或其他類的類文件;
[0056] 本步驟還包括接收更新消息的步驟。
[0057] 步驟103 :判斷所述更新文件列表中的類文件的文件名是否在類管理列表中,若 判斷的結(jié)果為是,執(zhí)行步驟104 ;若判斷的結(jié)果為否,則說明不能自動(dòng)加載新的類文件,更 新不生效,需等到服務(wù)器下次重啟時(shí)才開始生效;
[0058] 這里,所述類管理列表中記錄有允許熱部署的類文件的文件名,可在類文件更新 開始前自行設(shè)定;
[0059] 所述服務(wù)器一般是Web服務(wù)器。
[0060] 步驟104 :加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;
[0061] 這里,所述加載文件名在類管理列表中的類文件可以采用新定義的用戶類加載器 (CustomClassloader)或現(xiàn)有的類加載器進(jìn)行加載;
[0062] 所述創(chuàng)建新實(shí)例替換舊實(shí)例為:創(chuàng)建文件名在類管理列表中的類文件的新實(shí)例, 用所述類文件的新實(shí)例替換所述類文件的舊實(shí)例,這樣能使更新實(shí)時(shí)生效;
[0063] 這里,所述sevlet類的類文件、facade類的類文件或其他類的類文件的更新過程 均可以采用圖1所示的處理流程,并且可單獨(dú)實(shí)現(xiàn)其中任意一種類文件的更新。
[0064] 進(jìn)一步的,在所述接收上傳的新的類文件替換舊的類文件之前,該方法還包括:月艮 務(wù)器在啟動(dòng)時(shí)加載類文件的過程,包括:
[0065] 當(dāng)服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有類文件的文件名,判斷 所述類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過CustomClassloader 加載所述類文件并實(shí)例化,存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系;
[0066] 若判斷的結(jié)果為否,則通過應(yīng)用類加載器(AppClassloader)加載所述類文件并 實(shí)例化,存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
[0067] 這里,所述加載類文件包括加載servlet類文件、facade類文件和其他類文件,三 種類文件的加載過程均采用上述加載過程,此處不再一一詳細(xì)說明。
[0068] 進(jìn)一步的,該方法還包括:
[0069] 當(dāng)所述類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提取所述頁面請(qǐng)求中的 URL,根據(jù)所述URL查找存儲(chǔ)的servlet實(shí)例與URL的映射關(guān)系,若找到所述URL,則獲取與 所述URL對(duì)應(yīng)的servlet實(shí)例,調(diào)用所述servlet實(shí)例的處理函數(shù)處理所述頁面請(qǐng)求,返回 處理結(jié)果;
[0070] 若找不到所述URL,則返回錯(cuò)誤提示信息或不執(zhí)行任何操作。
[0071] 這里,所述調(diào)用所述servlet實(shí)例的處理函數(shù)處理所述頁面請(qǐng)求為調(diào)用所述 servlet實(shí)例的process函數(shù)處理所述頁面請(qǐng)求。
[0072] 進(jìn)一步的,所述調(diào)用所述servlet實(shí)例的處理方法處理所述頁面請(qǐng)求時(shí),該方法 還包括:
[0073] servlet實(shí)例的處理函數(shù)調(diào)用下層的facade類文件,在確定存在所述facade類 文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后,判斷所述facade類文件 的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過CustomClassloader加載所述 facade類文件并實(shí)例化,返回facade實(shí)例;若判斷的結(jié)果為否,則通過AppClassloader加 載所述facade類文件并實(shí)例化,返回facade實(shí)例。
[0074] 進(jìn)一步的,該方法還包括:
[0075] 所述servlet實(shí)例的處理函數(shù)調(diào)用下層的除facade類文件以外的其他類文 件時(shí),判斷所述其他類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過 CustomClassloader加載所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例;若判斷 的結(jié)果為否,則通過AppClassloader加載所述類文件并實(shí)例化,返回所述其他類文件的實(shí) 例。
[0076] 上述方法中,類文件的運(yùn)行過程具體為:服務(wù)器接收到用戶的頁面請(qǐng)求后,通過 提取并解析URL找到對(duì)應(yīng)的servlet類文件執(zhí)行邏輯處理并調(diào)用下層各數(shù)據(jù)處理接口的 facade類文件或其他類文件,最后將處理結(jié)果返回給用戶,因此,類文件的運(yùn)行按照運(yùn)行 servlet類文件、調(diào)用相應(yīng)的facade類文件或其他類文件的順序依次進(jìn)行。
[0077] 圖2為本發(fā)明提供的類文件的加載處理方法的流程示意圖,如圖2所示,包括以下 步驟:
[0078] 步驟201?步驟202 :當(dāng)服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有 類文件的文件名,判斷所述文件名是否在類管理列表中,若判斷的結(jié)果為是,執(zhí)行步驟203 ; 否則,執(zhí)行步驟204;
[0079] 這里,所述類管理列表中記錄有允許熱部署的類文件的文件名,可在類文件加載 開始前自行設(shè)定。
[0080] 步驟203 :通過CustomClassloader加載所述類文件并實(shí)例化,存儲(chǔ)所述類文件的 實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
[0081] 步驟204 :通過AppClassloader加載所述類文件并實(shí)例化,存儲(chǔ)所述類文件的實(shí) 例與對(duì)應(yīng)的URL的映射關(guān)系。
[0082] 這里,sevlet類的類文件、facade類的類文件或其他類的類文件的加載過程均可 以采用圖2所示的處理流程,并且可單獨(dú)實(shí)現(xiàn)其中任意一種類文件的加載。
[0083] 圖3為本發(fā)明提供的運(yùn)行servlet類文件的方法的流程示意圖,如圖3所示,包括 以下步驟:
[0084] 步驟301?步驟302 :當(dāng)類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提取所述 頁面請(qǐng)求中的URL,并判斷所述URL是否在存儲(chǔ)的實(shí)例與URL的映射關(guān)系中,若判斷的結(jié)果 為是,執(zhí)行步驟303 ;否則,執(zhí)行步驟304。
[0085] 步驟303 :獲取與所述URL對(duì)應(yīng)的servlet實(shí)例,調(diào)用所述servlet實(shí)例的process 方法處理所述頁面請(qǐng)求,返回處理結(jié)果。
[0086] 步驟304 :返回錯(cuò)誤提示信息或不執(zhí)行任何操作。
[0087] 圖4為本發(fā)明提供的調(diào)用facade類文件的方法的流程示意圖,如圖4所示,包括 以下步驟:
[0088] 步驟401?步驟402 :調(diào)用facade類文件,判斷是否存在所述facade類文件的類 定義,若判斷的結(jié)果為是,執(zhí)行步驟404 ;否則,執(zhí)行步驟403 :返回錯(cuò)誤信息;
[0089] 這里,本發(fā)明采用facade工廠模式,即存在一個(gè)facadefactory,所述 facadefactory負(fù)責(zé)加載和實(shí)例化所有的facade類文件,外部和facade之間通過 acadefactory 獲取 facade 實(shí)例。
[0090] 上述方法中,所述判斷是否存在所述facade類文件的類定義為判斷 facadefactory中是否存在所述調(diào)用的facade類文件的類定義。
[0091] 步驟404:判斷所述facade類文件是否已加載并實(shí)例化,若判斷的結(jié)果為是,執(zhí)行 步驟405 :返回facade實(shí)例;若判斷的結(jié)果否,執(zhí)行步驟406 ;
[0092] 步驟406 :判斷所述facade類文件的文件名是否在類管理列表中,若判斷的結(jié)果 為是,執(zhí)行步驟407 ;否則,執(zhí)行步驟408 ;
[0093] 步驟407 :通過CustomClassloader加載所述facade類文件并實(shí)例化,返回 facade 實(shí)例;
[0094] 步驟408 :通過AppClassloader加載所述facade類文件并實(shí)例化,返回facade實(shí) 例。
[0095] 圖5為本發(fā)明提供的調(diào)用除facade類文件以外的其他類文件的方法的流程示意 圖,如圖5所示,包括以下步驟:
[0096] 步驟501?步驟502 :調(diào)用其他類文件,判斷所述其他類文件的文件名是否在類管 理列表中,若判斷的結(jié)果為是,執(zhí)行步驟503 ;否則,執(zhí)行步驟504。
[0097] 這里,所述其他類文件為除facade類文件以外的其他類文件,包括:工具類、輔助 類、數(shù)據(jù)庫(kù)實(shí)體類等類文件。
[0098] 步驟503 :通過CustomClassloader加載所述其他類文件并實(shí)例化,返回所述其他 類文件的實(shí)例。
[0099] 步驟504 :通過AppClassloader加載所述類文件并實(shí)例化,返回所述其他類文件 的實(shí)例。
[0100] 為實(shí)現(xiàn)上述方法,本發(fā)明還提供了一種實(shí)現(xiàn)熱部署的處理裝置,設(shè)置在服務(wù)器上, 所述處理裝置包括類更新模塊60,如圖6所示,所述類更新模塊60包括:接收模塊61、第一 存儲(chǔ)模塊62、第一確定模塊63和第一用戶類加載模塊64 ;其中,
[0101] 所述接收模塊61,用于接收上傳的新的類文件以替換舊的類文件,并接收更新文 件列表;
[0102] 所述第一存儲(chǔ)模塊62,用于存儲(chǔ)類文件,并存儲(chǔ)更新文件列表和類管理列表;
[0103] 所述第一確定模塊63,用于確定所述更新文件列表中的類文件的文件名在類管理 列表中時(shí),觸發(fā)第一用戶類加載模塊64 ;
[0104] 所述第一用戶類加載模塊64,用于加載文件名在類管理列表中的類文件,創(chuàng)建新 實(shí)例替換舊實(shí)例,這樣能使更新實(shí)時(shí)生效;這里可以采用新定義的CustomClassloader或 現(xiàn)有的類加載器進(jìn)行加載。
[0105] 進(jìn)一步的,所述處理裝置還包括類加載模塊70,如圖7所示,所述類加載模塊70包 括:掃描模塊71、第二確定模塊72、第二用戶類加載模塊73、第一應(yīng)用類加載模塊74和第 二存儲(chǔ)模塊75 ;其中,
[0106] 所述掃描模塊71,用于在服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有 類文件的文件名;
[0107] 所述第二確定模塊72,用于確定所述類文件的文件名在類管理列表中時(shí),觸發(fā)第 二用戶類加載模塊73;確定所述類文件的文件名不在類管理列表中時(shí),觸發(fā)第一應(yīng)用類加 載模塊74 ;
[0108] 所述第二用戶類加載模塊73,用于通過CustomClassloader加載文件名在類管理 列表中的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ) 模塊75 ;
[0109] 所述第一應(yīng)用類加載模塊74,用于通過AppClassloader加載文件名不在類管理 列表中的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ) 模塊75 ;
[0110] 相應(yīng)的,所述第二存儲(chǔ)模塊75,用于存儲(chǔ)所述實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系;
[0111] 上述方案中,所述第一存儲(chǔ)模塊62和所述第二存儲(chǔ)模塊75可米用同一個(gè)存儲(chǔ)模 塊;所述第一確定模塊63和所述第二確定模塊72可米用同一個(gè)確定模塊;所述第一用戶 類加載模塊64和所述第二用戶類加載模塊73可采用同一個(gè)用戶類加載模塊。
[0112] 進(jìn)一步的,所述處理裝置還包括類運(yùn)行模塊80,如圖8所示,所述類運(yùn)行模塊80包 括:提取模塊81、查找獲取模塊82和運(yùn)行模塊83 ;其中,
[0113] 所述提取模塊81,用于當(dāng)所述類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提 取所述頁面請(qǐng)求中的URL,將所述URL發(fā)送給查找獲取模塊82 ;
[0114] 所述查找獲取模塊82,用于根據(jù)所述提取模塊81發(fā)送的URL查找存儲(chǔ)的servlet 實(shí)例與URL的映射關(guān)系,獲取與所述URL對(duì)應(yīng)的servlet實(shí)例,將所述servlet實(shí)例發(fā)送給 運(yùn)行模塊83 ;
[0115] 所述運(yùn)行模塊83,用于根據(jù)所述查找獲取模塊82發(fā)送的servlet實(shí)例,調(diào)用所述 servlet實(shí)例的函數(shù)方法處理所述頁面請(qǐng)求,返回處理結(jié)果;還用于所述查找獲取模塊82 沒有找到所述URL對(duì)應(yīng)的servlet實(shí)例時(shí),生成并返回錯(cuò)誤提示信息。
[0116] 進(jìn)一步的,所述類運(yùn)行模塊80還包括:調(diào)用模塊84、第三用戶類加載模塊85和第 二應(yīng)用類加載模塊86;其中,
[0117] 所述調(diào)用模塊84,用于servlet實(shí)例的處理函數(shù)調(diào)用下層的facade類文件時(shí),在 確定存在所述facade類文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后,判 斷所述facade類文件的文件名是否在類管理列表中,在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類 加載模塊85 ;在判斷結(jié)果為否時(shí),觸發(fā)第二應(yīng)用類加載模塊86 ;
[0118] 所述第三用戶類加載模塊85,用于通過CustomClassloader加載文件名在類管理 列表中的facade類文件并實(shí)例化,返回facade實(shí)例;
[0119] 所述第二應(yīng)用類加載模塊86,用于通過AppClassloader加載文件名不在類管理 列表中的facade類文件并實(shí)例化,返回facade實(shí)例。
[0120] 進(jìn)一步的,所述調(diào)用模塊84,還用于當(dāng)servlet實(shí)例的處理函數(shù)調(diào)用下層的除 facade類文件以外的其他類文件時(shí),判斷所述其他類文件的文件名是否在類管理列表中, 在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類加載模塊85;在判斷結(jié)果為否時(shí),觸發(fā)第二應(yīng)用類加 載模塊86 ;
[0121] 所述第三用戶類加載模塊85,還用于通過CustomClassloader加載文件名在類管 理列表中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例;
[0122] 所述第二應(yīng)用類加載模塊86,還用于通過AppClassloader加載文件名不在類管 理列表中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例。
[0123] 上述方案中,所述第三用戶類加載模塊85與所述第二用戶類加載模塊73、所述第 一用戶類加載模塊64可采用同一個(gè)用戶類加載模塊;所述第二應(yīng)用類加載模塊86與所述 應(yīng)用類加載模塊74可采用同一個(gè)用戶類加載模塊。
[0124] 本發(fā)明還提供一種服務(wù)器,所述服務(wù)器包括上述實(shí)現(xiàn)熱部署的處理裝置。
[0125] 本發(fā)明實(shí)施例所述實(shí)現(xiàn)熱部署的處理方法如果以軟件功能模塊的形式實(shí)現(xiàn)并作 為獨(dú)立的產(chǎn)品銷售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理 解,本發(fā)明實(shí)施例的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的 形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì) 算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方 法的全部或部分。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程 序代碼的介質(zhì)。這樣,本發(fā)明實(shí)施例不限制于任何特定的硬件和軟件結(jié)合。
[0126] 相應(yīng)的,本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)存儲(chǔ)介質(zhì),其中存儲(chǔ)有計(jì)算機(jī)程序,該計(jì) 算機(jī)程序用于執(zhí)行本發(fā)明實(shí)施例的實(shí)現(xiàn)熱部署的處理方法。
[0127] 以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在 本發(fā)明的精神和范圍之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均包含在本發(fā)明的保護(hù)范 圍之內(nèi)。
【權(quán)利要求】
1. 一種實(shí)現(xiàn)熱部署的處理方法,其特征在于,該處理方法包括: 接收上傳的新的類文件替換舊的類文件,并接收更新文件列表; 確定所述更新文件列表中的類文件的文件名在類管理列表中,加載文件名在類管理列 表中的類文件,創(chuàng)建新實(shí)例替換舊實(shí)例;所述類管理列表中記錄有允許熱部署的類文件的 文件名。
2. 根據(jù)權(quán)利要求1所述的處理方法,其特征在于,在所述接收上傳的新的類文件替換 舊的類文件之前,該方法還包括:服務(wù)器在啟動(dòng)時(shí)加載類文件的過程,包括: 當(dāng)服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有類文件的文件名,判斷 所述類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過用戶類加載器 CustomClassloader加載所述類文件并實(shí)例化,存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的統(tǒng)一資源 定位符URL的映射關(guān)系; 若判斷的結(jié)果為否,則通過應(yīng)用類加載器AppClassloader加載所述類文件并實(shí)例化, 存儲(chǔ)所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
3. 根據(jù)權(quán)利要求2所述的處理方法,其特征在于,該方法還包括: 當(dāng)所述類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提取所述頁面請(qǐng)求中的URL,根 據(jù)所述URL查找存儲(chǔ)的servlet實(shí)例與URL的映射關(guān)系,若找到所述URL,則獲取與所述URL 對(duì)應(yīng)的servlet實(shí)例,調(diào)用所述servlet實(shí)例的處理函數(shù)處理所述頁面請(qǐng)求,返回處理結(jié) 果; 若找不到所述URL,則返回錯(cuò)誤提示信息或不執(zhí)行任何操作。
4. 根據(jù)權(quán)利要求3所述的處理方法,其特征在于,所述調(diào)用所述servlet實(shí)例的處理函 數(shù)處理所述頁面請(qǐng)求時(shí),該方法還包括: 所述servlet實(shí)例的處理函數(shù)調(diào)用下層的facade類文件,在確定存在所述facade類 文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后,判斷所述facade類文件 的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過CustomClassloader加載所述 facade類文件并實(shí)例化,返回facade實(shí)例;若判斷的結(jié)果為否,則通過AppClassloader加 載所述facade類文件并實(shí)例化,返回facade實(shí)例。
5. 根據(jù)權(quán)利要求4所述的處理方法,其特征在于,該方法還包括: 所述servlet實(shí)例的處理函數(shù)調(diào)用下層的除facade類文件以外的其他類文 件,判斷所述其他類文件的文件名是否在類管理列表中,若判斷的結(jié)果為是,則通過 CustomClassloader加載所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例;若判斷 的結(jié)果為否,則通過AppClassloader加載所述其他類文件并實(shí)例化,返回所述其他類文件 的實(shí)例。
6. -種實(shí)現(xiàn)熱部署的處理裝置,其特征在于,所述處理裝置包括類更新模塊,所述類更 新模塊包括:接收模塊、第一存儲(chǔ)模塊、第一確定模塊和第一用戶類加載模塊;其中, 所述接收模塊,用于接收上傳的新的類文件以替換舊的類文件,并接收更新文件列 表; 所述第一存儲(chǔ)模塊,用于存儲(chǔ)類文件,并存儲(chǔ)更新文件列表和類管理列表; 所述第一確定模塊,用于確定所述更新文件列表中的類文件的文件名在類管理列表中 時(shí),觸發(fā)第一用戶類加載模塊; 所述第一用戶類加載模塊,用于加載文件名在類管理列表中的類文件,創(chuàng)建新實(shí)例替 換舊實(shí)例。
7. 根據(jù)權(quán)利要求6所述的處理裝置,其特征在于,所述處理裝置還包括類加載模塊,所 述類加載模塊包括:掃描模塊、第二確定模塊、第二用戶類加載模塊、第一應(yīng)用類加載模塊 和第二存儲(chǔ)模塊;其中, 所述掃描模塊,用于在服務(wù)器啟動(dòng)并加載類文件時(shí),掃描類文件目錄里的所有類文件 的文件名; 所述第二確定模塊,用于確定所述類文件的文件名在類管理列表中時(shí),觸發(fā)第二用戶 類加載模塊;確定所述類文件的文件名不在類管理列表中時(shí),觸發(fā)第一應(yīng)用類加載模塊; 所述第二用戶類加載模塊,用于通過CustomClassloader加載文件名在類管理列表中 的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ)模塊; 所述第一應(yīng)用類加載模塊,用于通過AppClassloader加載文件名不在類管理列表中 的類文件并實(shí)例化,將所述類文件的實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系發(fā)送給第二存儲(chǔ)模塊; 相應(yīng)的,所述第二存儲(chǔ)模塊,用于存儲(chǔ)所述實(shí)例與對(duì)應(yīng)的URL的映射關(guān)系。
8. 根據(jù)權(quán)利要求6所述的處理裝置,其特征在于,所述處理裝置還包括類運(yùn)行模塊,所 述類運(yùn)行模塊包括:提取模塊、查找獲取模塊和運(yùn)行模塊;其中, 所述提取模塊,用于當(dāng)所述類文件為servlet類文件且接收到頁面請(qǐng)求時(shí),提取所述 頁面請(qǐng)求中的URL,將所述URL發(fā)送給查找獲取模塊; 所述查找獲取模塊,用于根據(jù)所述提取模塊發(fā)送的URL查找存儲(chǔ)的servlet實(shí)例與URL 的映射關(guān)系,獲取與所述URL對(duì)應(yīng)的servlet實(shí)例,將所述servlet實(shí)例發(fā)送給運(yùn)行模塊; 所述運(yùn)行模塊,用于根據(jù)所述查找獲取模塊發(fā)送的servlet實(shí)例,調(diào)用所述servlet實(shí) 例的處理函數(shù)處理所述頁面請(qǐng)求,返回處理結(jié)果;還用于所述查找獲取模塊沒有找到所述 URL對(duì)應(yīng)的servlet實(shí)例時(shí),生成并返回錯(cuò)誤提示信息。
9. 根據(jù)權(quán)利要求8所述的處理裝置,其特征在于,所述運(yùn)行模塊還包括:調(diào)用模塊、第 三用戶類加載模塊、第二應(yīng)用類加載模塊;其中, 所述調(diào)用模塊,用于servlet實(shí)例的處理函數(shù)調(diào)用下層的facade類文件,在確定存 在所述facade類文件的類定義且所述facade類文件沒有被加載并實(shí)例化之后,判斷所述 facade類文件的文件名是否在類管理列表中,在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類加載模 塊;在判斷結(jié)果為否時(shí),觸發(fā)第二應(yīng)用類加載模塊; 所述第三用戶類加載模塊,用于通過CustomClassloader加載文件名在類管理列表中 的facade類文件并實(shí)例化,返回facade實(shí)例; 所述第二應(yīng)用類加載模塊,用于通過AppClassloader加載文件名不在類管理列表中 的facade類文件并實(shí)例化,返回facade實(shí)例。
10. 根據(jù)權(quán)利要求9所述的處理裝置,其特征在于,所述調(diào)用模塊,還用于當(dāng)servlet實(shí) 例的處理函數(shù)調(diào)用下層的除facade類文件以外的其他類文件時(shí),判斷所述其他類文件的 文件名是否在類管理列表中,在判斷結(jié)果為是時(shí),觸發(fā)第三用戶類加載模塊;在判斷結(jié)果為 否時(shí),觸發(fā)第二應(yīng)用類加載模塊; 所述第三用戶類加載模塊,還用于通過CustomClassloader加載文件名在類管理列表 中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例; 所述第二應(yīng)用類加載模塊,還用于通過AppClassloader加載文件名不在類管理列表 中的所述其他類文件并實(shí)例化,返回所述其他類文件的實(shí)例。
11. 一種服務(wù)器,其特征在于,所述服務(wù)器包括如權(quán)利要求6至10任一項(xiàng)所述的實(shí)現(xiàn)熱 部署的處理裝置。
【文檔編號(hào)】G06F9/445GK104102502SQ201310121779
【公開日】2014年10月15日 申請(qǐng)日期:2013年4月9日 優(yōu)先權(quán)日:2013年4月9日
【發(fā)明者】吳帥 申請(qǐng)人:騰訊科技(深圳)有限公司