基于擴(kuò)展Drools5規(guī)則引擎的數(shù)據(jù)流處理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明企業(yè)內(nèi)部信息化系統(tǒng)的數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及一種基于擴(kuò)展Drools5規(guī)則引擎的數(shù)據(jù)流處理方法及系統(tǒng)。
【背景技術(shù)】
[0002]企業(yè)管理者對(duì)企業(yè)級(jí)IT系統(tǒng)的開(kāi)發(fā)有著如下的要求:為提高效率,即使現(xiàn)代商業(yè)規(guī)則異常復(fù)雜,管理流程必須自動(dòng)化;市場(chǎng)要求業(yè)務(wù)規(guī)則經(jīng)常變化,IT系統(tǒng)必須依據(jù)業(yè)務(wù)規(guī)則的變化進(jìn)行快速、低成本的更新;為了快速、低成本的更新,業(yè)務(wù)人員應(yīng)能直接管理IT系統(tǒng)中的規(guī)則,不需要程序開(kāi)發(fā)人員參與。
[0003]而項(xiàng)目開(kāi)發(fā)人員則碰到了以下問(wèn)題:(I)程序=算法+數(shù)據(jù)結(jié)構(gòu),有些復(fù)雜的商業(yè)規(guī)則很難推導(dǎo)出算法和抽象出數(shù)據(jù)模型;(2)軟件工程要求從需求_>設(shè)計(jì)_>編碼,然而業(yè)務(wù)規(guī)則常常在需求階段可能還沒(méi)有明確,在設(shè)計(jì)和編碼后還在變化,業(yè)務(wù)規(guī)則往往嵌在系統(tǒng)各處代碼中;(3)對(duì)程序員來(lái)說(shuō),系統(tǒng)已經(jīng)維護(hù)、更新困難,更不可能讓業(yè)務(wù)人員來(lái)管理。
[0004]規(guī)則引擎試圖解決應(yīng)用程序業(yè)務(wù)邏輯的開(kāi)發(fā)和維護(hù)中固有的問(wèn)題和困難。Drools是用Java語(yǔ)言編寫(xiě)的開(kāi)放源碼規(guī)則引擎,使用Rete算法對(duì)所編寫(xiě)的規(guī)則求值。Drools允許使用聲明方式表達(dá)業(yè)務(wù)邏輯。可以使用非XML的本地語(yǔ)言編寫(xiě)規(guī)則,從而便于學(xué)習(xí)和理解。并且,還可以將Java代碼直接嵌入到規(guī)則文件中。
[0005]但是現(xiàn)有基于Drools規(guī)則引擎的企業(yè)內(nèi)部信息化系統(tǒng)沒(méi)有將業(yè)務(wù)邏輯和規(guī)則的觸發(fā)進(jìn)行分離,無(wú)法對(duì)企業(yè)內(nèi)部信息化系統(tǒng)的工作流、審批流和業(yè)務(wù)流進(jìn)行分類并且有效地處理。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明提供一種能夠?qū)崿F(xiàn)業(yè)務(wù)邏輯與規(guī)則的觸發(fā)分離,并能夠在根據(jù)載入上下文中的規(guī)則類型的不同對(duì)數(shù)據(jù)流進(jìn)行分類處理的基于擴(kuò)展Dr00ls5規(guī)則引擎的數(shù)據(jù)流處理方法及系統(tǒng)。
[0007]一種基于擴(kuò)展Dr00ls5規(guī)則引擎的數(shù)據(jù)流處理方法,其包括如下步驟:
[0008]S1、接收外部應(yīng)用程序接口 API用戶發(fā)送的調(diào)用請(qǐng)求,所述調(diào)用請(qǐng)求用于請(qǐng)求創(chuàng)建新的會(huì)話;
[0009]S2、被調(diào)用的對(duì)象通過(guò)其自身的算法進(jìn)行刷新,來(lái)刷新全局緩存中的規(guī)則集;
[0010]S3、通過(guò)調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集;
[0011]S4、在不需要更新全局緩存中的規(guī)則集時(shí),將全局緩存中的規(guī)則返回給發(fā)送調(diào)用請(qǐng)求的API,調(diào)用API執(zhí)行下一個(gè)規(guī)則綁定的動(dòng)作;在需要更新全局緩存中的規(guī)則集時(shí),首先清空全局緩存中的規(guī)則集,獲得規(guī)則庫(kù)中的全量數(shù)據(jù)并將全量數(shù)據(jù)更新至全局緩存,并進(jìn)行重新智能匹配返回給API執(zhí)行的規(guī)則。
[0012]一種基于擴(kuò)展Dr00ls5規(guī)則引擎的數(shù)據(jù)流處理系統(tǒng),其包括如下單元:
[0013]會(huì)話創(chuàng)建單元,用于接收外部應(yīng)用程序接口 API用戶發(fā)送的調(diào)用請(qǐng)求,所述調(diào)用請(qǐng)求用于請(qǐng)求創(chuàng)建新的會(huì)話;
[0014]規(guī)則刷新單元,用于被調(diào)用的對(duì)象通過(guò)其自身的算法進(jìn)行刷新,來(lái)刷新全局緩存中的規(guī)則集;
[0015]判斷單元,用于通過(guò)調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集;
[0016]規(guī)則執(zhí)行單元,用于在不需要更新全局緩存中的規(guī)則集時(shí),將全局緩存中的規(guī)則返回給發(fā)送調(diào)用請(qǐng)求的API,調(diào)用API執(zhí)行下一個(gè)規(guī)則綁定的動(dòng)作;在需要更新全局緩存中的規(guī)則集時(shí),清空全局緩存中的規(guī)則集,獲得規(guī)則庫(kù)中的全量數(shù)據(jù)并將全量數(shù)據(jù)更新至全局緩存,并進(jìn)行重新智能匹配返回給API執(zhí)行的規(guī)則。
[0017]有益技術(shù)效果:本發(fā)明通過(guò)調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集,并在更新規(guī)則集和不更新規(guī)則的情況下采用不同的方案執(zhí)行規(guī)則綁定的動(dòng)作,能夠?qū)崿F(xiàn)業(yè)務(wù)邏輯與規(guī)則的觸發(fā)分離,并能夠在根據(jù)載入上下文中的規(guī)則的不同類型進(jìn)行對(duì)企業(yè)內(nèi)部信息化系統(tǒng)的工作流、審批流以及業(yè)務(wù)流進(jìn)行分類處理。
【附圖說(shuō)明】
[0018]圖1是本發(fā)明實(shí)施方式提供的基于擴(kuò)展Dr00ls5規(guī)則引擎的數(shù)據(jù)流處理方法流程圖;
[0019]圖2是本發(fā)明實(shí)施方式提供的基于擴(kuò)展Dr00ls5規(guī)則引擎的數(shù)據(jù)流處理系統(tǒng)結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0020]如圖1所示,一種基于擴(kuò)展D101S5規(guī)則引擎的數(shù)據(jù)流處理方法,其包括如下步驟:
[0021]S1、接收外部應(yīng)用程序接口 API用戶發(fā)送的調(diào)用請(qǐng)求,所述調(diào)用請(qǐng)求用于請(qǐng)求創(chuàng)建新的會(huì)話。
[0022]S2、被調(diào)用的對(duì)象通過(guò)其自身的算法進(jìn)行刷新,來(lái)刷新全局緩存中的規(guī)則集。
[0023]S3、通過(guò)調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集。
[0024]可選地,所述步驟S3包括:
[0025]調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集。
[0026]通過(guò)對(duì)比全局緩存中規(guī)則集的版本與規(guī)則庫(kù)中規(guī)則集的版本是否一致。
[0027]如果版本一致,則不需要更新全局緩存中的規(guī)則集;如果版本不一致,則需要更新全局緩存中的規(guī)則集。
[0028]S4、在不需要更新全局緩存中的規(guī)則集時(shí),將全局緩存中的規(guī)則返回給發(fā)送調(diào)用請(qǐng)求的API,調(diào)用API執(zhí)行下一個(gè)規(guī)則綁定的動(dòng)作;在需要更新全局緩存中的規(guī)則集時(shí),首先清空全局緩存中的規(guī)則集,獲得規(guī)則庫(kù)中的全量數(shù)據(jù)并將全量數(shù)據(jù)更新至全局緩存,并進(jìn)行重新智能匹配返回給API執(zhí)行的規(guī)則。
[0029]可選地,所述步驟S4中在需要更新全局緩存中的規(guī)則集時(shí),首先清空全局緩存中的規(guī)則集,獲得規(guī)則庫(kù)中的全量數(shù)據(jù)并將全量數(shù)據(jù)更新至全局緩存,并進(jìn)行重新智能匹配綁定規(guī)則包括:
[0030]在需要更新全局緩存中的規(guī)則集時(shí),調(diào)用清空函數(shù)clear清空全局緩存中的規(guī)則集。
[0031]調(diào)用獲取函數(shù)get獲取規(guī)則庫(kù)中的帶有版本號(hào)規(guī)則集的全量數(shù)據(jù)。
[0032]調(diào)用更新函數(shù)update將獲得的帶有版本號(hào)規(guī)則集更新至全局緩存。
[0033]調(diào)用重新鏈接函數(shù)reffIeshLink進(jìn)行重新智能匹配返回給API執(zhí)行的規(guī)則。
[0034]如圖2所示,本發(fā)明實(shí)施例還提供一種基于擴(kuò)展D101S5規(guī)則引擎的數(shù)據(jù)流處理系統(tǒng),其包括如下單元:
[0035]會(huì)話創(chuàng)建單元10,用于接收外部應(yīng)用程序接口 API用戶發(fā)送的調(diào)用請(qǐng)求,所述調(diào)用請(qǐng)求用于請(qǐng)求創(chuàng)建新的會(huì)話。
[0036]規(guī)則刷新單元20,用于被調(diào)用的對(duì)象通過(guò)其自身的算法進(jìn)行刷新,來(lái)刷新全局緩存中的規(guī)則集。
[0037]判斷單元30,用于通過(guò)調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集。
[0038]可選地,所述判斷單元30包括:
[0039]調(diào)用構(gòu)建函數(shù)builder詢問(wèn)是否需要更新全局緩存中的規(guī)則集。
[0040]通過(guò)對(duì)比全局緩存中規(guī)則集的版本與規(guī)則庫(kù)中規(guī)則集的版本是否一致。
[0041]在版本一致