亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種大型軟件自愈合框架及愈合方法

文檔序號:9506003閱讀:602來源:國知局
一種大型軟件自愈合框架及愈合方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件開發(fā)領(lǐng)域,特別是指一種大型軟件自愈合框架及愈合方法。
【背景技術(shù)】
[0002] 隨著軟件的復(fù)雜性的不斷提高,尤其是應(yīng)用在通信、金融等重要領(lǐng)域的大型軟件, 軟件的高可靠性越來越受到關(guān)注。如何開發(fā)一個具有高可靠性的軟件系統(tǒng)成為軟件技術(shù)發(fā) 展必須要解決的問題。
[0003] 自愈合系統(tǒng)是提高軟件可靠性的一種途徑。它結(jié)合了容錯與除錯的方法,在運行 時對程序進行調(diào)整,完成對錯誤的修正。目前,實現(xiàn)自愈合軟件有兩種手段,一種是程序本 身內(nèi)建的提供自愈合的特性,通過軟件自身實現(xiàn)監(jiān)控、分析、修改代碼完成自愈特性。一種 是實現(xiàn)一個可動態(tài)配置的框架和具有相同功能的冗余組件。程序通過在重加載軟件完成對 錯誤的消除。
[0004] 上述方法存在以下的弊端:
[0005] 1、軟件本身需要采集和分析監(jiān)控數(shù)據(jù),數(shù)據(jù)量大,對系統(tǒng)性能損耗大。
[0006] 2、對軟件的愈合不徹底,如果軟件由于內(nèi)部因素導(dǎo)致崩潰,那么通過上述方法自 愈以后,錯誤還可能會再次出現(xiàn)。
[0007] 3、適用性不強,由于需要對受監(jiān)視的程序進行修改,因此大型軟件復(fù)雜的特點往 往導(dǎo)致其無法實施。

【發(fā)明內(nèi)容】

