企業分布式應用系統中實現資源加載及資源熱更新的方法
2023-09-16 02:58:50
專利名稱:企業分布式應用系統中實現資源加載及資源熱更新的方法
技術領域:
本發明涉及計算機應用技術領域,特別涉及計算機企業應用系統技術領域,具體是指一種企業分布式應用系統中實現資源加載以及資源熱更新的方法。
背景技術:
目前,在企業級應用開發領域,其架構主要是按照面向服務體系架構 (Service-Oriented Architecture,S0A)或者按,照 J2EE架構(Java 2Platform Enterprise Edition)實現的,在功能開發時,通常將應用劃分為多個功能模塊,每個功能模塊完成特定的功能。在模塊功能實現的過程中,不可避免地要涉及到與各種資源,在功能代碼實現中需要對資源進行解析加工,把各種資源轉換化為機器能識別的形式。應用中的每個模塊相對獨立,包含了實現模塊功能需要的所有資源,模塊之間通過模塊間的依賴關係可以使用依賴模塊中的資源,實現資源的重用。模塊中的資源通常包括頁面展現資源、服務描述資源、業務邏輯資源、模塊配置以及模塊元數據資源等,為了管理的方便,每個模塊的資源通常部署在單獨的壓縮包或者目錄中。在運行期,系統加載模塊中資源時首先對模塊資源的存儲形式如壓縮包(zip、jar)、文件目錄、資源存儲庫等進行分析,對壓縮包等類型的模塊進行解壓縮,對通過存儲庫存取資源的模塊從存儲庫中下載模塊對應的資源至本地系統中,然後系統針對不同的資源分別進行處理。在處理資源時,針對不同類型的資源文件分別提供不同的資源查找邏輯和加載邏輯,對於模塊中不同類型的資源將有可能進行重複遍歷和搜索,由此造成效率的降低以及功能代碼的重複,同時如果新增對某一類資源的處理,則需要重新編寫與其資源相對應的查找以及加載邏輯。在資源的熱更新處理方面,每一類資源單獨啟動針對此資源的監聽線程進行處理,不同類型的資源使用不同的資源變更通知機制,缺乏統一的熱更新通知和管理機制,同時大量啟動線程也浪費了大量的系統資源。隨著應用系統的不斷擴大,系統中包含的資源也越來越多,格式也越來越複雜,通常為了編碼實現的方便,系統中已提供了對已有資源類型的支持,資源處理與應用邏輯採取的是緊耦合的方式,應用功能開發完成後,如果新增對一種資源類型的支持,需要修改其核心業務代碼,這都將使測試人員和維護人員的工作量急劇增加。隨著現有技術中,在多系統分工合作日益地緊密,如何方便的提供針對不同資源類型的加載、熱更新支持成為該技術領域中尤為迫切需要解決的問題。
發明內容
本發明的目的是克服了上述現有技術中的缺點,提供一種使資源的解析以及熱更新工作變更為簡單、高效,增加新的資源類型時,無需修改核心代碼,從而使資源的處理以及解析過程更加直觀,提高了開發的效率,系統運行效率較高,性能穩定可靠,開發維護成本較低,系統可移植性和可擴展性更強,且快速適應業務需求的變化和技術變化的企業分布式應用系統中實現資源加載以及資源熱更新的方法
為了實現上述的目的,本發明的企業分布式應用系統中實現資源加載以及資源熱更新的方法具體包括開發期實現資源解析器接口和攔截器接口並配置格式定義的操作、運行期對資源加載配置文件解析的操作、運行期模塊資源加載的操作以及運行期熱更新線程監聽的操作;其中,所述的開發期實現資源解析器接口和攔截器接口並配置格式定義的操作, 包括以下步驟(11)新建資源解析擴展包;(12)編寫實現資源解析器接口的實現類;(13)編寫實現資源攔截器接口的實現類;(14)配置資源解析器、攔截器與資源的映射規則;(15)將資源解析器擴展包部署到運行環境中;所述的運行期對資源加載配置文件解析的操作,包括以下步驟(21)提供支持資源解析器擴展的接口類,以供擴展;(22)提供支持資源攔截器擴展的接口類,以供擴展;(23)加載定義的資源解析器、攔截器與資源映射規則配置文件;(24)根據對配置文件的解析形成資源與解析器的映射列表;(25)根據對配置文件的解析形成資源與攔截器的映射列表;(26)對資源與解析器的映射列表按優先級進行排序;所述的運行期模塊資源加載的操作,包括以下步驟(31)遍歷模塊下所有資源,並緩存;(32)對資源按資源解析器的配置進行資源的分類;(33)執行資源解析前的攔截器;(34)針對分類資源調用不同的資源解析器進行資源解析;(35)判斷資源解析器是否支持懶加載;(36)緩存資源解析後的模型;(37)執行資源解析後的攔截器;所述的運行期熱更新線程監聽的操作,包括以下步驟(41)資源熱更新線程的編寫;(42)設置熱更新線程的掃描間隔;(43)遍歷模塊對應的目錄,查找變更的資源;(44)對變更資源按資源解析器的配置進行資源的分類;(45)執行變更資源解析前的攔截器;(46)針對分類變更資源調用不同的資源解析器進行資源解析;(47)判斷變更資源解析器是否支持懶加載;(48)變更緩存中資源解析的模型;(49)執行變更資源解析後的攔截器。該企業分布式應用系統中實現資源加載以及資源熱更新的方法中,所述的步驟 (11)具體為新建頁面流資源解析擴展包,其包括以下步驟
(Ila)通過開發環境的「文件」菜單中新建子菜單,選擇新建頁面流資源解析擴展包;(lib)輸入頁面流資源解析擴展包的名稱,系統創建相應的目錄結構;(Ilc)生成頁面流資源解析擴展包的資源樹,包括配置、接口等結點。所述的步驟(1 具體為編寫實現頁面流資源解析器接口的實現類,其包括以下步驟(12a)新建 Java Class,實現資源加載的接口 IResourceLoader ;(12b)實現資源加載的接口中的loadResource資源加載方法,對資源進行解析, 轉換為資源的內存模型;(12c)對新增資源進行解析處理;(12d)對修改資源進行解析處理;(12e)對刪除資源進行解析處理;(12f)設置資源是否支持懶加載,本頁面流資源支持懶加載。所述的步驟(1 具體為編寫實現頁面流資源攔截器接口的實現類,其包括以下步驟(13a)新建 Java Class,實現資源攔截器的接口 IResourceHandler ;(13b)實現資源攔截器的接口中的doBefore前執行、doAfter後執行、 doException異常執行方法,對資源解析前後進行攔截;(13c)對資源解析前攔截器處理;(13d)對資源解析後攔截器處理;(13e)對資源解析出錯後攔截器處理。所述的步驟(14)具體為配置頁面流資源解析器、攔截器與資源的映射規則,其包括以下步驟(14a)在資源解析擴展包擴展包中資源樹下的「配置」結點下新建資源處理器配置文件 ResourceProcessor. xml ;(14b)在文件中配置資源處理的解析器、攔截器以及優先級。所述的步驟(1 具體為頁面流資源解析器擴展包部署到運行環境中,其包括以下步驟(15a)在資源解析擴展包資源樹上選擇「部署」菜單;(15b)資源解析對應擴展包下的資源按目錄結構部署到運行環境中。該企業分布式應用系統中實現資源加載以及資源熱更新的方法中,所述的步驟 (21)具體包括以下步驟(21a)定義資源解析器操作的接口類^esourceLoader,供用戶擴展,接口中包括對新增、修改、刪除資源的處理以及設置解析器是否支持懶加載;(21b)提供根據資源類型獲取資源解析器的工廠類ResourceLoaderfactory。所述的步驟0 具體包括以下步驟(22a)定義資源攔截器操作的接口類^esourceHandler,供用戶擴展,接口中包括對資源解析前、後以及發生異常的處理;(22b)提供根據資源類型獲取攔截器的工廠類ResourceHandlerfactory。
所述的步驟具體包括以下步驟(23a)遍歷應用類路徑下所有的資源處理器配置文件ResourceftOcessor. xml, 形成處理器文件列表;(23b)循環解析處理器文件列表中的文件;(23c)針對每個處理器節點的資源處理器resourceftOcessor,形成處理器描述模型 ResourceProcessor ;(23d)對處理器描述模型ResourceftOcessor設置其資源類型屬性;(23e)對處理器描述模型Resourcel^rocessor設置其優先級屬性;(23f)對處理器描述模型ResourceftOcessOT設置其解析器屬性,並對解析器實例化;(23g)對處理器描述模型Resourceft^cessor設置其攔截器屬性,並對攔截器實例化。所述的步驟04)具體包括以下步驟(24a)遍歷所有處理器描述模型ResourceftOcessor對應的列表;(24b)讀取處理器描述模型ResourceftOcessor中的資源類型屬性和對應的解析器實例;(24c)資源類型屬性和對應的解析器實例形成映射列表。所述的步驟0 具體包括以下步驟(25a)遍歷所有處理器模型ResourceftOcessor對應的列表;(25b)讀取處理器模型ResourceftOcessor中的資源類型屬性和對應的攔截器實例;(25c)資源類型屬性和對應的攔截器實例形成映射列表;(25d)對資源類型屬性和對應的攔截器實例形成映射列表進行緩存。所述的步驟06)具體包括以下步驟(26a)遍歷所有處理器模型ResourceProcessor對應的列表;(26b)讀取資源類型屬性與優先級,形成映射關系列表;(26c)對資源類型屬性與優先級映射關系列表按優先級排序;(26d)遍歷資源類型屬性和對應的解析器實例形成映射列表;(26e)按優先級的排序順序,對解析器實例按同樣規則進行排序;(26f)緩存排序後的資源類型與解析器實例映射列表。該企業分布式應用系統中實現資源加載以及資源熱更新的方法中,所述的步驟 (31)具體包括以下步驟(31a)查找模塊資源所在的根目錄;(31b)遍歷資源根目錄下的一級子目錄以及資源;(31c)遞歸遍歷子目錄,遍歷其下的子目錄以及資源;(31d)資源放入資源列表緩存,以資源所在的模塊絕對路徑為關鍵字,包括資源的修改時間、絕對路徑列表。所述的步驟(3 具體包括以下步驟(32a)從緩存中的資源類型與解析器實例映射列表中計算出所有的已按設置的優先級進行了排序的資源類型列表;(32b)遍歷模塊資源緩存中的所有資源;(32c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。所述的步驟(3 具體包括以下步驟(33a)遍歷緩存中的所有的資源類型列表;(33b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;(33c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(33d)遍歷查找到的資源攔截器實例列表;(33e)執行資源攔截器實例的doBefore前執行方法,把資源列表作為輸入參數傳遞到攔截器中。所述的步驟(34)具體包括以下步驟(34a)遍歷緩存中的所有的資源類型列表;(34b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;(34c)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;(34d)遍歷查找到的資源解析器實例列表;(34e)執行資源解析器實例的loadResource資源加載方法,把資源列表作為輸入參數傳遞到攔截器中。所述的步驟(3 具體包括以下步驟(35a)執行資源解析器實例的isSupportLazyLoading是否支持懶加載方法;(35b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;(35c)如果資源解析器不支持懶加載,則調用資源解析器執行資源加載;(35d)如果資源解析器支持懶加載,則對資源引用關係進行緩存,其關鍵字為資源所在模塊的相對路徑URI ;(35e)用戶從資源模型緩存中根據資源URI取得資源模型時,如果從資源緩存模型中未找到所對應的資源,則從資源引用關係緩存中查找此資源URI對應的資源物理信息,如果存在,則調用此資源對應解析器實例的loadResource資源加載方法,對資源進行加載。所述的步驟(36)具體包括以下步驟(36a)調用源解析器實例的loadResource資源加載方法後,形成資源對應的模型對象;(36b)對資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為對應的模型對象。所述的步驟(37)具體包括以下步驟(37a)遍歷緩存中的所有的資源類型列表;(37b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;(37c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(37d)遍歷查找到的資源攔截器實例列表;(37e)執行資源攔截器實例的doAfter後執行方法,把資源列表作為輸入參數傳遞到攔截器中;(37f)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doExc印tion異常執行方法,把資源列表以及發生的異常作為輸入參數傳遞到攔截器中。該企業分布式應用系統中實現資源加載以及資源熱更新的方法中,所述的步驟 (42)具體包括以下步驟(42a)設置資源變更的掃描時間的設置單位;(42b)設置監聽資源變更的時間間隔。所述的步驟具體包括以下步驟(43a)遍歷模塊對應的目錄以及子目錄,查找對應的資源;(43b)根據查找到的資源路徑列表,與資源列表緩存進行比對;(43c)查找到的資源在資源列表緩存中存在,但時間戳不同,則表示此資源已修改;(43d)查找到的資源在資源列表緩存中不存在,則表示此資源為新增;(43e)反向查找資源列表緩存,如果資源列表緩存中存在但在查找到的資源列表中不存在,則表示此資源已刪除;(43f)對新增、修改、刪除的資源形成資源變更列表。所述的步驟04)具體包括以下步驟(44a)從緩存中的資源類型與解析器實例映射列表中計算出所有的已按設置的優先級進行排序的資源類型列表;(44b)遍歷資源變更列表中的所有資源;(44c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。所述的步驟0 具體包括以下步驟(45a)遍歷變更的資源類型與物理資源的映射列表;(45b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(45c)遍歷查找到的資源攔截器實例列表;(45d)執行資源攔截器實例的doBefore前執行方法,把變更資源列表作為輸入參數傳遞到攔截器中。所述的步驟06)具體包括以下步驟(46a)遍歷變更的資源類型與物理資源的映射列表;(46b)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;(46c)遍歷查找到的資源解析器實例列表;(46d)執行資源解析器實例的loadResource資源加載方法,把變更資源列表作為輸入參數傳遞到攔截器中。所述的步驟07)具體包括以下步驟
13
(47a)執行資源解析器實例的isSupportLazyLoading是否支持懶加載方法;(47b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;(47c)如果資源解析器不支持懶加載,則調用資源解析器對變更資源執行資源加載;(47d)如果資源解析器支持懶加載,則更新資源引用關係緩存,其關鍵字為資源所在模塊的相對路徑URI。所述的步驟08)具體包括以下步驟(48a)調用源解析器實例的loadResource資源加載方法後,形成變更資源對應的模型對象;(48b)更新資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為資源變更後對應的模型對象。所述的步驟09)具體包括以下步驟(49a)遍歷變更的資源類型與物理資源的映射列表;(49b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(49c)遍歷查找到的資源攔截器實例列表;(49d)執行變資源攔截器實例的doAfter後執行方法,把變更資源列表作為輸入參數傳遞到攔截器中;(49e)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doExc印tion異常執行方法,把變更資源列表以及發生的異常作為輸入參數傳遞到攔截器中。採用了該發明的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其包括開發期實現資源解析器接口和攔截器接口並配置格式定義的操作、運行期對資源加載配置文件解析的操作、運行期模塊資源加載的操作以及運行期熱更新線程監聽的操作。從而使得對資源的解析以及熱更新工作更為簡單而高效,增加新的資源類型時,無需修改核心代碼,可以完成以可插拔的方式進行資源處理器的注入。同時,採用本發明的方法,對資源的處理以及解析過程更加直觀,提高了開發的效率,快捷方便,系統運行效率較高,性能穩定可靠,降低了開發維護的成本;而且增強了系統可移植性和可擴展性,使用戶專注於業務邏輯的處理;不僅如此,該方法還能夠快速適應業務需求的變化和技術變化,能夠支撐建立高度模塊化而且又高度整合的軟體系統,適用範圍較為廣泛,為企業應用中對資源的管理打下了堅實的基礎。
圖1為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源加載接口 ^esourceLoader類圖。圖2為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源攔截器接口 IResourceHandler類圖。圖3為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源解析器工廠ResourceLoaderFactory類圖。
圖4為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源攔截器工廠ResourceHandlerFactory類圖。圖5為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源處理器模型ResourceProcessor類圖。圖6為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源處理匯總類圖。圖7為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源處理器配置文件解析流程圖。圖8為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源加載、解析流程圖。圖9為本發明企業分布式應用系統中實現資源加載以及資源熱更新的方法中資源熱更新線程監聽流程圖。
具體實施例方式為了能夠更清楚地理解本發明的技術內容,特舉以下實施例詳細說明。在本發明的企業分布式應用系統中實現資源加載以及資源熱更新方法應用於基於頁面流資源的加載以及熱更新的具體實施例中頁面流描述為基於J2EE環境下單個 HTTP請求處理過程以及多個請求/頁面之間的跳轉關係,實現頁面請求的流轉,其配置格式採用XML結構,資源的擴展名為.flow。該企業分布式應用系統中實現資源加載以及資源熱更新的系統結構及其方法,包括運行期支撐資源加載及熱更新擴展的通用框架和開發期資源加載以及熱更新的配置格式定義。運行期支撐資源加載及熱更新擴展的通用框架包括對資源加載配置文件的解析, 通過對該配置文件的解析形成資源與解析器以及資源加載攔截器的映射列表,根據此列表能查找到資源對應的處理器和相應的攔截器;同時,為支持資源的熱更新操作,運行期啟動一監聽線程,監聽應用中所有資源的變化,當有資源發生變更時,把資源進行分類,然後交由配置的解析器進行資源的處理。開發期資源加載以及熱更新的配置格式定義包括了針對特定資源加載以及熱更新資源解析接口和攔截器接口的實現以及對此解析器、攔截器的註冊。本發明的企業分布式應用系統中實現資源加載以及資源熱更新的方法包括開發期資源解析器接口、攔截器接口實現以及配置格式定義操作、運行期對資源加載配置文件的解析操作、模塊資源的加載操作以及熱更新線程的監聽操作。該實施例中的開發期資源解析器接口、攔截器接口實現以及配置格式定義操作包括以下步驟(11)新建頁面流資源解析擴展包,包括以下步驟a)通過開發環境「文件」菜單中新建子菜單,選擇新建頁面流資源解析擴展包;b)輸入頁面流資源解析擴展包的名稱,系統創建相應的目錄結構;c)生成頁面流資源解析擴展包的資源樹,包括配置、接口等結點。(12)編寫實現頁面流資源解析器接口的實現類,包括以下步驟a)新建Java Class,實現資源加載的接口 ^esourceLoader,其類圖如圖1如示;b)實現資源加載的接口中的loadResource方法,對資源進行解析,轉換為資源的內存模型;c)對新增資源進行解析處理;d)對修改資源進行解析處理;e)對刪除資源進行解析處理;f)設置資源是否支持懶加載,本頁面流資源支持懶加載,設置為true。(13)編寫實現頁面流資源攔截器接口的實現類,包括以下步驟a)新建Java Class,實現資源攔截器的接口 IResourceHandler,其類圖如圖2如示;b)實現資源攔截器的接口中的doBefore、doAfter、doException方法,對資源解析前後進行攔截;c)對資源解析前攔截器處理;d)對資源解析後攔截器處理;e)對資源解析出錯後攔截器處理。(14)配置頁面流資源解析器、攔截器與資源的映射規則,包括以下步驟a)在資源解析擴展包擴展包中資源樹下的「配置」結點下新建文件 ResourceProcessor. xml ;b)在文件中配置資源處理的解析器、攔截器以及優先級,格式定義如下
<xs: elementname=MprocessorName「
type="xs: string"/>
<xs: element/〉
對本實施例擴展名為flow的資源的解析器類全稱為com. FlowResourceProcessor,攔截器類全稱為 com. FlowResourceHandler,優先級為 10,則此
資源對應處理器的配置為
com. FlowResourceProcessor com. FlowResourceHandler
16
(15)頁面流資源解析器擴展包部署到運行環境中,包括以下步驟a)在資源解析擴展包資源樹上右擊,在彈出菜單中選擇「部署」菜單;b)資源解析對應擴展包下的資源按目錄結構部署到運行環境中。經過以上步驟,資源處理的準備階段已經完成,用戶在添加新的資源處理時,通過幾個簡單的步驟實現資源解析器接口、實現資源攔截器接口以及配置資源解析規則的操作就完成了。該實施例中的運行期對資源加載配置文件的解析操作包括以下步驟,其流程圖如圖7所示(21)提供支持資源解析器擴展的接口類,以供擴展,包括以下步驟a)定義資源解析器操作的接口類頂⑶皿!^此腿如!·,其類圖如圖1所示,供用戶擴展,接口中包括對新增、修改、刪除資源的處理以及設置解析器是否支持懶加載;b)提供根據資源類型獲取資源解析器的工廠類ResourceLoaderfactory,其類圖如圖3如示。(22)提供支持資源攔截器擴展的接口類,以供擴展,包括以下步驟a)定義資源攔截器操作的接口類^esourceHandler,其類圖如圖2所示,供用戶擴展,接口中包括對資源解析前、後以及發生異常的處理;b)提供根據資源類型獲取攔截器的工廠類ResourceHandlerfactory,其類圖如圖4如示。(23)加載定義的資源解析器、攔截器與資源映射規則配置文件,包括以下步驟a)遍歷應用類路徑下所有的資源處理器配置文件ResourceftOcessor. xml,形成處理器文件列表;b)循環解析處理器文件列表中的文件;c)針對每個處理器節點resourceftOcessor,形成處理器描述模型 ResourceProcessor,其類圖如圖5如示,資源處理關鍵類關係圖如圖6如示;d)對處理器模型ResourceftOcessor設置其資源類型屬性;e)對處理器模型ResourceftOcessor設置其優先級屬性;f)對處理器模型ResourceftOcessor設置其解析器屬性,並對解析器實例化;g)對處理器模型ResourceftOcessor設置其攔截器屬性,並對攔截器實例化。(24)根據對配置文件的解析形成資源與解析器的映射列表,包括以下步驟a)遍歷所有處理器模型ResourceProcessor對應的列表;b)讀取處理器模型ResourceftOcessor中的資源類型屬性和對應的解析器實例;c)資源類型屬性和對應的解析器實例形成映射列表。(25)根據對配置文件的解析形成資源與攔截器的映射列表,包括以下步驟a)遍歷所有處理器模型ResourceProcessor對應的列表;b)讀取處理器模型ResourceftOcessor中的資源類型屬性和對應的攔截器實例;c)資源類型屬性和對應的攔截器實例形成映射列表;d)對資源類型屬性和對應的攔截器實例形成映射列表進行緩存。(26)對資源與解析器的映射列表按優先級進行排序,包括以下步驟a)遍歷所有處理器模型ResourceProcessor對應的列表;
b)讀取資源類型屬性與優先級,形成映射關系列表;c)對資源類型屬性與優先級映射關系列表按優先級排序,優先級數字越大排序越
A+^. 、r .
罪目丨J ;d)遍歷資源類型屬性和對應的解析器實例形成映射列表;e)按優先級的排序順序,對解析器實例按同樣規則進行排序;f)緩存排序後的資源類型與解析器實例映射列表。該實施例中的運行期模塊資源的加載包括以下步驟,其流程圖如圖8所示(31)遍歷模塊下所有資源,並緩存,包括以下步驟a)查找模塊資源所在的根目錄;b)遍歷資源根目錄下的一級子目錄以及資源;c)遞歸遍歷子目錄,遍歷其下的子目錄以及資源;d)資源放入資源列表緩存,以資源所在的模塊絕對路徑為關鍵字,包括資源的修改時間、絕對路徑列表。(32)對資源按資源解析器的配置進行資源的分類,包括以下步驟a)從緩存中的資源類型與解析器實例映射列表中計算出所有的資源類型列表,此資源列表已按設置的優先級進行了排序;b)遍歷模塊資源緩存中的所有資源;c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。(33)執行資源解析前的攔截器,包括以下步驟a)遍歷緩存中的所有的資源類型列表;b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;d)遍歷查找到的資源攔截器實例列表;e)執行資源攔截器實例的doBefore方法,把資源列表作為輸入參數傳遞到攔截器中。(34)針對分類資源調用不同的資源解析器進行資源解析,包括以下步驟a)遍歷緩存中的所有的資源類型列表;b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;c)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;d)遍歷查找到的資源解析器實例列表;e)執行資源解析器實例的loadResource方法,把資源列表作為輸入參數傳遞到攔截器中。(35)判斷資源解析器是否支持懶加載,包括以下步驟a)執行資源解析器實例的isSupportLazyLoading方法;b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;c)如果資源解析器不支持懶加載,則調用資源解析器執行資源加載;
18
d)如果資源解析器支持懶加載,則對資源引用關係進行緩存,其關鍵字為資源所在模塊的相對路徑URI ;e)用戶從資源模型緩存中根據資源URI取得資源模型時,如果從資源緩存模型中未找到所對應的資源,則從資源引用關係緩存中查找此資源URI對應的資源物理信息,如果存在,則調用此資源對應解析器實例的loadResource方法,對資源進行加載。(36)緩存資源解析後的模型,包括以下步驟a)調用源解析器實例的loadResource方法後,形成資源對應的模型對象;b)對資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為對應的模型對象。(37)執行資源解析後的攔截器,包括以下步驟a)遍歷緩存中的所有的資源類型列表;b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源;c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;d)遍歷查找到的資源攔截器實例列表;e)執行資源攔截器實例的doAfter方法,把資源列表作為輸入參數傳遞到攔截器中;f)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doExc印tion方法, 把資源列表以及發生的異常作為輸入參數傳遞到攔截器中。該實施例中的運行期熱更新線程的監聽包括以下步驟,其流程圖如圖9所示(41)資源熱更新線程的編寫,包括以下步驟a)設置資源變更的掃描時間的設置單位,通常設置為秒;b)設置監聽資源變更的時間間隔,通常設置為5就可以了,即每5秒掃描一次。(42)遍歷模塊對應的目錄,查找變更的資源,包括以下步驟a)遍歷模塊對應的目錄以及子目錄,查找對應的資源;b)根據查找到的資源路徑列表,與資源列表緩存進行比對;c)查找到的資源在資源列表緩存中存在,但時間戳不同,則表示此資源已修改;d)查找到的資源在資源列表緩存中不存在,則表示此資源為新增;e)反向查找資源列表緩存,如果資源列表緩存中存在但在查找到的資源列表中不存在,則表示此資源已刪除;f)對新增、修改、刪除的資源形成資源變更列表。(43)對變更資源按資源解析器的配置進行資源的分類,包括以下步驟a)從緩存中的資源類型與解析器實例映射列表中計算出所有的資源類型列表,此資源列表已按設置的優先級進行了排序;b)遍歷資源變更列表中的所有資源;c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。(44)執行變更資源解析前的攔截器,包括以下步驟a)遍歷變更的資源類型與物理資源的映射列表;b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源
19攔截器實例列表;c)遍歷查找到的資源攔截器實例列表;d)執行資源攔截器實例的doBefore方法,把變更資源列表作為輸入參數傳遞到攔截器中。(45)針對分類變更資源調用不同的資源解析器進行資源解析,包括以下步驟a)遍歷變更的資源類型與物理資源的映射列表;b)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;c)遍歷查找到的資源解析器實例列表;d)執行資源解析器實例的loadResource方法,把變更資源列表作為輸入參數傳遞到攔截器中。(46)判斷變更資源解析器是否支持懶加載,包括以下步驟a)執行資源解析器實例的isSupportLazyLoading方法;b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;c)如果資源解析器不支持懶加載,則調用資源解析器對變更資源執行資源加載;d)如果資源解析器支持懶加載,則更新資源引用關係緩存,其關鍵字為資源所在模塊的相對路徑URI。(47)變更緩存中資源解析的模型,包括以下步驟a)調用源解析器實例的loadResource方法後,形成變更資源對應的模型對象;b)更新資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為資源變更後對應的模型對象。(48)執行變更資源解析後的攔截器,包括以下步驟a)遍歷變更的資源類型與物理資源的映射列表;b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;c)遍歷查找到的資源攔截器實例列表;d)執行變資源攔截器實例的doAfter方法,把變更資源列表作為輸入參數傳遞到攔截器中;e)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doExc印tion方法, 把變更資源列表以及發生的異常作為輸入參數傳遞到攔截器中。經過以上步驟,企業應用系統中針對頁面流資源處理包括資源解析以及資源熱更新過程全部完成,從中可以得出採用了該發明的企業分布式應用系統中實現資源加載以及資源熱更新的方法,使得對資源的解析以及熱更新工作變得簡單而高效,當增加新的資源類型時,不再需要修改核心代碼,可以完成以可插拔的方式進行資源處理器的注入。採用該發明的方法,對資源的處理以及解析過程更加直觀,提高了開發的效率,快捷方便,系統運行效率較高,性能穩定可靠,降低了開發維護的成本;同時增強了系統可移植性和可擴展性,使用戶專注於業務邏輯的處理;不僅如此,該方法還能夠快速適應業務需求的變化和技術變化,能夠支撐建立高度模塊化而且又高度整合的軟體系統,適用範圍較為廣泛,為企業
20應用中對資源的管理打下了堅實的基礎。 在此說明書中,本發明已參照其特定的實施例作了描述。但是,很顯然仍可以作出各種修改和變換而不背離本發明的精神和範圍。因此,說明書和附圖應被認為是說明性的而非限制性的。
權利要求
1.一種企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的方法包括開發期實現資源解析器接口和攔截器接口並配置格式定義的操作、運行期對資源加載配置文件解析的操作、運行期模塊資源加載的操作以及運行期熱更新線程監聽的操作;所述的開發期實現資源解析器接口和攔截器接口並配置格式定義的操作,包括以下步驟(11)新建資源解析擴展包;(12)編寫實現資源解析器接口的實現類;(13)編寫實現資源攔截器接口的實現類;(14)配置資源解析器、攔截器與資源的映射規則;(15)將資源解析器擴展包部署到運行環境中;所述的運行期對資源加載配置文件解析的操作,包括以下步驟(21)提供支持資源解析器擴展的接口類,以供擴展;(22)提供支持資源攔截器擴展的接口類,以供擴展;(23)加載定義的資源解析器、攔截器與資源映射規則配置文件;(24)根據對配置文件的解析形成資源與解析器的映射列表;(25)根據對配置文件的解析形成資源與攔截器的映射列表;(26)對資源與解析器的映射列表按優先級進行排序; 所述的運行期模塊資源加載的操作,包括以下步驟(31)遍歷模塊下所有資源,並緩存;(32)對資源按資源解析器的配置進行資源的分類;(33)執行資源解析前的攔截器;(34)針對分類資源調用不同的資源解析器進行資源解析;(35)判斷資源解析器是否支持懶加載;(36)緩存資源解析後的模型;(37)執行資源解析後的攔截器;所述的運行期熱更新線程監聽的操作,包括以下步驟(41)資源熱更新線程的編寫;(42)設置熱更新線程的掃描間隔;(43)遍歷模塊對應的目錄,查找變更的資源;(44)對變更資源按資源解析器的配置進行資源的分類;(45)執行變更資源解析前的攔截器;(46)針對分類變更資源調用不同的資源解析器進行資源解析;(47)判斷變更資源解析器是否支持懶加載;(48)變更緩存中資源解析的模型;(49)執行變更資源解析後的攔截器。
2.根據權利要求1所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(11)具體為新建頁面流資源解析擴展包,其包括以下步驟(Ila)通過開發環境的「文件」菜單中新建子菜單,選擇新建頁面流資源解析擴展包;(lib)輸入頁面流資源解析擴展包的名稱,系統創建相應的目錄結構; (Ilc)生成頁面流資源解析擴展包的資源樹,包括配置、接口等結點。
3.根據權利要求2所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(1 具體為編寫實現頁面流資源解析器接口的實現類,其包括以下步驟(12a)新建 Java Class,實現資源加載的接口 IResourceLoader; (12b)實現資源加載的接口中的loadResource資源加載方法,對資源進行解析,轉換為資源的內存模型;(12c)對新增資源進行解析處理; (12d)對修改資源進行解析處理; (12e)對刪除資源進行解析處理;(12f)設置資源是否支持懶加載,本頁面流資源支持懶加載。
4.根據權利要求3所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(13)具體為編寫實現頁面流資源攔截器接口的實現類,其包括以下步驟(13a)新建Java Class,實現資源攔截器的接口 IResourceHandler; (13b)實現資源攔截器的接口中的doBefore前執行、doAfter後執行、doExc印tion異常執行方法,對資源解析前後進行攔截; (13c)對資源解析前攔截器處理; (13d)對資源解析後攔截器處理; (13e)對資源解析出錯後攔截器處理。
5.根據權利要求4所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(14)具體為配置頁面流資源解析器、攔截器與資源的映射規則,其包括以下步驟(14a)在資源解析擴展包擴展包中資源樹下的「配置」結點下新建資源處理器配置文件 ResourceProcessor. xml ;(14b)在文件中配置資源處理的解析器、攔截器以及優先級。
6.根據權利要求5所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(1 具體為頁面流資源解析器擴展包部署到運行環境中,其包括以下步驟(15a)在資源解析擴展包資源樹上選擇「部署」菜單;(15b)資源解析對應擴展包下的資源按目錄結構部署到運行環境中。
7.根據權利要求1至6中任一項所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟具體包括以下步驟(21a)定義資源解析器操作的接口類^esourceLoader,供用戶擴展,接口中包括對新增、修改、刪除資源的處理以及設置解析器是否支持懶加載;(21b)提供根據資源類型獲取資源解析器的工廠類ResourceLoaderfactory。
8.根據權利要求7所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟0 具體包括以下步驟(22a)定義資源攔截器操作的接口類^esourceHandler,供用戶擴展,接口中包括對資源解析前、後以及發生異常的處理;(22b)提供根據資源類型獲取攔截器的工廠類ResourceHandlerfactory。
9.根據權利要求8所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟具體包括以下步驟(23a)遍歷應用類路徑下所有的資源處理器配置文件ResourceftOcessor. xml,形成處理器文件列表;(23b)循環解析處理器文件列表中的文件;(23c)針對每個處理器節點的資源處理器resourceftOcessor,形成處理器描述模型 ResourceProcessor ;(23d)對處理器描述模型ResourceftOcessor設置其資源類型屬性;(23e)對處理器描述模型ResourceftOcessor設置其優先級屬性;(23f)對處理器描述模型ResourceftOcessOT設置其解析器屬性,並對解析器實例化;(23g)對處理器描述模型ResourceftOcessOT設置其攔截器屬性,並對攔截器實例化。
10.根據權利要求9所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟04)具體包括以下步驟(24a)遍歷所有處理器描述模型ResourceftOcessor對應的列表;(24b)讀取處理器描述模型Resourcel^ocessor中的資源類型屬性和對應的解析器實例;(24c)資源類型屬性和對應的解析器實例形成映射列表。
11.根據權利要求10所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟0 具體包括以下步驟(25a)遍歷所有處理器模型ResourceftOcessor對應的列表;(25b)讀取處理器模型ResourceftOcessor中的資源類型屬性和對應的攔截器實例;(25c)資源類型屬性和對應的攔截器實例形成映射列表;(25d)對資源類型屬性和對應的攔截器實例形成映射列表進行緩存。
12.根據權利要求11所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟06)具體包括以下步驟(26a)遍歷所有處理器模型ResourceftOcessor對應的列表; (26b)讀取資源類型屬性與優先級,形成映射關系列表; (26c)對資源類型屬性與優先級映射關系列表按優先級排序; (26d)遍歷資源類型屬性和對應的解析器實例形成映射列表; (26e)按優先級的排序順序,對解析器實例按同樣規則進行排序; (26f)緩存排序後的資源類型與解析器實例映射列表。
13.根據權利要求12所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(31)具體包括以下步驟(31a)查找模塊資源所在的根目錄;(31b)遍歷資源根目錄下的一級子目錄以及資源;(31c)遞歸遍歷子目錄,遍歷其下的子目錄以及資源;(31d)資源放入資源列表緩存,以資源所在的模塊絕對路徑為關鍵字,包括資源的修改時間、絕對路徑列表。
14.根據權利要求13所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(3 具體包括以下步驟(32a)從緩存中的資源類型與解析器實例映射列表中計算出所有的已按設置的優先級進行了排序的資源類型列表;(32b)遍歷模塊資源緩存中的所有資源;(32c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。
15.根據權利要求14所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(3 具體包括以下步驟(33a)遍歷緩存中的所有的資源類型列表;(33b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源; (33c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(33d)遍歷查找到的資源攔截器實例列表;(33e)執行資源攔截器實例的doBefore前執行方法,把資源列表作為輸入參數傳遞到攔截器中。
16.根據權利要求15所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(34)具體包括以下步驟(34a)遍歷緩存中的所有的資源類型列表;(34b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源; (34c)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;(34d)遍歷查找到的資源解析器實例列表;(34e)執行資源解析器實例的loadResource資源加載方法,把資源列表作為輸入參數傳遞到攔截器中。
17.根據權利要求16所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(3 具體包括以下步驟(35a)執行資源解析器實例的isSupportLazyLoading是否支持懶加載方法; (35b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;(35c)如果資源解析器不支持懶加載,則調用資源解析器執行資源加載; (35d)如果資源解析器支持懶加載,則對資源引用關係進行緩存,其關鍵字為資源所在模塊的相對路徑URI ;(35e)用戶從資源模型緩存中根據資源URI取得資源模型時,如果從資源緩存模型中未找到所對應的資源,則從資源引用關係緩存中查找此資源URI對應的資源物理信息,如果存在,則調用此資源對應解析器實例的loadResource資源加載方法,對資源進行加載。
18.根據權利要求17所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(36)具體包括以下步驟(36a)調用源解析器實例的loadResource資源加載方法後,形成資源對應的模型對象;(36b)對資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為對應的模型對象。
19.根據權利要求18所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟(37)具體包括以下步驟(37a)遍歷緩存中的所有的資源類型列表;(37b)根據資源類型從資源類型與物理資源的映射列表中查找對應的物理資源; (37c)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(37d)遍歷查找到的資源攔截器實例列表;(37e)執行資源攔截器實例的doAfter後執行方法,把資源列表作為輸入參數傳遞到攔截器中;(37f)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doException異常執行方法,把資源列表以及發生的異常作為輸入參數傳遞到攔截器中。
20.根據權利要求19所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟0 具體包括以下步驟(42a)設置資源變更的掃描時間的設置單位; (42b)設置監聽資源變更的時間間隔。
21.根據權利要求20所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟具體包括以下步驟(43a)遍歷模塊對應的目錄以及子目錄,查找對應的資源; (43b)根據查找到的資源路徑列表,與資源列表緩存進行比對; (43c)查找到的資源在資源列表緩存中存在,但時間戳不同,則表示此資源已修改; (43d)查找到的資源在資源列表緩存中不存在,則表示此資源為新增; (43e)反向查找資源列表緩存,如果資源列表緩存中存在但在查找到的資源列表中不存在,則表示此資源已刪除;(43f)對新增、修改、刪除的資源形成資源變更列表。
22.根據權利要求21所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟G4)具體包括以下步驟(44a)從緩存中的資源類型與解析器實例映射列表中計算出所有的已按設置的優先級進行排序的資源類型列表;(44b)遍歷資源變更列表中的所有資源;(44c)按資源類型設置,對資源進行分類,形成資源類型與物理資源的映射列表。
23.根據權利要求22所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟0 具體包括以下步驟(45a)遍歷變更的資源類型與物理資源的映射列表;(45b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(45c)遍歷查找到的資源攔截器實例列表;(45d)執行資源攔截器實例的doBefore前執行方法,把變更資源列表作為輸入參數傳遞到攔截器中。
24.根據權利要求23所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟G6)具體包括以下步驟(46a)遍歷變更的資源類型與物理資源的映射列表;(46b)根據資源類型屬性從資源類型與資源解析器實例映射列表緩存中查找對應的資源解析器實例列表;(46c)遍歷查找到的資源解析器實例列表;(46d)執行資源解析器實例的loadResource資源加載方法,把變更資源列表作為輸入參數傳遞到攔截器中。
25.根據權利要求M所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟G7)具體包括以下步驟(47a)執行資源解析器實例的isSupportLazyLoading是否支持懶加載方法;(47b)如果返回為真,則表示此資源解析器支持懶加載;如果返回為假,則表示此資源解析器不支持懶加載;(47c)如果資源解析器不支持懶加載,則調用資源解析器對變更資源執行資源加載;(47d)如果資源解析器支持懶加載,則更新資源引用關係緩存,其關鍵字為資源所在模塊的相對路徑URI。
26.根據權利要求25所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟G8)具體包括以下步驟(48a)調用源解析器實例的loadResource資源加載方法後,形成變更資源對應的模型對象;(48b)更新資源模型對象緩存,其關鍵字為資源所在模塊的相對路徑URI,值為資源變更後對應的模型對象。
27.根據權利要求沈所述的企業分布式應用系統中實現資源加載以及資源熱更新的方法,其特徵在於,所述的步驟G9)具體包括以下步驟(49a)遍歷變更的資源類型與物理資源的映射列表;(49b)根據資源類型屬性從資源類型與攔截器實例映射列表緩存中查找對應的資源攔截器實例列表;(49c)遍歷查找到的資源攔截器實例列表;(49d)執行變資源攔截器實例的doAfter後執行方法,把變更資源列表作為輸入參數傳遞到攔截器中;(49e)如果資源解析執行時出現錯誤,則執行資源攔截器實例的doException異常執行方法,把變更資源列表以及發生的異常作為輸入參數傳遞到攔截器中。
全文摘要
本發明涉及一種企業分布式應用系統中實現資源加載以及資源熱更新的方法,該方法包括開發期實現資源解析器接口和攔截器接口並配置格式定義的操作、運行期對資源加載配置文件解析的操作、運行期模塊資源加載的操作以及運行期熱更新線程監聽的操作。採用本發明的方法能使資源的解析和熱更新工作更為簡單高效,增加新的資源類型時,無需修改核心代碼,系統運行效率更高,性能穩定可靠,並降低了開發維護的成本,增強了系統可移植性和可擴展性,使用戶專注於業務邏輯的處理,還能夠快速適應業務需求和技術的變化,支撐建立高度模塊化又高度整合的軟體系統,其適用範圍較為廣泛,為企業應用中對資源的管理打下了堅實的基礎。
文檔編號G06F9/445GK102436373SQ20111027010
公開日2012年5月2日 申請日期2011年9月13日 優先權日2011年9月13日
發明者王 鋒 申請人:上海普元信息技術股份有限公司