一種流程定義的獲取方法及裝置制造方法
【專利摘要】本申請(qǐng)公開了一種流程定義的獲取方法及裝置,預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,所述方法包括獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值;在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。本申請(qǐng)實(shí)施例通過預(yù)先將預(yù)設(shè)數(shù)量值的流程定義置于具有高速讀寫功能的內(nèi)存中,進(jìn)而在業(yè)務(wù)流程需要獲取流程定義時(shí),首先在內(nèi)存中對(duì)所需的流程定義進(jìn)行查詢獲取,無需頻繁對(duì)數(shù)據(jù)庫中進(jìn)行查詢?cè)L問,提高流程定義的獲取效率及業(yè)務(wù)流程的運(yùn)行速率。
【專利說明】一種流程定義的獲取方法及裝置
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)應(yīng)用【技術(shù)領(lǐng)域】,特別涉及一種流程定義的獲取方法及裝置。
【背景技術(shù)】
[0002]工作流是指工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括、描述。而流程定義,也稱為流程模板,描述一個(gè)完整的業(yè)務(wù)過程,它由若干活動(dòng)組成,包括了流程的基本信息、流程的開始條件和結(jié)束條件、組成的活動(dòng)、活動(dòng)間流轉(zhuǎn)的規(guī)則、需要用戶執(zhí)行的工作任務(wù)(工作項(xiàng))、可能調(diào)用的應(yīng)用程序以及流程相關(guān)數(shù)據(jù)等信息。
[0003]其中,每個(gè)流程定義均可以有多個(gè)版本,而這多個(gè)版本之間使用一個(gè)唯一的字符串進(jìn)行標(biāo)示,同一標(biāo)識(shí)的流程定義可以對(duì)應(yīng)多個(gè)不同的流程定義編號(hào)ID,每個(gè)編號(hào)ID表明該流程定義的版本。
[0004]在業(yè)務(wù)流程的生命周期中,幾乎業(yè)務(wù)流程運(yùn)行的每一步都需要訪問流程實(shí)例對(duì)應(yīng)的流程定義。不論是流程圖的展示、任務(wù)和活動(dòng)的創(chuàng)建、任務(wù)的接收和提交、活動(dòng)跳轉(zhuǎn)、流程是否結(jié)束的判斷都需要根據(jù)流程定義進(jìn)行判斷或展示,因此,流程定義獲取的效率決定工作流產(chǎn)品的質(zhì)量。
[0005]目前的流程定義的獲取通常是通過動(dòng)態(tài)加載的方式進(jìn)行獲取,即為,每次均從流程定義存儲(chǔ)的數(shù)據(jù)庫中獲取相應(yīng)的流程定義,但這種方案在每次獲取流程定義時(shí)均需要查詢數(shù)據(jù)庫,由此導(dǎo)致流程定義的獲取效率較低。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)所要解決的技術(shù)問題是提供一種流程定義的獲取方法及裝置,用以解決現(xiàn)有技術(shù)中獲取流程定義時(shí)需要頻繁查詢數(shù)據(jù)庫,導(dǎo)致流程定義的獲取效率較低的技術(shù)問題。
[0007]本申請(qǐng)?zhí)峁┝艘环N流程定義的獲取方法,預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,所述方法包括:
[0008]獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值;
[0009]在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0010]上述方法,優(yōu)選的,所述在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,包括:
[0011]依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序;
[0012]將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
[0013]上述方法,優(yōu)選的,若在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,所述方法還包括:
[0014]在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值;
[0015]提取所述數(shù)據(jù)庫中與查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0016]上述方法,優(yōu)選的,在所述提取所述數(shù)據(jù)庫中與所述查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義的流程定義對(duì)象之后,所述方法還包括:
[0017]依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存;
[0018]其中,所述依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存,具體包括:
[0019]判斷所述內(nèi)存是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,否則,刪除所述內(nèi)存中被訪問率值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中。
[0020]上述方法,優(yōu)選的,在所述在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中之后,所述方法還包括:
[0021 ] 獲取待更新流程定義對(duì)象及其關(guān)鍵值;
[0022]將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中;
[0023]判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象,否則,依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0024]本申請(qǐng)還提供了一種流程定義的獲取裝置,所述裝置包括:
[0025]對(duì)象預(yù)存單元,用于預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中;
[0026]指令獲取單元,用于獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值;
[0027]第一查詢單元,用于在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,觸發(fā)第一對(duì)象提取單元;
[0028]第一對(duì)象提取單元,用于在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0029]上述裝置,優(yōu)選的,所述對(duì)象預(yù)存單元包括:
[0030]對(duì)象排序子單元,用于依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序;
[0031]對(duì)象預(yù)置子單元,用于將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
[0032]上述裝置,優(yōu)選的,還包括:
[0033]第二查詢單元,用于在所述第一查詢單元在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值時(shí),在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值;
[0034]第二對(duì)象提取單元,用于提取所述數(shù)據(jù)庫中與查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0035]上述裝置,優(yōu)選的,還包括:
[0036]第一內(nèi)存更新單元,用于在所述第二對(duì)象提取單元提取到所述數(shù)據(jù)庫中與所述查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義的流程定義對(duì)象之后,依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存;
[0037]其中,所述第一內(nèi)存更新單元包括:
[0038]空間判斷子單元,用于判斷所述內(nèi)存中是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,觸發(fā)對(duì)象存儲(chǔ)子單元,否則,觸發(fā)對(duì)象刪除子單元;
[0039]對(duì)象存儲(chǔ)子單元,用于將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中;
[0040]對(duì)象刪除子單元,用于刪除所述內(nèi)存中被訪問值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,觸發(fā)所述對(duì)象存儲(chǔ)子單元。
[0041]上述裝置,優(yōu)選的,還包括:
[0042]更新對(duì)象獲取單元,用于獲取待更新流程定義對(duì)象及其關(guān)鍵值;
[0043]數(shù)據(jù)庫寫入單元,用于將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中;
[0044]內(nèi)存存儲(chǔ)判定單元,用于判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,觸發(fā)對(duì)象更新單元,否則,觸發(fā)第二內(nèi)存更新單元;
[0045]對(duì)象更新單元,用于將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象;
[0046]第二內(nèi)存更新單元,用于依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0047]由上述方案可知,本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法及裝置,通過預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,在業(yè)務(wù)流程運(yùn)行過程中需要進(jìn)行流程定義獲取時(shí),對(duì)業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令進(jìn)行獲取,而所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值,之后在所述內(nèi)存中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,由此在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象,實(shí)現(xiàn)本申請(qǐng)目的。本申請(qǐng)通過預(yù)先將預(yù)設(shè)數(shù)量值的流程定義置于具有高速讀寫功能的內(nèi)存中,進(jìn)而在業(yè)務(wù)流程需要獲取流程定義時(shí),首先在內(nèi)存中對(duì)所需的流程定義進(jìn)行查詢獲取,無需頻繁對(duì)數(shù)據(jù)庫中進(jìn)行查詢?cè)L問,提高流程定義的獲取效率及業(yè)務(wù)流程的運(yùn)行速率。
【專利附圖】
【附圖說明】
[0048]為了更清楚地說明本申請(qǐng)實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0049]圖1為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例一的流程圖;
[0050]圖2為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例二的部分流程圖;[0051]圖3為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例三的流程圖;
[0052]圖4為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例四的流程圖;
[0053]圖5為本申請(qǐng)實(shí)施例四的部分流程圖;
[0054]圖6為本申請(qǐng)實(shí)施例四的另一流程圖;
[0055]圖7為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例五的部分流程圖;
[0056]圖8為本申請(qǐng)實(shí)施例五的流程圖;
[0057]圖9為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例六的結(jié)構(gòu)示意圖;
[0058]圖10為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例七的部分結(jié)構(gòu)示意圖;
[0059]圖11為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例八的結(jié)構(gòu)示意圖;
[0060]圖12為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例九的結(jié)構(gòu)示意圖;
[0061]圖13為本申請(qǐng)實(shí)施例九的部分結(jié)構(gòu)示意圖;
[0062]圖14為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例十的部分結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】
[0063]下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
[0064]參考圖1,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例一的流程圖,本申請(qǐng)實(shí)施例在處理流程定義的獲取之前,在工作流引擎的啟動(dòng)完成時(shí),本申請(qǐng)實(shí)施例首先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,其中,所述預(yù)設(shè)數(shù)量值可以由用戶進(jìn)行自行設(shè)定,例如,cache.capacity=1000,即為將所述數(shù)量值設(shè)置為1000。
[0065]需要說明的是,所述預(yù)設(shè)的內(nèi)存為具有高速讀寫性能的設(shè)備,在本申請(qǐng)實(shí)施例中,所述內(nèi)存采用OSCache的方式存儲(chǔ)流程定義對(duì)象及其關(guān)鍵值,其中,所述OSCache由OpenSymphony設(shè)計(jì)。Oscache是一個(gè)被廣泛采用的高性能的J2EE緩存框架,oscache還能應(yīng)用于任何java應(yīng)用程序的普通緩沖解決方案。
[0066]在本申請(qǐng)實(shí)施例中,OSCache可以以map的形式實(shí)現(xiàn),即key值及對(duì)應(yīng)的value值,對(duì)應(yīng)的,在本申請(qǐng)實(shí)施例中即前文中所述的內(nèi)存中存儲(chǔ)關(guān)鍵值及其對(duì)應(yīng)流程定義對(duì)象值。
[0067]需要說明的是,所述關(guān)鍵值可以為流程定義的版本編號(hào)信息ID值,其value值即為該ID對(duì)應(yīng)的流程定義對(duì)象;所述關(guān)鍵值也可以為流程定義的標(biāo)識(shí)信息,其value值即為該標(biāo)識(shí)信息對(duì)應(yīng)的最新版本的流程定義對(duì)象。
[0068]所述方法可以包括以下步驟:
[0069]步驟101:獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令。
[0070]其中,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值。
[0071]需要說明的是,所述待獲取關(guān)鍵值的性質(zhì)與所述內(nèi)存中存儲(chǔ)的關(guān)鍵值的類型相一致,即若所述內(nèi)存中的所述關(guān)鍵值以編號(hào)信息ID值的形式存儲(chǔ),那么所述待獲取關(guān)鍵值即為所述業(yè)務(wù)流程所需的流程定義對(duì)象所對(duì)應(yīng)的編號(hào)信息ID值;若所述內(nèi)存中的所述關(guān)鍵值以所述標(biāo)識(shí)信息的形式存儲(chǔ),那么所述待獲取關(guān)鍵值即為所述業(yè)務(wù)流程所需的流程定義對(duì)象所對(duì)應(yīng)的標(biāo)識(shí)信息。
[0072]步驟102:在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,執(zhí)行步驟103。
[0073]其中,所述步驟102中的查詢方式可以通過二叉樹的查詢方式或遍歷的方式實(shí)現(xiàn)。
[0074]步驟103:在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0075]由上述方案可知,本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例一,通過預(yù)先將預(yù)設(shè)數(shù)量值的流程定義置于具有高速讀寫功能的內(nèi)存中,進(jìn)而在業(yè)務(wù)流程需要獲取流程定義時(shí),首先在內(nèi)存中對(duì)所需的流程定義進(jìn)行查詢獲取,無需頻繁對(duì)數(shù)據(jù)庫中進(jìn)行查詢?cè)L問,提高流程定義的獲取效率及業(yè)務(wù)流程的運(yùn)行速率。
[0076]同時(shí),相對(duì)于現(xiàn)有技術(shù)中,在業(yè)務(wù)流程引擎啟動(dòng)時(shí)將所有流程定義均加載到內(nèi)存中,導(dǎo)致內(nèi)存占用較多,出現(xiàn)物理內(nèi)存不足無法正常運(yùn)行業(yè)務(wù)流程的情況,本申請(qǐng)實(shí)施例只需將部分流程定義加載置于內(nèi)存中,既提高流程處理的效率,同時(shí)不受物理內(nèi)存的限值。
[0077]為了保證當(dāng)前業(yè)務(wù)流程中所獲取到的流程定義對(duì)象為版本最新,由此保證獲取到的流程定義對(duì)象的時(shí)間有效性,本申請(qǐng)中可以在將預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中時(shí),可以通過將所述數(shù)據(jù)庫中預(yù)設(shè)數(shù)量值的最新更新的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中。
[0078]由此,參考圖2,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例二的部分流程圖,本申請(qǐng)實(shí)施例在實(shí)現(xiàn)預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中時(shí),可以通過以下步驟實(shí)現(xiàn):
[0079]步驟201:依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序。
[0080]其中,所述被更新時(shí)間是指,流程定義對(duì)象本身在數(shù)據(jù)庫中的被更新的時(shí)間,該被更新時(shí)間對(duì)應(yīng)的字段是記錄在所述數(shù)據(jù)庫中的,并非該流程定義對(duì)象的被訪問時(shí)間,該流程定義對(duì)象的被訪問時(shí)間可以不被記錄。
[0081]需要說明的是,所述步驟201的執(zhí)行結(jié)果即為:所述數(shù)據(jù)庫中的每個(gè)流程定義對(duì)象以其各自的被更新時(shí)間依次排列,被更新時(shí)間值最大即最晚被更新或者可以理解為距離上次被更新時(shí)間最短的流程定義對(duì)象排序在最前,依次為被更新時(shí)間距離當(dāng)前時(shí)間愈遠(yuǎn)的流程定義對(duì)象,最后被更新時(shí)間最前即最早被更新或者可以理解為距離上次被更新的時(shí)間最長的流程定義對(duì)象排序在最后。
[0082]步驟202:將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
[0083]其中,由所述步驟201中可知,所述數(shù)據(jù)庫中的流程定義對(duì)象及其關(guān)鍵值以其各自的被更新時(shí)間值的大小順序被排序,進(jìn)而在所述步驟202中,選取前預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中。
[0084]由上述方案中可知,本申請(qǐng)實(shí)施例通過將所述數(shù)據(jù)庫中預(yù)設(shè)數(shù)量值的最新更新的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中,從而后續(xù)以高效率獲取到的內(nèi)存中的流程定義具有時(shí)間有效性,保證業(yè)務(wù)流程運(yùn)行的準(zhǔn)確性。[0085]參考圖3,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例三的流程圖,其中,在所述步驟102中在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值時(shí),所述方法還可以包括以下步驟:
[0086]步驟104:在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值。
[0087]其中,所述步驟102中在所述內(nèi)存中未查詢到所述第一目標(biāo)關(guān)鍵值時(shí),表明所述內(nèi)存中并未預(yù)先存儲(chǔ)與所述待獲取關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象,此時(shí),為保證所述業(yè)務(wù)流程的正常運(yùn)行,可以以動(dòng)態(tài)加載的方式顯示流程定義的獲取,即為在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0088]步驟105:提取所述數(shù)據(jù)庫中與查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0089]由上述方案中可知,本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例三中,在預(yù)設(shè)的內(nèi)存中未查詢到業(yè)務(wù)流程所需的流程定義對(duì)象時(shí),可以在數(shù)據(jù)庫中直接進(jìn)行獲取,保證業(yè)務(wù)流程的正常運(yùn)行。
[0090]需要說明的是,在內(nèi)存中為查詢到所需的流程定義對(duì)象并在數(shù)據(jù)庫中獲取到所述業(yè)務(wù)流程所需的流程定義對(duì)象時(shí),表明該流程定義對(duì)象為所述數(shù)據(jù)庫中最新被更新的流程定義,此時(shí)需要對(duì)所述內(nèi)存的存儲(chǔ)內(nèi)容進(jìn)行更新,參考圖4,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例四的流程圖,在所述步驟105之后,所述方法還可以包括以下步驟:
[0091]步驟106:依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0092]其中,在實(shí)際實(shí)現(xiàn)中,所述內(nèi)存更新規(guī)則可以為先進(jìn)先出更新規(guī)則,即在所述內(nèi)存中空間不足時(shí),將第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象代替所述內(nèi)存中最先被置入的流程定義;另外,所述內(nèi)存更新規(guī)則也可以為LRU (Lease Recently Used,最近最少使用算法)更新規(guī)則,即在所述內(nèi)存空間不足時(shí),將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象代替所述內(nèi)存中被訪問率最低的流程定義,此時(shí),參考圖5,為所述步驟106的流程圖,所述步驟106可以通過以下步驟實(shí)現(xiàn):
[0093]步驟601:判斷所述內(nèi)存是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,執(zhí)行步驟602,否則,執(zhí)行步驟603。
[0094]步驟602:將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中。
[0095]步驟603:刪除所述內(nèi)存中被訪問率值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,執(zhí)行所述步驟602。
[0096]其中,所述內(nèi)存中被訪問率值最小即為被訪問率最低,可以理解為所述內(nèi)存中最近最少被訪問。所述步驟601是指,判斷所述內(nèi)存中是否有足夠的剩余存儲(chǔ)空間足以存儲(chǔ)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,在所述內(nèi)存的存儲(chǔ)空間充裕時(shí),直接執(zhí)行所述步驟602,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,而在所述內(nèi)存中空間不足時(shí),需要首先將所述內(nèi)存中被訪問率最低即最少被訪問的流程定義對(duì)象及其關(guān)鍵值進(jìn)行刪除,進(jìn)而再執(zhí)行所述步驟602,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,實(shí)現(xiàn)本申請(qǐng)實(shí)施例中對(duì)所述內(nèi)存的更新。如圖6中所示,所述業(yè)務(wù)流程在需要訪問流程定義時(shí),首先待獲取的流程定義是否在內(nèi)存中即為所述步驟102的實(shí)現(xiàn)過程,而在所述內(nèi)存中含有所述待獲取流程定義時(shí),直接獲取該流程定義并返回,結(jié)束當(dāng)前流程定義獲?。辉趦?nèi)存中并未查詢到所述待獲取流程定義時(shí),在數(shù)據(jù)庫中查詢并獲取該待獲取流程定義即為所述步驟104及所述步驟105,之后,通過LRU規(guī)則策略,將該流程定義更新至內(nèi)存中即為所述步驟106,結(jié)束當(dāng)前流程定義獲取。
[0097]需要說明的是,在所述數(shù)據(jù)庫中加入新的流程定義時(shí),需要同時(shí)對(duì)內(nèi)存中的流程定義進(jìn)行更新,此時(shí),參考圖7,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取方法實(shí)施例五的部分流程圖,在所述在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中之后,所述方法還可以包括以下步驟:
[0098]步驟107:獲取待更新流程定義對(duì)象及其關(guān)鍵值。
[0099]其中,所述待更新流程定義對(duì)象及其關(guān)鍵值即為需要加入數(shù)據(jù)庫及內(nèi)存中的新的流程定義。
[0100]步驟108:將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中。
[0101]步驟109:判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,執(zhí)行步驟110,否則,執(zhí)行步驟111。
[0102]其中,所述步驟109是指,在所述內(nèi)存中查詢是否含有與該新的流程定義同一標(biāo)識(shí)而不同版本編號(hào)ID值的目標(biāo)流程定義。
[0103]步驟110:將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象。
[0104]其中,所述步驟110即為,在所述內(nèi)存中,將新版本的流程定義代替舊版本的流程定義。
[0105]步驟111:依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0106]其中,所述內(nèi)存更新規(guī)則可以與前文實(shí)施例四中的LRU更新規(guī)則相同,即在所述內(nèi)存空間不足時(shí),將所述待更新流程定義代替所述內(nèi)存中最近最少被訪問的流程定義,所述步驟111可以通過以下方式實(shí)現(xiàn):
[0107]判斷所述內(nèi)存的存儲(chǔ)空間是否足夠存儲(chǔ)所述待更新流程定義對(duì)象及其關(guān)鍵值,如果是,將所述待更新流程定義對(duì)象及其關(guān)鍵值存儲(chǔ)至所述內(nèi)存中,否則,刪除所述內(nèi)存中被訪問率值最小的流程定義對(duì)象及其關(guān)鍵值,再將所述待更新流程定義對(duì)象及其關(guān)鍵值存儲(chǔ)至所述內(nèi)存中。
[0108]如圖8中的流程示意圖所示,在所述數(shù)據(jù)中導(dǎo)入新流程定義時(shí),首先將新的流程定義置于所述數(shù)據(jù)庫中即為所述步驟107及所述步驟108,其次,判定該新的流程定義是否有同一標(biāo)識(shí)信息的流程定義存儲(chǔ)在內(nèi)存中,如果是即可更新該標(biāo)識(shí)信息對(duì)應(yīng)的流程定義即為所述步驟109及所述步驟110,否則,根據(jù)LRU策略規(guī)則將該新的流程定義更新至內(nèi)存中替換舊的流程定義即為所述步驟111。
[0109]參考圖9,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例六的結(jié)構(gòu)示意圖,所述裝置可以包括:
[0110]對(duì)象預(yù)存單元901,用于預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
[0111]其中,本申請(qǐng)實(shí)施例在處理流程定義的獲取之前,在工作流引擎的啟動(dòng)完成時(shí),本申請(qǐng)實(shí)施例通過對(duì)象預(yù)存單元901首先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,其中,所述預(yù)設(shè)數(shù)量值可以由用戶進(jìn)行自行設(shè)定,例如,cache.capacity=1000,即為將所述數(shù)量值設(shè)置為1000。
[0112]需要說明的是,所述預(yù)設(shè)的內(nèi)存為具有高速讀寫性能的設(shè)備,在本申請(qǐng)實(shí)施例中,所述內(nèi)存采用OSCache的方式存儲(chǔ)流程定義對(duì)象及其關(guān)鍵值,其中,所述OSCache由OpenSymphony設(shè)計(jì)。Oscache是一個(gè)被廣泛采用的高性能的J2EE緩存框架,oscache還能應(yīng)用于任何java應(yīng)用程序的普通緩沖解決方案。
[0113]在本申請(qǐng)實(shí)施例中,OSCache可以以map的形式實(shí)現(xiàn),即key值及對(duì)應(yīng)的value值,對(duì)應(yīng)的,在本申請(qǐng)實(shí)施例中即前文中所述的內(nèi)存中存儲(chǔ)關(guān)鍵值及其對(duì)應(yīng)流程定義對(duì)象值。
[0114]需要說明的是,所述關(guān)鍵值可以為流程定義的版本編號(hào)信息ID值,其value值即為該ID對(duì)應(yīng)的流程定義對(duì)象;所述關(guān)鍵值也可以為流程定義的標(biāo)識(shí)信息,其value值即為該標(biāo)識(shí)信息對(duì)應(yīng)的最新版本的流程定義對(duì)象。
[0115]指令獲取單元902,用于獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值。
[0116]需要說明的是,所述待獲取關(guān)鍵值的性質(zhì)與所述內(nèi)存中存儲(chǔ)的關(guān)鍵值的類型相一致,即若所述內(nèi)存中的所述關(guān)鍵值以編號(hào)信息ID值的形式存儲(chǔ),那么所述待獲取關(guān)鍵值即為所述業(yè)務(wù)流程所需的流程定義對(duì)象所對(duì)應(yīng)的編號(hào)信息ID值;若所述內(nèi)存中的所述關(guān)鍵值以所述標(biāo)識(shí)信息的形式存儲(chǔ),那么所述待獲取關(guān)鍵值即為所述業(yè)務(wù)流程所需的流程定義對(duì)象所對(duì)應(yīng)的標(biāo)識(shí)信息。
[0117]第一查詢單元903,用于在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,觸發(fā)第一對(duì)象提取單元904。
[0118]其中,所述第一查詢單元903中的查詢方式可以通過二叉樹的查詢方式或遍歷的方式實(shí)現(xiàn)。
[0119]第一對(duì)象提取單元904,用于在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0120]由上述方案可知,本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例六,通過預(yù)先將預(yù)設(shè)數(shù)量值的流程定義置于具有高速讀寫功能的內(nèi)存中,進(jìn)而在業(yè)務(wù)流程需要獲取流程定義時(shí),首先在內(nèi)存中對(duì)所需的流程定義進(jìn)行查詢獲取,無需頻繁對(duì)數(shù)據(jù)庫中進(jìn)行查詢?cè)L問,提高流程定義的獲取效率及業(yè)務(wù)流程的運(yùn)行速率。
[0121]同時(shí),相對(duì)于現(xiàn)有技術(shù)中,在業(yè)務(wù)流程引擎啟動(dòng)時(shí)將所有流程定義均加載到內(nèi)存中,導(dǎo)致內(nèi)存占用較多,出現(xiàn)物理內(nèi)存不足無法正常運(yùn)行業(yè)務(wù)流程的情況,本申請(qǐng)實(shí)施例只需將部分流程定義加載置于內(nèi)存中,既提高流程處理的效率,同時(shí)不受物理內(nèi)存的限值。
[0122]為了保證當(dāng)前業(yè)務(wù)流程中所獲取到的流程定義對(duì)象為版本最新,由此保證獲取到的流程定義對(duì)象的時(shí)間有效性,本申請(qǐng)中可以在將預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中時(shí),可以通過將所述數(shù)據(jù)庫中預(yù)設(shè)數(shù)量值的最新更新的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中。
[0123]由此,參考圖10,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例七的部分結(jié)構(gòu)示意圖,其中,所述對(duì)象預(yù)存單元901可以包括:
[0124]對(duì)象排序子單元911,用于依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序。
[0125]其中,所述被更新時(shí)間是指,流程定義對(duì)象本身在數(shù)據(jù)庫中的被更新的時(shí)間,該被更新時(shí)間對(duì)應(yīng)的字段是記錄在所述數(shù)據(jù)庫中的,并非該流程定義對(duì)象的被訪問時(shí)間,該流程定義對(duì)象的被訪問時(shí)間可以不被記錄。
[0126]需要說明的是,所述對(duì)象排序子單元911的運(yùn)行結(jié)果即為:所述數(shù)據(jù)庫中的每個(gè)流程定義對(duì)象以其各自的被更新時(shí)間依次排列,被更新時(shí)間值最大即最晚被更新或者可以理解為距離上次被更新時(shí)間最短的流程定義對(duì)象排序在最前,依次為被更新時(shí)間距離當(dāng)前時(shí)間愈遠(yuǎn)的流程定義對(duì)象,最后被更新時(shí)間最前即最早被更新或者可以理解為距離上次被更新的時(shí)間最長的流程定義對(duì)象排序在最后。
[0127]對(duì)象預(yù)置子單元912,用于將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
[0128]其中,由所述對(duì)象預(yù)置子單元912中可知,所述數(shù)據(jù)庫中的流程定義對(duì)象及其關(guān)鍵值以其各自的被更新時(shí)間值的大小順序被排序,進(jìn)而在所述步驟202中,選取前預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中。
[0129]由上述方案中可知,本申請(qǐng)實(shí)施例通過將所述數(shù)據(jù)庫中預(yù)設(shè)數(shù)量值的最新更新的流程定義對(duì)象及其關(guān)鍵值置于內(nèi)存中,從而后續(xù)以高效率獲取到的內(nèi)存中的流程定義具有時(shí)間有效性,保證業(yè)務(wù)流程運(yùn)行的準(zhǔn)確性。
[0130]參考圖11,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例八的結(jié)構(gòu)示意圖,所述裝置還可以包括:
[0131]第二查詢單元905,用于在所述第一查詢單元903在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值時(shí),在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值。
[0132]其中,所述第一查詢單元903中在所述內(nèi)存中未查詢到所述第一目標(biāo)關(guān)鍵值時(shí),表明所述內(nèi)存中并未預(yù)先存儲(chǔ)與所述待獲取關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象,此時(shí),為保證所述業(yè)務(wù)流程的正常運(yùn)行,本申請(qǐng)實(shí)施例可以以動(dòng)態(tài)加載的方式顯示流程定義的獲取,即為所述第二查詢單元905在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0133]第二對(duì)象提取單元906,用于提取所述數(shù)據(jù)庫中與查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
[0134]由上述方案中可知,本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例八中,在預(yù)設(shè)的內(nèi)存中未查詢到業(yè)務(wù)流程所需的流程定義對(duì)象時(shí),可以在數(shù)據(jù)庫中直接進(jìn)行獲取,保證業(yè)務(wù)流程的正常運(yùn)行。
[0135]需要說明的是,在內(nèi)存中為查詢到所需的流程定義對(duì)象并在數(shù)據(jù)庫中獲取到所述業(yè)務(wù)流程所需的流程定義對(duì)象時(shí),表明該流程定義對(duì)象為所述數(shù)據(jù)庫中最新被更新的流程定義,此時(shí)需要對(duì)所述內(nèi)存的存儲(chǔ)內(nèi)容進(jìn)行更新,參考圖12,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例九的結(jié)構(gòu)示意圖,所述裝置還可以包括:
[0136]第一內(nèi)存更新單元907,用于在所述第二對(duì)象提取單元906提取到所述數(shù)據(jù)庫中與所述查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義的流程定義對(duì)象之后,依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0137]其中,在實(shí)際實(shí)現(xiàn)中,所述內(nèi)存更新規(guī)則可以為先進(jìn)先出更新規(guī)則,即在所述內(nèi)存中空間不足時(shí),將第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象代替所述內(nèi)存中最先被置入的流程定義;另外,所述內(nèi)存更新規(guī)則也可以為LRU (Lease Recently Used,最近最少使用算法)更新規(guī)則,即在所述內(nèi)存空間不足時(shí),將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象代替所述內(nèi)存中被訪問率最低的流程定義,此時(shí),參考圖13,為所述第一內(nèi)存更新單元907的結(jié)構(gòu)示意圖,所述第一內(nèi)存更新單元907可以包括:
[0138]空間判斷子單元971,用于判斷所述內(nèi)存中是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,觸發(fā)對(duì)象存儲(chǔ)子單元972,否則,觸發(fā)對(duì)象刪除子單元 973。
[0139]對(duì)象存儲(chǔ)子單元972,用于將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中。
[0140]對(duì)象刪除子單元973,用于刪除所述內(nèi)存中被訪問率值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,觸發(fā)所述對(duì)象存儲(chǔ)子單元972。
[0141]其中,所述內(nèi)存中被訪問率值最小即為被訪問率最低,可以理解為所述內(nèi)存中最近最少被訪問。所述空間判斷子單元971是指,判斷所述內(nèi)存中是否有足夠的剩余存儲(chǔ)空間足以存儲(chǔ)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,在所述內(nèi)存的存儲(chǔ)空間充裕時(shí),直接觸發(fā)所述對(duì)象存儲(chǔ)子單元972,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,而在所述內(nèi)存中空間不足時(shí),需要首先將所述內(nèi)存中被訪問率最低即最少未被訪問的流程定義對(duì)象及其關(guān)鍵值進(jìn)行刪除,進(jìn)而再觸發(fā)所述對(duì)象存儲(chǔ)子單元972,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,實(shí)現(xiàn)本申請(qǐng)實(shí)施例中對(duì)所述內(nèi)存的更新。
[0142]需要說明的是,在所述數(shù)據(jù)庫中加入新的流程定義時(shí),需要同時(shí)對(duì)內(nèi)存中的流程定義進(jìn)行更新,此時(shí),參考圖14,為本申請(qǐng)?zhí)峁┑囊环N流程定義的獲取裝置實(shí)施例十的部分結(jié)構(gòu)示意圖,所述裝置還可以包括:
[0143]更新對(duì)象獲取單元908,用于獲取待更新流程定義對(duì)象及其關(guān)鍵值。
[0144]其中,所述更新對(duì)象獲取單元908由所述對(duì)象預(yù)存單元901觸發(fā)執(zhí)行。
[0145]需要說明的是,所述待更新流程定義對(duì)象及其關(guān)鍵值即為需要加入數(shù)據(jù)庫及內(nèi)存中的新的流程定義。
[0146]數(shù)據(jù)庫寫入單元909,用于將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中。
[0147]內(nèi)存存儲(chǔ)判定單元910,用于判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,觸發(fā)對(duì)象更新單元911,否則,觸發(fā)第二內(nèi)存更新單元912。
[0148]其中,所述內(nèi)存存儲(chǔ)判定單元910中是指,在所述內(nèi)存中查詢是否含有與該新的流程定義同一標(biāo)識(shí)而不同版本編號(hào)ID值的目標(biāo)流程定義。
[0149]對(duì)象更新單元911,用于將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象。
[0150]其中,所述對(duì)象更新單元911即為,在所述內(nèi)存中,將新版本的流程定義代替舊版本的流程定義。
[0151]第二內(nèi)存更新單元912,用于依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
[0152]其中,所述內(nèi)存更新規(guī)則可以與前文實(shí)施例九中的LRU更新規(guī)則相同,即在所述內(nèi)存空間不足時(shí),將所述待更新流程定義代替所述內(nèi)存中最近最少被訪問的流程定義,所述第二內(nèi)存更新單元912可以通過以下方式實(shí)現(xiàn):
[0153]判斷所述內(nèi)存的存儲(chǔ)空間是否足夠存儲(chǔ)所述待更新流程定義對(duì)象及其關(guān)鍵值,如果是,將所述待更新流程定義對(duì)象及其關(guān)鍵值存儲(chǔ)至所述內(nèi)存中,否則,刪除所述內(nèi)存中被訪問率值最小的流程定義對(duì)象及其關(guān)鍵值,再將所述待更新流程定義對(duì)象及其關(guān)鍵值存儲(chǔ)至所述內(nèi)存中。
[0154]需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。
[0155]最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
[0156]以上對(duì)本發(fā)明所提供的一種流程定義的獲取方法及裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核 心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
【權(quán)利要求】
1.一種流程定義的獲取方法,其特征在于,預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,所述方法包括: 獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值; 在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中,包括: 依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序; 將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,若在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,所述方法還包括: 在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值; 提取所述數(shù)據(jù)庫中與查詢到的第二目 標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述提取所述數(shù)據(jù)庫中與所述查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義的流程定義對(duì)象之后,所述方法還包括: 依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存; 其中,所述依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存,具體包括: 判斷所述內(nèi)存是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中,否則,刪除所述內(nèi)存中被訪問率值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在所述在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中之后,所述方法還包括: 獲取待更新流程定義對(duì)象及其關(guān)鍵值; 將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中; 判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象,否則,依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
6.一種流程定義的獲取裝置,其特征在于,所述裝置包括: 對(duì)象預(yù)存單元,用于預(yù)先在數(shù)據(jù)庫中獲取預(yù)設(shè)數(shù)量值的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中; 指令獲取單元,用于獲取業(yè)務(wù)流程運(yùn)行生成的對(duì)象獲取指令,所述對(duì)象獲取指令中至少包括所述業(yè)務(wù)流程所需要的流程定義對(duì)象所對(duì)應(yīng)的待獲取關(guān)鍵值; 第一查詢單元,用于在所述內(nèi)存中查詢是否含有與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值,如果是,觸發(fā)第一對(duì)象提取單元; 第一對(duì)象提取單元,用于在所述內(nèi)存中提取與查詢到的第一目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述對(duì)象預(yù)存單元包括: 對(duì)象排序子單元,用于依據(jù)數(shù)據(jù)庫中每個(gè)流程定義對(duì)象各自的被更新時(shí)間值的大小順序,對(duì)所述數(shù)據(jù)庫中的流程定義對(duì)象進(jìn)行排序; 對(duì)象預(yù)置子單元,用于將所述數(shù)據(jù)庫中排序在預(yù)設(shè)數(shù)量值以及該預(yù)設(shè)數(shù)量值之前的流程定義對(duì)象及其關(guān)鍵值置于預(yù)設(shè)的內(nèi)存中。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,還包括: 第二查詢單元,用于在所述第一查詢單元在所述內(nèi)存中未查詢到與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第一目標(biāo)關(guān)鍵值時(shí),在所述數(shù)據(jù)庫中查詢與所述待獲取關(guān)鍵值相對(duì)應(yīng)的第二目標(biāo)關(guān)鍵值; 第二對(duì)象提取單元,用于提取所述數(shù)據(jù)庫中與查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義對(duì)象。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括: 第一內(nèi)存更新單元,用于在所述第二對(duì)象提取單`元提取到所述數(shù)據(jù)庫中與所述查詢到的第二目標(biāo)關(guān)鍵值相對(duì)應(yīng)的流程定義的流程定義對(duì)象之后,依據(jù)所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存; 其中,所述第一內(nèi)存更新單元包括: 空間判斷子單元,用于判斷所述內(nèi)存中是否存在所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象的存儲(chǔ)空間,如果是,觸發(fā)對(duì)象存儲(chǔ)子單元,否則,觸發(fā)對(duì)象刪除子單元; 對(duì)象存儲(chǔ)子單元,用于將所述第二目標(biāo)關(guān)鍵值及其對(duì)應(yīng)的流程定義對(duì)象存儲(chǔ)至所述內(nèi)存中; 對(duì)象刪除子單元,用于刪除所述內(nèi)存中被訪問率值最小的目標(biāo)流程定義對(duì)象及其關(guān)鍵值,觸發(fā)所述對(duì)象存儲(chǔ)子單元。
10.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,還包括: 更新對(duì)象獲取單元,用于獲取待更新流程定義對(duì)象及其關(guān)鍵值; 數(shù)據(jù)庫寫入單元,用于將所述待更新流程定義對(duì)象及其關(guān)鍵值寫入至所述數(shù)據(jù)庫中;內(nèi)存存儲(chǔ)判定單元,用于判斷所述內(nèi)存中是否含有與所述待更新流程定義對(duì)象的標(biāo)識(shí)信息相對(duì)應(yīng)的目標(biāo)流程定義對(duì)象,如果是,觸發(fā)對(duì)象更新單元,否則,觸發(fā)第二內(nèi)存更新單元; 對(duì)象更新單元,用于將所述待更新流程定義對(duì)象代替所述目標(biāo)流程定義對(duì)象; 第二內(nèi)存更新單元,用于依據(jù)所述待更新流程定義對(duì)象及其關(guān)鍵值,按照預(yù)設(shè)的內(nèi)存更新規(guī)則更新所述內(nèi)存。
【文檔編號(hào)】G06F17/30GK103530111SQ201310363524
【公開日】2014年1月22日 申請(qǐng)日期:2013年8月20日 優(yōu)先權(quán)日:2013年8月20日
【發(fā)明者】鄭乃惠, 李治, 劉民, 溫尚卓, 高隆林, 何忠勝, 車帥 申請(qǐng)人:山東中創(chuàng)軟件工程股份有限公司, 山東中創(chuàng)軟件商用中間件股份有限公司