999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種Drools規則引擎封裝模型及其實現

2015-06-27 05:55:25藍雯飛邢志寶強小利
關鍵詞:引擎規則

藍雯飛,邢志寶,強小利

(中南民族大學 計算機科學學院,武漢430074)

一種Drools規則引擎封裝模型及其實現

藍雯飛,邢志寶,強小利

(中南民族大學 計算機科學學院,武漢430074)

針對Drools規則引擎的規則語法接受曲線陡峭,業務人員難以快速創建并維護規則等問題,提出了一種規則文件封裝模型.同時,針對規則引擎API調用過程較為復雜,大量事實對象fact存在時引擎執行速度相當緩慢的問題,給出了一種Drools API封裝模型.實驗結果表明:封裝后的Drools可以有效降低業務人員對規則學習與維護成本,并且明顯提高了引擎執行速度.

規則;規則引擎;API封裝

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

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

1 Drools封裝模型

1.1 規則封裝模型

為了簡化業務人員學習規則引擎并維護業務規則,文章提出了對規則封裝的模型.規則封裝主要是針對when部分進行處理,即規則的左部分(LHS).規則封裝模型如圖1所示.

圖1 規則封裝模型Fig.1 Rule encapsulation model

規則封裝實現步驟如下:

1)根據需求的領域模型編寫需要進行核查的數據表的值對象;

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

3)收集整理基站資源數據核查需求抽取與規則相關的業務邏輯;

4)利用JIDE組件設計規則封裝界面.

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

1)減少業務人員的學習成本.業務人員一般不理解規則文件的內容,通過本設計提出的規則封裝管理系統,能夠有效節省業務人員學習時間成本和資料查閱成本,使得業務人員有更多時間只做與業務相關的事情.

2)有效避免規則編寫錯誤.即使是非常熟悉規則編寫語法的開發人員在編寫大批量的規則時也會因為不夠仔細或者其它原因導致規則語法錯誤等問題.規則語法校對是一項比較費力的事情.在本規則封裝管理系統中,業務人員只需要輸入核心內容,不用考慮規則語法的細節.

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

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

1.2 Drools API封裝模型

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

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

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

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

final RuleEngineService ruleEngineService = RuleEngineFactory

.getRuleEngine();

……//解析excel數據表得到targetDatas

taskManageService = RmiServiceFactory.getInstance()

.getService(RMITaskManageService.class);

taskManageService.startSingleCheckTask(taskId, targetDatas);

TaskInfo task = taskManageService.getTaskInfoById(taskId);

通過將規則引擎封裝起來,開發人員不需要考慮Drools的API調用細節,并且在調用過程中能有效避免重復的規則加載與釋放過程.規則的執行可以直接調用DroolsAdapt里面的相應方法,為了實現在資源釋放之前執行規則,最關鍵的部分是規則的釋放時機,如下面代碼所示.

new Thread(){

public void run() {

ruleEngineService.retract();

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

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

ruleEngineService.dispose();

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

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

}

}.start();

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

2 實驗與分析

2.1 實驗結果

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

實驗1:規則封裝組件自動生成規則,描述如下.

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

圖3是通過規則封裝組件只能生成的規則文件,本設計將這些規則文件放到名為drl的文件夾之下,方便程序調用.實驗表明,規則封裝不僅能夠節省業務人員大量的學習時間,并且能夠避免因人為因素而導致的語法問題或規則匹配項的編寫問題.

圖3 規則文件Fig.3 Rule file

實驗2:規則引擎封裝組件進行數據核查,描述如下.

實驗1已經成功生成了單表核查的規則文件,接下來需要使用規則引擎封裝組件加載這些規則文件并執行規則.首先,新建單表核查任務,當數據表標題與標準標題完全匹配之后就可以開始進行單表核查.圖4是GSM單表核查的結果.

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

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

2.2 性能分析

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

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

引擎測試實驗運行環境如下:

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

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

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

以上的研究工作也是開創性的,所以在對比實驗數據時,僅用了封裝前的數據和封裝后的數據.實驗結果表明,本文所采用的規則文件封裝方案,縮短了業務人員學習規則語法的時間,簡化了規則編寫與維護過程,解決了業務人員不能很快著手編寫規則的問題.本文所采用的規則引擎API封裝方案,簡化了開發人員調用引擎API的過程,提高了引擎的執行速度.

3 結束語

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

