• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種Drools規(guī)則引擎封裝模型及其實(shí)現(xiàn)

      2015-06-27 05:55:25藍(lán)雯飛邢志寶強(qiáng)小利
      關(guān)鍵詞:業(yè)務(wù)人員開發(fā)人員調(diào)用

      藍(lán)雯飛,邢志寶,強(qiáng)小利

      (中南民族大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,武漢430074)

      一種Drools規(guī)則引擎封裝模型及其實(shí)現(xiàn)

      藍(lán)雯飛,邢志寶,強(qiáng)小利

      (中南民族大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,武漢430074)

      針對Drools規(guī)則引擎的規(guī)則語法接受曲線陡峭,業(yè)務(wù)人員難以快速創(chuàng)建并維護(hù)規(guī)則等問題,提出了一種規(guī)則文件封裝模型.同時,針對規(guī)則引擎API調(diào)用過程較為復(fù)雜,大量事實(shí)對象fact存在時引擎執(zhí)行速度相當(dāng)緩慢的問題,給出了一種Drools API封裝模型.實(shí)驗(yàn)結(jié)果表明:封裝后的Drools可以有效降低業(yè)務(wù)人員對規(guī)則學(xué)習(xí)與維護(hù)成本,并且明顯提高了引擎執(zhí)行速度.

      規(guī)則;規(guī)則引擎;API封裝

      移動運(yùn)營商每天產(chǎn)生的數(shù)據(jù)量大且復(fù)雜,以往的做法是人工直接核對,即利用手工為不符合規(guī)范的數(shù)據(jù)進(jìn)行標(biāo)記.對海量的運(yùn)營數(shù)據(jù)進(jìn)行人工核查幾乎不可能.于是,有人嘗試直接將各種核查規(guī)則直接編寫成代碼,形成了if-esle語句對組成的業(yè)務(wù)規(guī)則集[1].這樣不僅容易出現(xiàn)邏輯與其它代碼混亂,并且不利于對規(guī)則更新與管理,特別是在開發(fā)的過程中需求是不斷變動的,一旦有規(guī)則發(fā)生改變則需要修改程序代碼,并且需要經(jīng)歷編譯、測試、發(fā)布等階段.大量的業(yè)務(wù)相關(guān)代碼不僅使得系統(tǒng)運(yùn)行緩慢,維護(hù)規(guī)則更是耗費(fèi)了巨大的人力和時間資源.規(guī)則引擎的出現(xiàn)能夠很好地解決上述問題.規(guī)則引擎由推理引擎發(fā)展而來,是一種嵌入在應(yīng)用程序中的組件,實(shí)現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來,并使用預(yù)定義的語義模塊編寫業(yè)務(wù)決策.利用規(guī)則引擎,可以分離代碼中的業(yè)務(wù)規(guī)則,實(shí)現(xiàn)業(yè)務(wù)人員制定規(guī)則并編寫規(guī)則,業(yè)務(wù)規(guī)則的需求變更不再是困擾開發(fā)人員的問題[2,3].然而,應(yīng)用規(guī)則引擎仍存在以下2個主要問題:(1)業(yè)務(wù)人員因規(guī)則在文件中以代碼形式存在而難以編寫與維護(hù)的問題;(2)因移動業(yè)務(wù)產(chǎn)生大量數(shù)據(jù),帶來規(guī)則引擎核查數(shù)據(jù)速度相當(dāng)緩慢的問題.

      本文以Drools規(guī)則引擎為研究對象.針對業(yè)務(wù)規(guī)則難以編寫和維護(hù)的問題,通過圖形化界面封裝規(guī)則,屏蔽具體編寫細(xì)節(jié).針對大量數(shù)據(jù)核查速度緩慢的問題,通過工廠模式封裝了Drools API,屏蔽具體調(diào)用細(xì)節(jié).具體地,首先利JIDE組件形成人性化操作界面,并通過Java反射機(jī)制獲取數(shù)據(jù)值對象的待核查屬性列表,根據(jù)每個屬性選取其規(guī)則匹配項(xiàng),達(dá)到自動生成規(guī)則文件的目的.其次將規(guī)則基本信息作為一個類,包含了規(guī)則核查類型、創(chuàng)建時間、創(chuàng)建人、數(shù)據(jù)類型、規(guī)則文件、結(jié)果變量名稱等,再將執(zhí)行規(guī)則所需要的全部動作封裝到一個RuleEngineService接口中,包含設(shè)置全局變量,插入事實(shí)對象,執(zhí)行全部規(guī)則,回收內(nèi)存等功能,并將回收內(nèi)存的方法放在Java多線程里,能明顯減少頻繁回收內(nèi)存的動作,從而提高規(guī)則引擎執(zhí)行速度.

      1 Drools封裝模型

      1.1 規(guī)則封裝模型

      為了簡化業(yè)務(wù)人員學(xué)習(xí)規(guī)則引擎并維護(hù)業(yè)務(wù)規(guī)則,文章提出了對規(guī)則封裝的模型.規(guī)則封裝主要是針對when部分進(jìn)行處理,即規(guī)則的左部分(LHS).規(guī)則封裝模型如圖1所示.

      圖1 規(guī)則封裝模型Fig.1 Rule encapsulation model

      規(guī)則封裝實(shí)現(xiàn)步驟如下:

      1)根據(jù)需求的領(lǐng)域模型編寫需要進(jìn)行核查的數(shù)據(jù)表的值對象;

      2)以值對象為參數(shù)提供字段獲取接口方法;

      3)收集整理基站資源數(shù)據(jù)核查需求抽取與規(guī)則相關(guān)的業(yè)務(wù)邏輯;

      4)利用JIDE組件設(shè)計(jì)規(guī)則封裝界面.

      規(guī)則封裝后有如下幾個方面的好處:

      1)減少業(yè)務(wù)人員的學(xué)習(xí)成本.業(yè)務(wù)人員一般不理解規(guī)則文件的內(nèi)容,通過本設(shè)計(jì)提出的規(guī)則封裝管理系統(tǒng),能夠有效節(jié)省業(yè)務(wù)人員學(xué)習(xí)時間成本和資料查閱成本,使得業(yè)務(wù)人員有更多時間只做與業(yè)務(wù)相關(guān)的事情.

      2)有效避免規(guī)則編寫錯誤.即使是非常熟悉規(guī)則編寫語法的開發(fā)人員在編寫大批量的規(guī)則時也會因?yàn)椴粔蜃屑?xì)或者其它原因?qū)е乱?guī)則語法錯誤等問題.規(guī)則語法校對是一項(xiàng)比較費(fèi)力的事情.在本規(guī)則封裝管理系統(tǒng)中,業(yè)務(wù)人員只需要輸入核心內(nèi)容,不用考慮規(guī)則語法的細(xì)節(jié).

      3)良好的擴(kuò)展性.通過Java反射機(jī)制獲取值對象的全部屬性[4],不用考慮值對象是已經(jīng)存在的還是新增的[5].當(dāng)需求變更,需要增加新的核查對象時,只需要為領(lǐng)域模型中新增的對象編寫值對象,然后規(guī)則封裝管理系統(tǒng)就可以智能的顯示待核查的所有屬性并為每個屬性編寫相關(guān)的核查規(guī)則.

      4)創(chuàng)建與管理的高效性.業(yè)務(wù)人員通過圖形化界面很容易創(chuàng)建新的規(guī)則與管理已經(jīng)存在的規(guī)則.很短的時間便可以根據(jù)下拉列表中的規(guī)則匹配項(xiàng)名稱生成一條規(guī)則.提高了規(guī)則編寫、修改與創(chuàng)建的效率.

      1.2 Drools API封裝模型

      規(guī)則編寫好之后需要調(diào)用Drools規(guī)則引擎的相應(yīng)API執(zhí)行這些規(guī)則,在一般情況下是開發(fā)人員查閱Drools的API文檔,通過編程逐步調(diào)用應(yīng)用程序接口方法,這樣比較耗費(fèi)代碼編寫與調(diào)試時間.并且遇到數(shù)據(jù)量非常大的情況時,規(guī)則執(zhí)行速度相當(dāng)緩慢,嚴(yán)重影響執(zhí)行速度.本文將執(zhí)行規(guī)則的常用API封裝起來,將使用多線程機(jī)制提高引擎執(zhí)行效率,并形成一個專門的接口,以供開發(fā)人員直接調(diào)用接口來執(zhí)行指定的規(guī)則.

      引擎執(zhí)行過程是首先解析規(guī)則文件[6],然后插入事實(shí)對象fact,再執(zhí)行規(guī)則,最后釋放規(guī)則所占用內(nèi)存[7].這里,規(guī)則的執(zhí)行是每插入一個fact就執(zhí)行規(guī)則,并釋放規(guī)則內(nèi)存.這種頻繁的規(guī)則的加載與釋放過程占用了大量的時間,而這些工作并不是業(yè)務(wù)邏輯相關(guān)的.通過封裝規(guī)則引擎常用API,開發(fā)人員不僅能夠節(jié)省大量學(xué)習(xí)時間和查閱資料時間,還能夠直接使用已經(jīng)優(yōu)化了的接口方法,提高引擎執(zhí)行速度.圖2給出了規(guī)則引擎封裝的類圖.

      圖2 規(guī)則引擎封裝類圖Fig.2 Class diagram for rule engine encapsulation

      圖2中,RuleInfo作為值對象擁有一個規(guī)則文件應(yīng)有的屬性,比如核查類型、創(chuàng)建時間、創(chuàng)建人、數(shù)據(jù)類型、規(guī)則文件、結(jié)果變量名稱等.當(dāng)然,作為POJO,RuleInfo還擁有其無參和有參構(gòu)造函數(shù)以及相應(yīng)的setter與getter方法.RuleEngineService接口提供了執(zhí)行規(guī)則所需要的全部動作:設(shè)置全局變量,插入事實(shí)對象,執(zhí)行全部規(guī)則,回收內(nèi)存等.DroolsAdapt類主要用于實(shí)現(xiàn)RuleEngineService接口,即實(shí)現(xiàn)Drools真正需要完成的動作.最后,RuleEngineFactory作為工廠類,創(chuàng)建DroolsAdapt實(shí)例,為外界提供獲取規(guī)則引擎操作的接口方法.下面是封裝后的Drools執(zhí)行代碼.

      final RuleEngineService ruleEngineService = RuleEngineFactory

      .getRuleEngine();

      ……//解析excel數(shù)據(jù)表得到targetDatas

      taskManageService = RmiServiceFactory.getInstance()

      .getService(RMITaskManageService.class);

      taskManageService.startSingleCheckTask(taskId, targetDatas);

      TaskInfo task = taskManageService.getTaskInfoById(taskId);

      通過將規(guī)則引擎封裝起來,開發(fā)人員不需要考慮Drools的API調(diào)用細(xì)節(jié),并且在調(diào)用過程中能有效避免重復(fù)的規(guī)則加載與釋放過程.規(guī)則的執(zhí)行可以直接調(diào)用DroolsAdapt里面的相應(yīng)方法,為了實(shí)現(xiàn)在資源釋放之前執(zhí)行規(guī)則,最關(guān)鍵的部分是規(guī)則的釋放時機(jī),如下面代碼所示.

      new Thread(){

      public void run() {

      ruleEngineService.retract();

      logger.infoT("singleTask[" + provinceManualVerifyTask.getTaskName()

      + "]釋放資源.....ok");

      ruleEngineService.dispose();

      logger.infoT("singleTask[" + provinceManualVerifyTask.getTaskName()

      + "]釋放完畢.....ok");

      }

      }.start();

      以往的做法是每核查一個fact對象就釋放內(nèi)存資源,當(dāng)數(shù)據(jù)量非常龐大、字段相當(dāng)多的時候,頻繁地釋放會嚴(yán)重影響規(guī)則執(zhí)行速度.把RuleEngineService接口中的資源回收方法dispose()丟到Java多線程里面,以保證所有fact對象全部核查完畢再釋放內(nèi)存,避免反復(fù)回收資源以及回收資源與引擎執(zhí)行的切換調(diào)度時間.能夠顯著提高回收速度.這是一個空間換取時間的做法,因?yàn)檫@種方式需要更多的內(nèi)存.

      2 實(shí)驗(yàn)與分析

      2.1 實(shí)驗(yàn)結(jié)果

      實(shí)驗(yàn)主要在以JIDE組件形成的圖形化界面上進(jìn)行,實(shí)驗(yàn)包含兩個部分:一是采用規(guī)則封裝管理工具通過圖形化的形式提供封裝過的規(guī)則,二是通過調(diào)用規(guī)則引擎封裝組件對基站資源數(shù)據(jù)進(jìn)行規(guī)則校驗(yàn),規(guī)則校驗(yàn)又分為單表核查和交叉核查,本文討論單表核查下的實(shí)驗(yàn).

      實(shí)驗(yàn)1:規(guī)則封裝組件自動生成規(guī)則,描述如下.

      選擇數(shù)據(jù)表對象,通過Java反射機(jī)制獲取該數(shù)據(jù)表的所有字段,逐一選取字段.當(dāng)選擇某個字段“aa”時,系統(tǒng)自動為該字段的規(guī)則取名為“check the aa rule”,隨后從規(guī)則匹配項(xiàng)下拉列表里面選取匹配項(xiàng)來滿足該字段的核查要求,如果沒有,則新建匹配項(xiàng),存庫,再調(diào)用.

      圖3是通過規(guī)則封裝組件只能生成的規(guī)則文件,本設(shè)計(jì)將這些規(guī)則文件放到名為drl的文件夾之下,方便程序調(diào)用.實(shí)驗(yàn)表明,規(guī)則封裝不僅能夠節(jié)省業(yè)務(wù)人員大量的學(xué)習(xí)時間,并且能夠避免因人為因素而導(dǎo)致的語法問題或規(guī)則匹配項(xiàng)的編寫問題.

      圖3 規(guī)則文件Fig.3 Rule file

      實(shí)驗(yàn)2:規(guī)則引擎封裝組件進(jìn)行數(shù)據(jù)核查,描述如下.

      實(shí)驗(yàn)1已經(jīng)成功生成了單表核查的規(guī)則文件,接下來需要使用規(guī)則引擎封裝組件加載這些規(guī)則文件并執(zhí)行規(guī)則.首先,新建單表核查任務(wù),當(dāng)數(shù)據(jù)表標(biāo)題與標(biāo)準(zhǔn)標(biāo)題完全匹配之后就可以開始進(jìn)行單表核查.圖4是GSM單表核查的結(jié)果.

      圖4 單表核查結(jié)果Fig.4 The result of checking a table

      通過規(guī)則引擎加載規(guī)則文件對GSM表進(jìn)行數(shù)據(jù)核查,找出錯誤的數(shù)據(jù).圖4中白底部分表示內(nèi)容填寫正確,而灰底部分表示內(nèi)容填寫錯誤,當(dāng)光標(biāo)聚焦到錯誤單元格的時候系統(tǒng)會提示正確的填寫規(guī)范,這個提示信息是從規(guī)則文件中獲取的.用戶可以修改錯誤的信息并刷新重新核查,直到所有的數(shù)據(jù)都核查通過.

      2.2 性能分析

      圖5給出了規(guī)則封裝之后與直接編寫規(guī)則文件時花費(fèi)在各個部分的時間百分比.可以看出,直接開發(fā)規(guī)則文件時用在規(guī)則語法學(xué)習(xí)上的時間幾乎占據(jù)總時間的一半,而維護(hù)規(guī)則的時間僅僅只占總時間的20%左右;封裝規(guī)則后用于正則表達(dá)式與規(guī)則語法學(xué)習(xí)上的時間相對較少,大部分時間可以專注于規(guī)則的管理上,大大減少了與業(yè)務(wù)無關(guān)的學(xué)習(xí)時間與學(xué)習(xí)成本消耗.

      圖5 規(guī)則封裝前后時間開銷比較Fig.5 Time cost comparison

      引擎測試實(shí)驗(yàn)運(yùn)行環(huán)境如下:

      (1)內(nèi)存 4GB;(2)CPU 2.1GHz,雙核,4線程;(3)操作系統(tǒng) Windows 7.

      圖6比較了引擎封裝前后的TD數(shù)據(jù)核查速度.由圖6可以看到封裝了規(guī)則引擎API后,在相同fact對象條數(shù)被引擎核查時,速度較之前大大提升.當(dāng)數(shù)據(jù)量比較大,規(guī)則容易變更時,采用規(guī)則引擎能夠大大降低開發(fā)成本.

      圖6 引擎封裝前后執(zhí)行速度比較Fig.6 Comparison of the engine execution speed

      以上的研究工作也是開創(chuàng)性的,所以在對比實(shí)驗(yàn)數(shù)據(jù)時,僅用了封裝前的數(shù)據(jù)和封裝后的數(shù)據(jù).實(shí)驗(yàn)結(jié)果表明,本文所采用的規(guī)則文件封裝方案,縮短了業(yè)務(wù)人員學(xué)習(xí)規(guī)則語法的時間,簡化了規(guī)則編寫與維護(hù)過程,解決了業(yè)務(wù)人員不能很快著手編寫規(guī)則的問題.本文所采用的規(guī)則引擎API封裝方案,簡化了開發(fā)人員調(diào)用引擎API的過程,提高了引擎的執(zhí)行速度.

      3 結(jié)束語

      本文針對規(guī)則在實(shí)際應(yīng)用過程中難以編寫與理解的問題,提出了封裝規(guī)則的有效方案,利用JIDE組件以及Java反射機(jī)制成功封裝了規(guī)則文件,簡化了業(yè)務(wù)人員學(xué)習(xí)與管理規(guī)則的過程.針對規(guī)則引擎耗內(nèi)存大,大量數(shù)據(jù)核查速度緩慢的問題,提出了封裝Drools API的有效方案,利用JIDE組件以及Java多線程機(jī)制成功封裝了常用API,簡化了開發(fā)人員使用Drools的過程,并提高了引擎執(zhí)行速度.論文對推動規(guī)則引擎的普及,將規(guī)則引擎更加廣泛地應(yīng)用到工業(yè)界中具有一定的實(shí)際意義.

      雖然論文研究的封裝模型可以較好地降低業(yè)務(wù)人員對規(guī)則引擎的學(xué)習(xí)成本,提高開發(fā)人員的編碼效率,但是規(guī)則引擎封裝僅限于對單數(shù)據(jù)表核查規(guī)則,下一步的研究內(nèi)容是方便開發(fā)人員的同時,進(jìn)一步封裝多數(shù)據(jù)表交叉核查規(guī)則.

      [1] 郭 芳, 白建軍. 基于 Rete 算法的規(guī)則引擎 JBoss Rules [J]. 計(jì)算機(jī)時代, 2008, 1(1): 8-10.

      [2] Razzaq A, Hur A, Masood M, et al. Foundation of Semantic Rule Engine to Protect Web Application Attacks[C]// Masaki. 2011 10th International Symposium on Autonomous Decentralized Systems. Tokyo: Tokyo University Press, 2011: 95-102.

      [3] 朱先飛. Drools 在電信網(wǎng)絡(luò)開通系統(tǒng)中的應(yīng)用及其改造[J]. 廣東通信技術(shù), 2007, 27(11): 6-8.

      [4] 張聰品, 劉 超. 基于 Java反射機(jī)制的規(guī)則引擎設(shè)計(jì)與實(shí)現(xiàn)[J]. 河南師范大學(xué)學(xué)報(bào): 自然科學(xué)版, 2010, 38(03): 36-39.

      [5] 費(fèi)廷偉, 劉淑芬, 屈志勇, 等. Java 反射驅(qū)動的規(guī)則引擎技術(shù)研究[J]. 計(jì)算機(jī)應(yīng)用, 2010, 30(05): 1324-1326.

      [6] 陸歌皓,李仕金,吳超凡. Drools 規(guī)則引擎在現(xiàn)代物流信息平臺的應(yīng)用[J]. 計(jì)算機(jī)科學(xué), 2011, 38(B10): 447-450.

      [7] 繳明洋,譚慶平. Java 規(guī)則引擎技術(shù)研究[J]. 計(jì)算機(jī)與信息技術(shù), 2006(3): 41-43.

      [8] 李春芳, 譚慶平, 徐建軍, 等. 基于業(yè)務(wù)規(guī)則的工作流任務(wù)分派設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2008, 29(21): 5572-5575.

      [9] 趙萬平,于曉紅,曲 寶. 基于JESS的智能數(shù)據(jù)清洗平臺技術(shù)研究[J]. 牡丹江師范學(xué)院學(xué)報(bào),2006,31(03): 11-13.

      [10] 閆麗萍,潘正運(yùn),梁 冰,等. 基于業(yè)務(wù)規(guī)則管理技術(shù)的系統(tǒng)開發(fā)方法分析[J]. 信息工程大學(xué)學(xué)報(bào), 2006, 7(2): 141-143+171.

      [11] 賴天武,吳偉民,王 靜,等. 基于Jess 和機(jī)器學(xué)習(xí)的 Robocode 策略研究與實(shí)現(xiàn)[J].系統(tǒng)仿真學(xué)報(bào),2006,18(2): 912-914.

      Research on Encapsulation Model to Drools Rule Engine

      LanWenfei,XingZhibao,QiangXiaoli

      (College of Computer Science, South-Central University for Nationalities, Wuhan 430073, China)

      Rule grammar

      curve of business engine is steep. It’s hard for business personnel to quickly create and maintain rule. The paper brings up a model for encapsulating rule file. Besides, API calling process of rule engine is complicated. The engine performing speed becomes rather slow when many fact objects exist. The paper puts forward a model for encapsulating Drools API. Experiments show that the encapsulated Drools can not only effectively reduce the business personnel of rule learning and maintenance costs, but also improve the engine execution speed.

      rule; rule engine; API encapsulation

      2015-08-10

      藍(lán)雯飛(1966-),女,教授,研究方向:數(shù)據(jù)庫技術(shù),軟件新技術(shù),E-mail:lanwenfei1@163.com

      國家自然科學(xué)基金資助項(xiàng)目(61379059)

      TP311

      A

      1672-4321(2015)03-0095-05

      猜你喜歡
      業(yè)務(wù)人員開發(fā)人員調(diào)用
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      淺談提高業(yè)務(wù)人員素質(zhì)的主要途徑
      90%的奶粉企業(yè)要瘦身,誰會被裁掉?
      快消品行業(yè)業(yè)務(wù)人員流失的原因與影響淺析
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      讓W(xué)indows 10進(jìn)入開發(fā)者模式
      電腦迷(2015年12期)2015-04-29 23:22:51
      后悔了?教你隱藏開發(fā)人員選項(xiàng)
      電腦愛好者(2015年6期)2015-04-03 01:20:56
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      社旗县| 封开县| 崇信县| 天门市| 湘乡市| 玉门市| 绥中县| 锡林郭勒盟| 西充县| 衡东县| 楚雄市| 黔西县| 沈丘县| 聂荣县| 丹东市| 永嘉县| 潼南县| 礼泉县| 大厂| 广饶县| 凌云县| 康定县| 梁河县| 启东市| 古蔺县| 三门县| 建阳市| 金昌市| 佛山市| 卢龙县| 南康市| 呼和浩特市| 共和县| 屏南县| 临桂县| 平邑县| 农安县| 聂拉木县| 诸城市| 通江县| 巴东县|