国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種Java程序注入故障的方法和系統(tǒng)與流程

      文檔序號:12786259閱讀:583來源:國知局
      一種Java程序注入故障的方法和系統(tǒng)與流程

      本申請涉及計算機(jī)軟件技術(shù)領(lǐng)域,尤其涉及一種Java程序注入故障的方法及系統(tǒng)。



      背景技術(shù):

      軟件開發(fā)過程中,往往需要對開發(fā)的程序進(jìn)行可靠性驗證。一般可以通過向待驗證的程序引入故障以檢測待驗證程序是否產(chǎn)生異常情況。通過引入故障,可以加速系統(tǒng)失效,從而在較短時間內(nèi)模擬系統(tǒng)錯誤,并獲取系統(tǒng)的失效數(shù)據(jù),從而達(dá)到評測待驗證程序的容錯性能以及穩(wěn)定性。故障注入技術(shù)一般包括基于硬件的故障注入、基于軟件的故障注入以及基于仿真的故障注入。

      一般的基于軟件的故障注入方法可以通過動態(tài)修改進(jìn)程所使用寄存器中的數(shù)據(jù)實現(xiàn)。計算機(jī)系統(tǒng)中,進(jìn)程是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它可以申請和擁有系統(tǒng)資源,是一個動態(tài)的概念。它不只是程序的代碼,還包括當(dāng)前的活動,通過處理寄存器的內(nèi)容來表示。當(dāng)進(jìn)程正在運行時,狀態(tài)通常儲存在寄存器中。現(xiàn)有技術(shù)為了評測軟件系統(tǒng)中對于某些進(jìn)程失效后整個系統(tǒng)的可恢復(fù)性、容錯性和可用性,提供了一套基于計算機(jī)系統(tǒng)寄存器的故障注入工具,該模塊可應(yīng)用于x86與x64系列的Linux系統(tǒng)。

      操作系統(tǒng)中一般需要運行多個進(jìn)程,進(jìn)程與進(jìn)程之間需要共享CPU資源。而操作系統(tǒng)則負(fù)責(zé)進(jìn)程間的調(diào)度與切換,當(dāng)系統(tǒng)需要對進(jìn)程進(jìn)行調(diào)度時,需要確保在進(jìn)程切換過程中不能有數(shù)據(jù)的損壞。因此,操作系統(tǒng)會先將需要換出的進(jìn)程的當(dāng)前狀態(tài)(主要是寄存器內(nèi)容)保存至內(nèi)存中,并恢復(fù)需要換入進(jìn)程的狀態(tài)。然而,這些操作均需要在系統(tǒng)時鐘中斷請求的參與下完成。時鐘中斷請求是時操作系統(tǒng)中任務(wù)調(diào)度、進(jìn)程切換的資源占用統(tǒng)計依據(jù),是整個操作系統(tǒng)內(nèi)核工作的脈搏。也就是說,當(dāng)系統(tǒng)時鐘中斷出現(xiàn)時,操作系統(tǒng)可能進(jìn)行進(jìn)程 的切換操作,隨后完成現(xiàn)場恢復(fù)操作。因此,當(dāng)系統(tǒng)時鐘中斷時,在系統(tǒng)進(jìn)行現(xiàn)場恢復(fù)操作之前,通過軟件的方式可以修改內(nèi)存中備份的寄存器數(shù)據(jù),隨后操作系統(tǒng)可以將修改過的寄存器內(nèi)容恢復(fù)至進(jìn)程寄存器中,從而達(dá)到軟件故障注入的目的。

      對于Java程序,上述方式無法實現(xiàn)故障注入。這是因為,用Java語言編寫的軟件系統(tǒng),需要由Java虛擬機(jī)解釋執(zhí)行,而操作系統(tǒng)無法直接執(zhí)行。

      在Java程序開發(fā)過程中,當(dāng)程序員編寫完Java源代碼后,Java源代碼可由Java編譯器編譯為可被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件(Class文件)。進(jìn)而,由Java虛擬機(jī)解釋執(zhí)行所述字節(jié)碼文件,可以實現(xiàn)程序的運行。在Java虛擬機(jī)啟動后,解釋執(zhí)行Class文件之前,Java虛擬機(jī)還需要完成對Class文件的加載、驗證、準(zhǔn)備、解析以及初始化這5個階段。在正常情況下,Class文件被Java虛擬機(jī)加載一次。

      現(xiàn)有技術(shù)中針對Java程序的一種故障注入工具,在Java虛擬機(jī)啟動之前,使用字節(jié)碼修改軟件對編譯完的Class文件進(jìn)行修改,從而達(dá)到靜態(tài)注入Java程序故障的目的。該工具需要預(yù)先收集相應(yīng)的故障信息,并對class文件進(jìn)行掃描匹配,然后注入相應(yīng)的故障代碼,啟動Java虛擬機(jī)執(zhí)行相應(yīng)的字節(jié)碼文件。

      然而,該工具只適用于Java虛擬機(jī)啟動之前對class字節(jié)碼文件進(jìn)行修改,當(dāng)Java虛擬機(jī)啟動后,該故障注入工具無法完成故障注入。在測試環(huán)境中,測試人員若想要復(fù)現(xiàn)已經(jīng)出現(xiàn)的故障場景,需要將正在執(zhí)行中的Java虛擬機(jī)關(guān)閉,然后修改字節(jié)碼文件,重新啟動Java虛擬機(jī),這時,Java虛擬機(jī)已經(jīng)無法恢復(fù)原有的故障上下文信息。特別是出現(xiàn)故障時的系統(tǒng)報錯,在需要重現(xiàn)該錯誤時,由于重新啟動Java虛擬機(jī),之前報錯時的各種參數(shù)和現(xiàn)象已經(jīng)可能不會再重現(xiàn)了。



      技術(shù)實現(xiàn)要素:

      本申請實施例的目的是提供一種Java程序注入故障的方法及系統(tǒng),以實現(xiàn) Java虛擬機(jī)啟動后的故障注入。

      為解決上述技術(shù)問題,本申請實施例是這樣實現(xiàn)的:

      一種Java程序注入故障的方法,包括:

      客戶端接收輸入的故障代碼,并將所述故障代碼傳送至總控端;

      Java虛擬機(jī)啟動后,加載原始Class文件;

      所述總控端監(jiān)控所述Java虛擬機(jī)所在Java進(jìn)程的運行情況,取回所述Java虛擬機(jī)加載的原始Class文件;

      所述總控端根據(jù)所述故障代碼編輯所述取回的原始Class文件,生成編輯后的Class文件;

      總控端將所述編輯后的Class文件上傳至所述Java虛擬機(jī)以替換所述原始Class文件;

      所述Java虛擬機(jī)解釋執(zhí)行所述編輯后的Class文件。

      一種Java程序注入故障的系統(tǒng),包括:

      客戶端,用于接收輸入的故障代碼,并將所述故障代碼傳送至總控端;

      總控端,用于監(jiān)控所述Java虛擬機(jī)所在Java進(jìn)程的運行情況,取回所述Java虛擬機(jī)加載的原始Class文件;根據(jù)所述故障代碼編輯所述取回的原始Class文件,生成編輯后的Class文件;將所述編輯后的Class文件上傳至所述Java虛擬機(jī)以替換所述原始Class文件;

      Java虛擬機(jī),啟動后用于加載原始Class文件,并用于解釋執(zhí)行所述編輯后的Class文件。

      由以上本申請實施例提供的技術(shù)方案可見,本申請實施例通過在Java虛擬機(jī)啟動后,監(jiān)控所述Java虛擬機(jī)運行情況并取回所述加載的原始Class文件,通過編輯生成編輯后的Class文件以替換所述原始Class文件,可以實現(xiàn)在Java虛擬機(jī)啟動后不需要重啟啟動Java虛擬機(jī)的情況下諸如指定類型的故障,并可以保持報錯時的上下文數(shù)據(jù)。

      附圖說明

      為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本申請一個實施例的JVMTI交互模型;

      圖2為本申請一種Java程序注入故障的方法實施例;

      圖3為本申請一種Java程序注入故障的系統(tǒng)實施例。

      具體實施方式

      本申請實施例提供一種Java程序注入故障的方法及系統(tǒng)。

      為了使本技術(shù)領(lǐng)域的人員更好地理解本申請中的技術(shù)方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本申請保護(hù)的范圍。

      程序員編寫完Java源代碼后,Java源代碼可以由Java編譯器編譯為可被Java虛擬機(jī)解釋執(zhí)行的字節(jié)碼(Class文件)。在Java虛擬機(jī)啟動后,完成Class文件的加載、驗證、準(zhǔn)備、解析以及初始化等工作,進(jìn)而解釋執(zhí)行Class文件。正常情況下,Java虛擬機(jī)啟動后,只能加載一次Class文件。

      本申請Java程序注入故障的方法一實施例中,包括如圖1所示的JVMTI交互模型。

      如圖1所示,包括客戶端、總控端和目標(biāo)Java進(jìn)程。其中,目標(biāo)Java進(jìn)程可以包括代理(Agent)、JVM工具接口(JVM(Java虛擬機(jī))Tool Interface,JVMTI)、Java程序(Java Application)。

      JVMTI可以與Java程序共同運行在同一Java虛擬機(jī)中,JVMTI負(fù)責(zé)監(jiān)聽維護(hù)Java程序。當(dāng)其它程序需要與JVMTI進(jìn)行通信時,可以創(chuàng)建JVMTI代理, 即Agent。創(chuàng)建的Agent與目標(biāo)Java虛擬機(jī)可以在同一進(jìn)程上執(zhí)行,Agent可以作為JVMTI與外界交互的媒介。

      客戶端是用戶交互的接口,用戶所有的操作行為可以在客戶端完成。用戶通過客戶端編輯故障注入代碼后,還可以通過客戶端將故障代碼上傳至總控端。

      總控端可以與客戶端進(jìn)行通信,將來自客戶端的指令信息進(jìn)行解析,得到故障代碼中的參數(shù)。另一方面,總控端可以監(jiān)控Java進(jìn)程的執(zhí)行狀態(tài),并可以與Agent進(jìn)行交互,進(jìn)而可以向Java進(jìn)程中的JVMTI發(fā)送控制信息。具體的,Java虛擬機(jī)啟動后完成對Class文件的加載后,總控端可以從Java虛擬機(jī)中取回加載的Class文件,然后對Class文件進(jìn)行修改,修改后將其回傳至Java虛擬機(jī),并替換原始Class文件。在該過程中,一方面,總控端可以與客戶端進(jìn)行通信,將來自客戶端的指令信息進(jìn)行解析,得到故障代碼。另一方面,總控端可以取回Java虛擬機(jī)啟動后加載的Class文件。進(jìn)而,總控端可以根據(jù)故障代碼對取回的Class文件進(jìn)行編輯,生成編輯后的Class文件。生成編輯后的Class文件之后,總控端可以將該編輯后的Class文件上傳至Java虛擬機(jī),以替換原始Class文件。

      圖2示出了本申請Java程序注入故障的一方法實施例,如圖2所示,包括:

      S210:客戶端接收輸入的故障代碼,并將所述故障代碼傳送至總控端。

      如前所述,客戶端是用戶交互的接口,用戶所有的操作行為可以在客戶端完成。具體的,客戶端可以包括操作控制臺和及通信模塊。其中,所述操作控制臺可以作為用戶提交故障代碼的交互接口,接收用戶下達(dá)的操作指令。所述通信模塊可以將故障代碼上傳至總控端。

      所述操作控制臺可以包括腳本編輯器。所述腳本編輯器可以為用戶提供故障注入腳本的編輯功能,輔助用戶以編輯故障注入腳本的方式編輯故障代碼。具體的,所述腳本編輯器可以提供修改Class名稱、方法名稱以及操作行為的操作;這樣,用戶可以利用所述腳本編輯器將欲修改的Class名稱、方法名稱以及操作行為制作為注入腳本。

      所述客戶端還可以包括腳本校驗?zāi)K,用于驗證用戶編輯的腳本是否符合規(guī)范。

      所述總控端可以采用Socket方式與所述客戶端進(jìn)行通信,將來自所述客戶端的指令信息進(jìn)行解析,得到所述故障代碼。采用Socket編程技術(shù),在總控端開啟監(jiān)聽端口,可以實現(xiàn)多次修改同一正在運行的Java虛擬機(jī)的Class文件。這樣,當(dāng)有新的故障注入請求時,客戶端通過Socket連接的方式將故障注入腳本發(fā)送至總控端,總控端可以解析來自客戶端所提交的故障注入腳本。

      S220:Java虛擬機(jī)啟動并加載原始Class文件。

      本步驟與現(xiàn)有技術(shù)類似,不再贅述。

      需要說明的是,S220與S210不存在嚴(yán)格的先后順序,S220可以在S210之前或之后執(zhí)行,當(dāng)然S220也可以與S210并行執(zhí)行。

      S230:所述總控端監(jiān)控所述Java虛擬機(jī)所在Java進(jìn)程的運行情況,取回所述Java虛擬機(jī)加載的原始Class文件。

      如前所述,Java進(jìn)程可以包括代理和Java虛擬機(jī)。換句話說,所述Agent可以與所述Java虛擬機(jī)在同一進(jìn)程上執(zhí)行。JVMTI與Java程序可以共同運行在所述Java虛擬機(jī)中。所述JVMTI可以監(jiān)聽維護(hù)所述Java程序。所述Agent可以作為JVMTI與外界交互的媒介。JVMTI相關(guān)的接口調(diào)用信息可以傳送至所述Agent。

      總控端可以設(shè)計為伺服進(jìn)程,監(jiān)控所述Java進(jìn)程的執(zhí)行狀態(tài),并與所述Agent進(jìn)行交互。通過所述Agent,總控端可以發(fā)出與所述JVMTI相關(guān)的控制信息。

      具體的,本步驟中,所述總控端可以通過JVMTI監(jiān)控所述Java虛擬機(jī)的的運行情況,并在監(jiān)控到所述Java虛擬機(jī)加載原始Class文件后,取回所述原始Class文件。進(jìn)一步的,所述總控端可以包括字節(jié)碼取回模塊,通過該模塊,可以取回所述Java虛擬機(jī)加載的原始Class文件。更具體的,本申請中可以定義一個抽象類Transformer,該類可以實現(xiàn)ClassFileTransformer接口,其 Transform方法給出了Class字節(jié)碼的編輯過程。在Transform方法中,使用字節(jié)碼取回模塊取回所述Class文件。通過使用ClassPool類的get方法,可以獲取指定類名所對應(yīng)的字節(jié)碼文件,并返回該字節(jié)碼文件的類別類的CtClass類型的引用。CtClass類提供了修改class名稱、增加成員變量、增加實例方法、獲取指定方法等一系列接口。

      S240:所述總控端根據(jù)所述故障代碼編輯所述取回的原始Class文件,生成編輯后的Class文件。

      所述總控端可以根據(jù)S210中接收的故障代碼編輯所述取回的原始Class文件。具體的,所述總控端可以包括字節(jié)碼編輯模塊,通過調(diào)用Javassit軟件來實現(xiàn)對所述原始Class文件的編輯。Javassist是一個開源的分析、編輯和創(chuàng)建Java字節(jié)碼的類庫,是由東京工業(yè)大學(xué)的數(shù)學(xué)和計算機(jī)科學(xué)系的ShigeruChiba(千葉滋)創(chuàng)建。它已加入了開放源代碼JBoss應(yīng)用服務(wù)器項目,通過使用Javassist對字節(jié)碼操作為JBoss實現(xiàn)動態(tài)"AOP"框架。

      關(guān)于Java字節(jié)碼的處理,目前還含有一些其他類似工具,如BCEL,ASM。例如,Javassist與ASM特點對比如下:

      1、javassist基于源碼級別的API,比基于字節(jié)碼的ASM簡單;

      2、基于javassist開發(fā),不需要了解字節(jié)碼的一些知識,而且其封裝的一些工具類可以簡單實現(xiàn)一些高級功能,如HotSwaper。

      3、ASM比javassist性能更快,靈活行也更高。

      根據(jù)接收的故障代碼對原始Class文件進(jìn)行編輯,可以得到編輯后的Class文件。所述編輯后的Class文件已經(jīng)具有了注入的故障代碼。

      更具體的,根據(jù)上述S230中定義的抽象類Transformer,在需要對該類的某個方法進(jìn)行修改時,可以調(diào)用getMethod方法獲得CtMethod類對應(yīng)的實例method。CtMethod類提供了一系列修改方法的功能,如在指定行插入代碼、在方法執(zhí)行前插入代碼、增加異常處理信息、添加局部變量、重置方法體等。當(dāng)編輯完Class文件對應(yīng)的字節(jié)碼后,調(diào)用CtClass類的toBytecode方法重新生 成該類的字節(jié)碼文件,即可以完成字節(jié)碼的修改工作。

      Instrumentation接口是java.lang.instrumentation包的核心部分,該接口給出了類的轉(zhuǎn)換與操作等方法。addTransformer方法可以注冊ClassFileTransformer,而redefineClasses方法則可以重新定義Class??偪囟丝梢员4鍵nstrumentation接口的引用,這樣,當(dāng)有新的需要修改的Class時,需要重新實例化該類對應(yīng)的Transformer子類,并注冊該Transformer,隨之調(diào)用retransformClasses方法。

      Agent可以設(shè)置一個靜態(tài)方法:agentmain方法。將這一個靜態(tài)方法打成Jar包,并在MANIFEST.MF中將Agent-Class的值設(shè)置為Agent類名,并將Can-Redefine-Classes以及Can-Retransform-Classes的值設(shè)置為true。在程序執(zhí)行過程中修改Class字節(jié)碼文件,需要將Agent attach到指定Java進(jìn)程中。需要通過調(diào)用VirtualMachine類的attache方法,并返回進(jìn)程對應(yīng)Java虛擬機(jī)VirtualMachine類的實例對象,隨之調(diào)用該實例對象的loadAgent方法完成Agent的attach任務(wù)。當(dāng)attach成功后,Java虛擬機(jī)會調(diào)用對應(yīng)agentmain方法,達(dá)到在程序執(zhí)行過程中修改Java虛擬機(jī)字節(jié)碼的目的。

      S250:總控端將所述編輯后的Class文件上傳至所述Java虛擬機(jī)以替換所述原始Class文件。

      本步驟中,具體的,總控端可以調(diào)用Java進(jìn)程中的Agent,將編輯后的Class文件通過Agent上傳至Java虛擬機(jī),這樣,原始的Class文件可以被替換為編輯后的Class文件。

      進(jìn)一步的,JVMTI通信模塊中可以引用Transform類,總控端使用該引用,通過Agent與Java虛擬機(jī)中的JVMTI進(jìn)行通信,可以將字節(jié)碼編輯模塊生成的Class文件上傳至Java虛擬機(jī)。

      S260:所述Java虛擬機(jī)解釋執(zhí)行所述編輯后的Class文件。

      編輯后的所述Class文件,包含了注入的故障代碼,從而在所述Java虛擬機(jī)解釋執(zhí)行所述編輯后的Class文件,可以完成故障注入,進(jìn)而可以實現(xiàn)評測試待驗證程序的容錯性能以及穩(wěn)定性或可靠性。

      上述步驟執(zhí)行之后,本申請實施例還可以包括:

      S270:所述總控端將故障結(jié)果數(shù)據(jù)回傳至所述客戶端。

      故障注入完成后,所述總控端可以將故障結(jié)果數(shù)據(jù)回傳至所述客戶端,以提示用戶。具體的,總控端可以定義一個數(shù)據(jù)傳輸類TransferProtocol,該傳輸類可以由目標(biāo)類名(targetClass)、目標(biāo)方法(targetMethod)、插入腳本(codes)、故障類型(faultType)、故障結(jié)果(faultResult)等組成。

      并且,本申請通過在Java虛擬機(jī)啟動后,監(jiān)控所述Java虛擬機(jī)運行情況并取回所述加載的原始Class文件,通過編輯生成編輯后的Class文件以替換所述原始Class文件,可以實現(xiàn)Java虛擬機(jī)啟動后不需要重新啟動Java虛擬機(jī)的請情況下注入指定類型的故障,并可以保持報錯時的上下文數(shù)據(jù)。

      進(jìn)一步地,使用本申請上述實施例,可以在Java程序字節(jié)碼指定位置插入代碼段、調(diào)整控制語句執(zhí)行邏輯、修改方法參數(shù)、迫使方法提前返回、拋出異常。

      另外,現(xiàn)有技術(shù)中針對Java程序的一種故障注入工具,需要預(yù)先收集相應(yīng)的故障信息,建立相應(yīng)的故障庫,從而在對class文件進(jìn)行掃描匹配后,注入相應(yīng)的故障代碼,啟動Java虛擬機(jī)執(zhí)行相應(yīng)的字節(jié)碼文件?,F(xiàn)有技術(shù)需要預(yù)先掃描Java文件,無法滿足向字節(jié)碼文件中注入任意故障代碼的目的。該工具無法達(dá)到向正在運行中的Java虛擬機(jī)注入故障的目的。相對于上述現(xiàn)有技術(shù),由于本申請不需要建立故障庫,可以向字節(jié)碼文件中注入任意故障代碼。

      本申請實施例提供還提供一種系統(tǒng),可以實現(xiàn)上述的方法步驟,且該系統(tǒng)可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為邏輯意義上的系統(tǒng),是通過服務(wù)器的CPU(Central Process Unit,中央處理器)將對應(yīng)的計算機(jī)程序指令讀取到內(nèi)存中運行形成的。

      具體的,本申請一種Java程序注入故障的系統(tǒng),可以如圖3所示,包括:

      客戶端31,用于接收輸入的故障代碼,并將所述故障代碼傳送至總控端;

      總控端32,用于監(jiān)控所述Java虛擬機(jī)所在Java進(jìn)程的運行情況,取回所述Java虛擬機(jī)加載的原始Class文件;根據(jù)所述故障代碼編輯所述取回的原始Class文件,生成編輯后的Class文件;將所述編輯后的Class文件上傳至所述Java虛擬機(jī)以替換所述原始Class文件;

      Java虛擬機(jī)33,啟動后用于加載原始Class文件,并用于解釋執(zhí)行所述編輯后的Class文件。

      在一個實施例中,優(yōu)選的,所述客戶端可以包括操作控制臺和及通信模塊,其中:

      所述操作控制臺作為用戶提交故障代碼的交互接口,接收用戶下達(dá)的操作指令;

      所述通信模塊將故障代碼上傳至總控端。

      在一個實施例中,優(yōu)選的,所述總控端可以采用Socket方式與所述客戶端進(jìn)行通信。

      在一個實施例中,優(yōu)選的,所述客戶端還可以包括腳本校驗?zāi)K,用于驗證用戶編輯的腳本是否符合規(guī)范。

      在一個實施例中,優(yōu)選的,所述總控端可以通過JVMTI監(jiān)控所述Java虛擬機(jī)的的運行情況,并在監(jiān)控到所述Java虛擬機(jī)加載原始Class文件后,取回所述原始Class文件。

      在一個實施例中,優(yōu)選的,所述總控端設(shè)計為伺服進(jìn)程。

      在一個實施例中,優(yōu)選的,所述總控端通過調(diào)用下面任一軟件來實現(xiàn)對所述原始Class文件的編輯:

      Javassit,BCEL,ASM。

      在一個實施例中,優(yōu)選的,所述總控端通過調(diào)用Java進(jìn)程中的Agent,將編輯后的Class文件通過Agent上傳至Java虛擬機(jī),以替換所述原始Class文件。

      在一個實施例中,優(yōu)選的,所述總控端還可以包括回傳模塊,用于將故障 結(jié)果數(shù)據(jù)回傳至所述客戶端。

      在20世紀(jì)90年代,對于一個技術(shù)的改進(jìn)可以很明顯地區(qū)分是硬件上的改進(jìn)(例如,對二極管、晶體管、開關(guān)等電路結(jié)構(gòu)的改進(jìn))還是軟件上的改進(jìn)(對于方法流程的改進(jìn))。然而,隨著技術(shù)的發(fā)展,當(dāng)今的很多方法流程的改進(jìn)已經(jīng)可以視為硬件電路結(jié)構(gòu)的直接改進(jìn)。設(shè)計人員幾乎都通過將改進(jìn)的方法流程編程到硬件電路中來得到相應(yīng)的硬件電路結(jié)構(gòu)。因此,不能說一個方法流程的改進(jìn)就不能用硬件實體模塊來實現(xiàn)。例如,可編程邏輯器件(Programmable Logic Device,PLD)(例如現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA))就是這樣一種集成電路,其邏輯功能由用戶對器件編程來確定。由設(shè)計人員自行編程來把一個數(shù)字系統(tǒng)“集成”在一片PLD上,而不需要請芯片制造廠商來設(shè)計和制作專用的集成電路芯片。而且,如今,取代手工地制作集成電路芯片,這種編程也多半改用“邏輯編譯器(logic compiler)”軟件來實現(xiàn),它與程序開發(fā)撰寫時所用的軟件編譯器相類似,而要編譯之前的原始代碼也得用特定的編程語言來撰寫,此稱之為硬件描述語言(Hardware Description Language,HDL),而HDL也并非僅有一種,而是有許多種,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware Description Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)與Verilog。本領(lǐng)域技術(shù)人員也應(yīng)該清楚,只需要將方法流程用上述幾種硬件描述語言稍作邏輯編程并編程到集成電路中,就可以很容易得到實現(xiàn)該邏輯方法流程的硬件電路。

      控制器可以按任何適當(dāng)?shù)姆绞綄崿F(xiàn),例如,控制器可以采取例如微處理器或處理器以及存儲可由該(微)處理器執(zhí)行的計算機(jī)可讀程序代碼(例如軟件 或固件)的計算機(jī)可讀介質(zhì)、邏輯門、開關(guān)、專用集成電路(Application SpecificIntegrated Circuit,ASIC)、可編程邏輯控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、MicrochipPIC18F26K20以及Silicone Labs C8051F320,存儲器控制器還可以被實現(xiàn)為存儲器的控制邏輯的一部分。本領(lǐng)域技術(shù)人員也知道,除了以純計算機(jī)可讀程序代碼方式實現(xiàn)控制器以外,完全可以通過將方法步驟進(jìn)行邏輯編程來使得控制器以邏輯門、開關(guān)、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實現(xiàn)相同功能。因此這種控制器可以被認(rèn)為是一種硬件部件,而對其內(nèi)包括的用于實現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔粒梢詫⒂糜趯崿F(xiàn)各種功能的裝置視為既可以是實現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。

      上述實施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計算機(jī)芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。

      為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當(dāng)然,在實施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。

      本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。

      本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一 個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

      這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

      這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

      在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。

      內(nèi)存可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機(jī)可讀介質(zhì)的示例。

      計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、動態(tài)隨機(jī)存取存儲器(DRAM)、其他類型的隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。

      還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括 那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。

      本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。

      本申請可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。

      本說明書中的各個實施例均采用遞進(jìn)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。

      以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1