雖然論文研究的封裝模型可以較好地降低業務人員對規則引擎的學習成本,提高開發人員的編碼效率,但是規則引擎封裝僅限于對單數據表核查規則,下一步的研究內容是方便開發人員的同時,進一步封裝多數據表交叉核查規則.

[1] 郭 芳, 白建軍. 基于 Rete 算法的規則引擎 JBoss Rules [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 在電信網絡開通系統中的應用及其改造[J]. 廣東通信技術, 2007, 27(11): 6-8.

[4] 張聰品, 劉 超. 基于 Java反射機制的規則引擎設計與實現[J]. 河南師范大學學報: 自然科學版, 2010, 38(03): 36-39.

[5] 費廷偉, 劉淑芬, 屈志勇, 等. Java 反射驅動的規則引擎技術研究[J]. 計算機應用, 2010, 30(05): 1324-1326.

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

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

[8] 李春芳, 譚慶平, 徐建軍, 等. 基于業務規則的工作流任務分派設計與實現[J]. 計算機工程與設計, 2008, 29(21): 5572-5575.

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

[10] 閆麗萍,潘正運,梁 冰,等. 基于業務規則管理技術的系統開發方法分析[J]. 信息工程大學學報, 2006, 7(2): 141-143+171.

[11] 賴天武,吳偉民,王 靜,等. 基于Jess 和機器學習的 Robocode 策略研究與實現[J].系統仿真學報,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

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

國家自然科學基金資助項目(61379059)

TP311

A

1672-4321(2015)03-0095-05

猜你喜歡
引擎規則
以學促干 挺膺擔當 激活砥礪前行的紅色引擎
撐竿跳規則的制定
數獨的規則和演變
規則的正確打開方式
幸福(2018年33期)2018-12-05 05:22:42
三生 三大引擎齊發力
讓規則不規則
Coco薇(2017年11期)2018-01-03 20:59:57
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
TPP反腐敗規則對我國的啟示
搜索新規則
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
主站蜘蛛池模板: 日本欧美一二三区色视频| 久久综合九九亚洲一区| 伊人五月丁香综合AⅤ| 欧美性猛交一区二区三区| 九月婷婷亚洲综合在线| 欧美午夜视频| 99久久国产精品无码| 伊人成人在线视频| 亚洲福利片无码最新在线播放| 国产 在线视频无码| 亚洲人成亚洲精品| 久久福利网| 免费中文字幕在在线不卡| 亚洲人成网线在线播放va| 欧美一区二区精品久久久| 国产精品页| 夜夜操狠狠操| 香蕉伊思人视频| 99精品视频播放| 一级在线毛片| 欧美午夜在线播放| 久热re国产手机在线观看| 亚洲综合久久一本伊一区| 激情国产精品一区| 亚洲欧美人成人让影院| 国产精品分类视频分类一区| 国产无遮挡猛进猛出免费软件| 99ri国产在线| 亚洲欧美另类色图| 高清乱码精品福利在线视频| 精品成人一区二区三区电影 | 欧洲在线免费视频| 伊人久久大香线蕉影院| 伊人色天堂| 91啦中文字幕| 好吊色妇女免费视频免费| 波多野结衣久久高清免费| 日韩免费毛片| 狠狠操夜夜爽| 成人毛片免费观看| 欧美在线国产| 99热这里都是国产精品| 男女男精品视频| 2019年国产精品自拍不卡| 老汉色老汉首页a亚洲| 欧美α片免费观看| 亚洲人成网站日本片| 亚洲视频欧美不卡| 色天堂无毒不卡| 精品在线免费播放| 国产v精品成人免费视频71pao| 国产麻豆精品久久一二三| 欧美一区二区三区香蕉视| 99视频有精品视频免费观看| 久久人妻xunleige无码| 国产女人在线观看| 激情视频综合网| 日韩在线播放欧美字幕| 中文字幕丝袜一区二区| 少妇精品久久久一区二区三区| 2020国产精品视频| 日本免费福利视频| 国产精品久久久免费视频| 国产区人妖精品人妖精品视频| 福利视频一区| 久久精品人人做人人爽97| 国产97视频在线观看| 精品免费在线视频| 亚洲人成网址| 女人18毛片久久| 黄色三级网站免费| 精品福利一区二区免费视频| 亚洲aⅴ天堂| 色综合狠狠操| 中文字幕无线码一区| 成人免费午夜视频| 国产精品成人免费视频99| 国产91在线|日本| 黄色成年视频| 亚洲日韩精品欧美中文字幕 | 中文字幕亚洲精品2页| 国产精选小视频在线观看|