[0008] 本發(fā)明解決的技術(shù)問題之一在于提供一種大型軟件自愈合框架,有效提高大型軟 件的可靠性。
[0009] 本發(fā)明解決的技術(shù)問題之二于提供一種大型軟件自愈合框架的愈合方法,實現(xiàn)大 型軟件的自愈合,提高大型軟件的可靠性。
[0010] 本發(fā)明解決上述技術(shù)問題之一的技術(shù)方案是:
[0011] 所述的框架包括如下模塊:
[0012] 模塊1、運行環(huán)境;
[0013] 模塊2、監(jiān)視模塊;
[0014] 模塊3、程序分析模塊;
[0015] 模塊4、代碼愈合策略生成模塊;
[0016] 模塊5、字節(jié)碼修改模塊;
[0017] 模塊6、事件轉(zhuǎn)發(fā)模塊;
[0018] 所述的運行環(huán)境是實際執(zhí)行程序的軟件環(huán)境;
[0019] 監(jiān)視模塊獲得程序運行的狀態(tài)并生成監(jiān)視數(shù)據(jù);
[0020] 程序分析模塊接收來自監(jiān)視模塊的監(jiān)視數(shù)據(jù),通過對監(jiān)視數(shù)據(jù)的解析,借助判斷 規(guī)則分析得到系統(tǒng)是否正常運行的結(jié)果;如果程序出錯,程序分析模塊給出錯誤定位信息, 并以事件的形式發(fā)送給事件轉(zhuǎn)發(fā)模塊;
[0021] 代碼愈合策略生成模塊由生成規(guī)則和代碼愈合策略生成器組成,代碼愈合策略生 成模塊將程序分析模塊診斷出的錯誤定位信息作為輸入,與事件轉(zhuǎn)發(fā)模塊交互,一方面從 事件轉(zhuǎn)發(fā)模塊發(fā)送過來的信息獲取目前正在處理的字節(jié)碼信息,另一方面又將根據(jù)生成規(guī) 則生成的愈合策略以愈合指令的形式發(fā)送給事件轉(zhuǎn)發(fā)模塊,由事件轉(zhuǎn)發(fā)模塊轉(zhuǎn)換為字節(jié)碼 修改模塊識別的事件流信息;
[0022] 字節(jié)碼修改模塊用來實際操作對字節(jié)碼文件的修改;事件轉(zhuǎn)發(fā)模塊負責(zé)在程序分 析模塊、代碼愈合策略生成模塊、字節(jié)碼修改模塊之間轉(zhuǎn)發(fā)事件流。
[0023] 所述運行環(huán)境具有動態(tài)加載的特性,通過類加載器動態(tài)加載類文件,完成鏈接,初 始化后,程序得以正常運行。
[0024] 所述監(jiān)視模塊通過運行環(huán)境外的程序?qū)ζ溥M行觀察,獲得在運行環(huán)境中運行的大 型軟件程序運行的狀態(tài)。本發(fā)明并不是對程序運行的所有方面進行觀察。"屬性和方法"描 述文件里,本發(fā)明給出了框架所關(guān)注的程序行為和狀態(tài)。
[0025] 本發(fā)明解決上述技術(shù)問題之二的技術(shù)方案是:
[0026] 所述的方法按照以下工作流程進行:
[0027] 步驟1 :監(jiān)控模塊注冊要監(jiān)控的方法和屬性,實現(xiàn)對運行程序有選擇的監(jiān)控;監(jiān)控 模塊把產(chǎn)生的監(jiān)控數(shù)據(jù)發(fā)送到程序分析模塊;
[0028] 步驟2 :程序分析模塊接收來自監(jiān)控模塊的監(jiān)控數(shù)據(jù),通過對監(jiān)控數(shù)據(jù)的解釋,借 助于判斷規(guī)則分析我們可以得到系統(tǒng)是否正常運行的結(jié)果;如果程序出錯,程序分析模塊 給出錯誤定位信息,并以事件的形式發(fā)送給代碼愈合策略生成模塊,同時在事件轉(zhuǎn)發(fā)模塊 上注冊;
[0029] 步驟3 :代碼愈合策略生成模塊根據(jù)生成規(guī)則生成相關(guān)的愈合指令,并發(fā)送給事 件轉(zhuǎn)發(fā)模塊,由事件轉(zhuǎn)發(fā)模塊轉(zhuǎn)換成事件流再轉(zhuǎn)發(fā)到字節(jié)碼修改模塊;
[0030] 步驟4 :字節(jié)碼修改模塊對字節(jié)碼文件進行修改;
[0031] 步驟5 :將修改后的字節(jié)碼文件重新進行裝載運行。
[0032] 所述字節(jié)碼修改模塊包括解碼器與字節(jié)碼構(gòu)建器兩個部分,其對字節(jié)碼文件的修 改步驟如下:
[0033] 步驟1 :字節(jié)碼修改模塊掃描字節(jié)碼文件形成字節(jié)碼流,并通過解碼器將掃描到 的信息以事件流形式發(fā)送到外部;
[0034] 步驟2 :字節(jié)碼構(gòu)架器接收發(fā)送過來的事件流,轉(zhuǎn)換為字節(jié)碼流并保存到類文件 中。
[0035] 字節(jié)碼修改模塊通過這個雙向的過程可以完成對字節(jié)碼文件的修改。
[0036] 由所述程序分析模塊判斷程序目前運行是否健康,是否需要愈合;程序分析模塊 將接收到的監(jiān)控數(shù)據(jù)的數(shù)值與設(shè)定的判斷規(guī)則進行比較,并區(qū)分為以下三種情況分別進行 相應(yīng)的處理:
[0037] 1)健康狀況:監(jiān)視模塊報送過來的一切數(shù)據(jù)都在系統(tǒng)約束范圍內(nèi),這時表示系統(tǒng) 正常運行,不需要對程序進行任何改變;
[0038] 2)潛在錯誤:監(jiān)視模塊報送過來的數(shù)據(jù)信息違反了系統(tǒng)某些約束,但是程序仍然 正常運行;這表示對約束的違反并沒有引發(fā)程序錯誤,然而基于對約束的違反會在將來導(dǎo) 致程序出錯,所以系統(tǒng)需要進入自愈合程序;
[0039] 3)錯誤狀況:監(jiān)視模塊報送過來的信息已經(jīng)指示了系統(tǒng)出錯(比如,拋出的異 常),這時程序已經(jīng)處在錯誤狀態(tài),不需要經(jīng)過對程序約束的判斷就可判定程序錯誤,可以 立即進入自愈合程序;
[0040] 所述判斷規(guī)則是指數(shù)值的正常約束范圍。
[0041] 本發(fā)明方案的有益效果如下:
[0042] 1、本發(fā)明的方法只對指定的屬性和方法進行監(jiān)控,采集和分析的數(shù)據(jù)量少,對系 統(tǒng)性能損耗??;
[0043] 2、本發(fā)明的提供的框架愈合程度高,錯誤不會再次出現(xiàn);
[0044] 3、本發(fā)明的方法應(yīng)用范圍廣,不需要對受監(jiān)視程序進行修改。
【附圖說明】
[0045] 下面結(jié)合附圖對本發(fā)明進一步說明:
[0046] 圖1為本發(fā)明框架的結(jié)構(gòu)圖;
【具體實施方式】
[0047] 本發(fā)明所述框架的實現(xiàn)方式有多種,如圖1所示,以下采用Java虛擬機技術(shù)以及 字節(jié)碼工程相關(guān)知識和工具實現(xiàn)框架。Java虛擬機有很多動態(tài)特性,有利于構(gòu)建一個動態(tài) 的框架。
[0048] (1)運行環(huán)境
[0049] 運行環(huán)境最主要的任務(wù)是負責(zé)程序的運行,并提供對監(jiān)控的支持。
[0050] 在本框架中采用類文件和Java虛擬機的組合構(gòu)成這個部分。對于程序的運行, Java虛擬機內(nèi)建了動態(tài)加載的機制。Java虛擬機首先將程序類文件加載到Java虛擬機 中,然后進行鏈接,鏈接校驗需要鏈接的類文件,然后Java虛擬機對程序進行初始化,最后 執(zhí)行字節(jié)碼。
[0051] 對于監(jiān)控的支持,Java虛擬機原生并沒有此種設(shè)計。這項功能需要在Java虛擬 機之外實現(xiàn)。這里使用Java反射首先找到mainO方法,然后用預(yù)期的命令行參數(shù)調(diào)用它。
[0052] private static void 'Run(String[] ctnd) { try I /7裝載類 Jassisliming, class. getClassLoader (); Class clas = JassisTiming. class. getClassLoader0 . IoadClass(cmd[0]); //調(diào)用_標類的main方法 ClassG ptypes = .new Class[] {emd, getClass ()};
[0053] Method main = clas. getDeclaredMethod("main",ptypes); String [] pargs = new String [cmd, length-1] ; //參數(shù) System, arraycopy (cmd, I, pargs, 0, pargs. length); main, invoke (null, new Object [] {pargs}); }catch(Exception ex) { System, out. println (ex. toString ()); } }
[0054] 上述采用Javassist提供的類加載器。Javassist是一個執(zhí)行字節(jié)碼操作的強而 有力的驅(qū)動代碼庫。它允許開發(fā)者自由地在一個已經(jīng)編譯好的類中添加新的方法,或者是 修改已有的方法。
[0055] (2)監(jiān)視模塊
[0056] 監(jiān)視模塊需要安插到運行環(huán)境中,用于攔截程序的運行,獲取框架所關(guān)心的程序 運行信息。
[0057] 為實現(xiàn)該模塊,采用Javassist攔截類加載過程,主要依賴于javassist. ClassPool類。這個類可以通過名稱的方式直接從ClassPool請求需要的類,以javassist. CtClass實例的形式取得該類的Javassist表示。此外,Javassist還提供了 javassist. Loader類形式訪問C
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1