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