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

基于Java注解的Drools業務規則開發框架設計實現

2017-06-01 12:39:00周中雨,李洋,楊程屹
電子測試 2017年6期
關鍵詞:引擎規則

基于Java注解的Drools業務規則開發框架設計實現

0 引言

規則引擎由推理引擎發展而來,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來,并使用預定義的語義模塊編寫業務決策。規則引擎接受數據輸入,解釋業務規則,并根據業務規則做出業務決策。規則引擎適用于業務規則復雜且頻繁改動的系統。

Drools是RedHat公司旗下一款基于Java語言的開源規則引擎,廣泛應用于金融、保險、電信等領域,可以將復雜多變的規則以規則腳本的形式存放在文件中,使得規則的變更不需要重啟機器就可以立即在線上環境生效。

在業務規則開發過程中,Drools規則引擎只能識別與處理基于DRL(Domain Rule Language)格式定義的業務邏輯,與Java程序相比存在著一些缺陷,不能很好地支持企業級應用管理,主要表現在以下兩方面。

(1)開發效率待提高:DRL語法學習成本較高;傳統Java開發環境(例如Eclipse)不支持對DRL進行語法檢查和語法輔助,無法在運行前發現語法錯誤;部分規則文件無法進行調試;重構難度大,進行規則修改時很難評估影響范圍。

(2)代碼質量缺乏保障:無法通過代碼質量管理工具(例如SonarQube)對DRL文件進行檢查與分析。

為解決這些缺陷,迫切需要建立Drools業務規則開發框架,直接使用Java語言實現業務邏輯,單元測試通過后自動生成Drools業務規則。

1 開發框架設計

Drools業務規則開發框架主要由編寫模塊、執行模塊、轉換模塊三部分組成。其中編寫模塊定義Java語言實現業務邏輯的規范;執行模塊對Java語言實現的業務邏輯模擬執行,并支持在傳統Java開發環境中進行代碼調試;轉換模塊將Java語言實現的業務邏輯轉換成Drools規則引擎支持的業務規則。

Drools業務規則開發框架的使用流程如圖1所示。

圖1 Drools業務規則開發框架的使用流程

通過使用此開發框架,技術人員直接使用Java語言實現業務邏輯,將極大提高開發效率和代碼質量。

下面介紹Drools業務規則開發框架的實現技術。

2 開發框架實現

2.1 Java注解技術

注解(annotation)是JDK1.5及以后版本引入的一個特性。注解(annotation)是一個接口,程序可以通過反射來獲取指定程序元素的注解對象,然后通過注解對象來獲取注解里面的元數據。

元注解(meta-annotation)的作用是負責注解其他注解。Java5.0定義了4個標準的元注解類型,它們被用來提供對其它 注解類型作說明。其中元注解@Target說明了注解所修飾的對象范圍,元注解@Retention定義了該注解被保留的時間長短,分為三種情況:SOURCE表示出現在源代碼中但被編譯器丟棄;CLASS表示編譯在class文件中但在class文件裝載時被忽略;RUNTIME表示編譯在class文件中且在class裝載時被讀取。

Java注解技術對于Drools業務規則開發框架至關重要?;谧⒔饧夹g,執行模塊獲取代碼中的元注解信息從而動態執行Java代碼,轉換模塊獲取代碼中的元注解信息從而完成代碼分析從而轉換為DRL文件。

2.2 編寫模塊

編寫模塊中定義了三種注解,分別為RuleGroup、Rule、RuleFunction,這三種注解的@Retention都設置為RUNTIME,以便在執行模塊及轉換模塊中獲取注解信息。

RuleGroup標識在規則流中所屬的節點,定義如下:

@Target({ ElementType.TYPE })

@Retention(RetentionPolicy.RUNTIME)

public @interface RuleGroup {

String ruleflowGroup();

}

Rule標識業務規則屬性,如優先級。定義如下:

@Target({ ElementType.TYPE })

@Retention(RetentionPolicy.RUNTIME)

public @interface Rule {

String salience() default "10000";

}

RuleFunction標識業務規則中調用的函數方法。定義如下:@Target({ ElementType.METHOD })

@Retention(RetentionPolicy.RUNTIME)

public @interface RuleFunction {

}

基于這三種注解,使用Java語言編寫的業務邏輯示例如下:@RuleGroup(ruleflowGroup="RequestRules")

public class RequestRules {

@Rule(salience = "10000")

public static class Rule1 {

public boolean when() { return true;

}

public void then() {

func1();

}

}

@RuleFunction

static void func1() {

}

}

從以上示例可以看到,技術人員使用Java語言實現業務邏輯,能夠進行語法檢查和語法輔助,也能通過代碼質量管理工具保證代碼的規范性。

2.3 執行模塊

執行模塊采用反射技術加載Java語言編寫的業務邏輯并執行,處理流程如圖2所示。

圖2 執行模塊處理流程圖

具體處理流程如下:

(1)按規則流節點順序加載使用RuleGroup注解的類;

(2)獲取類中使用Rule注解的內部類并按salience排序;(3)按順序執行各內部類;

①實例化內部類innerRule;

②如果innerRule.when()結果為true則執行inner Rule.then(),否則回到①實例化下一個內部類。

業務規則when部分的輸入為字符串,輸出為true或false,類似于Javascript中的eval()函數。執行模塊采用規則引擎加載此字符串并執行,核心代碼如下:

// 加載DRL并執行

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory. newKnowledgeBuilder();

kbuilder add(ResourceFactory newReaderResource(strReade r),ResourceType.DRL);

KnowledgeBase kbase = kbuilder.newKnowledgeBase();

StatefulKnowledgeSession ksession = kbase. newStatefulKnowledgeSession();

ksession insert(messageWrapper);

QueryResults results = ksession.getQueryResults(drlHash);

// 對執行結果進行判斷

return (results.size() > 0);

2.4 轉換模塊

轉換模塊將Java文件轉換為Drools規則引擎支持的DRL文件,處理流程如圖3所示。

圖3 轉換模塊處理流程圖

具體處理流程如下:

(1)按規則流節點順序加載Java文件;

(2)使用開源的google JavaParser庫進行Java文件解析;

(3)對使用Rule注解的內部類進行循環處理,獲取ruleflow-group屬性、salience屬性、when部分、then部分及function部分;

(4)將生成的符合Drools業務規則語法的字符串寫入DRL文件。

3 開發框架應用

從全球民航發展情況看,由于市場競爭不斷加劇,全球民航業長期處于微利運營水平。在日益艱難的市場環境中,國內外航空公司在客運方面力圖沖破只能提供航空運輸的傳統服務模式,不斷探索新的商務模式和盈利渠道,正在發展成為以航空運輸為中心、集酒店、租車、旅游、免稅品銷售等服務于一體的航空旅游綜合服務提供商[4]。航空公司機票+酒店動態打包銷售平臺項目(簡稱動態打包項目)正是在這個大背景下立項并實施的。

在開發動態打包項目時,采用了Drools規則引擎,基于規則流(RuleFlow)技術實現動態打包查詢、預訂、取消等功能,輸入輸出遵循OTA(Open Travel Alliance)國際標準。

在實現中,將輸入輸出抽象為MessageWrapper,將每個功能的業務處理流程進行總結,抽象為RequestRules、SwitchingRules、AggregationRules、ResponseOptionRules、ResponseRules共5個節點,分別實現請求校驗、外部系統調用、外部系統結果合并、響應結果過濾與排序、響應結果處理(如促銷價格計算)功能。節點名稱與RuleGroup中的ruleflowGroup屬性相對應。每個節點內的業務規則按優先級順序執行,整體業務處理流程如圖4所示。

圖4 業務處理流程圖

為驗證開發框架在提高開發效率方面的效果,項目組選取動態打包查詢模塊進行比對實驗。選取兩個水平接近的開發人員,以通過預先設定的單元測試為完成標準,采用直接編寫DRL文件的開發方式共花費15人天,采用開發框架共花費11人天。

根據以上比對實驗,通過使用Drools業務規則開發框架,動態打包項目提高開發效率20%以上,節省至少5人月開發工作量。同時在SonarQube中代碼質量評級為A,取得預期效果。

4 結論

利用基于Java注解的Drools業務規則開發框架,技術人員可以方便的進行業務規則編寫、調試,提升代碼質量,提高開發效率。

動態打包項目中每個節點內的業務規則按優先級順序執行,沒有涉及規則的重復觸發與沖突檢測,后續還需要持續改進完善。

[1]張淵,夏清國.基于Rete算法的JAVA規則引擎[J].科學技術與工程,2006,6(11) :1548-1550.

[2]李春芳,譚慶平. 面向業務的 Drools規則引擎改進[J]. 計算機應用與軟件,2015,32(5) :20-23.

[3]凌晨,陳芳莉.Java注釋類型和APT [J]. 計算機系統應用,2006,15(9):78-82.

[4]王欣明,呂明站.民航附加服務動態打包技術研究[J]. 民航科技,2011(3):39-42.

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

周中雨(1978——),男,河北省河間市,中級工程師,碩士研究生,主要從事J2EE平臺軟件架構設計及研發。

李洋(1977——),男,陜西省藍田縣,中級工程師,碩士研究生,主要從事J2EE平臺軟件架構設計及研發。

王懷超(1984——),男,天津,講師,博士研究生,主要研究方向航空物流、計算機視覺。

楊程屹(1986——),男,河北省灤縣,中級工程師,博士研究生,主要從事數據挖掘、算法研究等工作。

周中雨1,李洋1,楊程屹1,王懷超2
(1.中國民航信息網絡股份有限公司,北京,100105;2.中國民航大學計算機科學與技術學院,天津,300300)

本文設計并實現了基于Java注解的規則引擎Drools業務規則開發框架。該開發框架針對Drools業務規則存在的無法語法檢查、無法調試等問題,基于Java注解技術,直接使用Java語言實現業務邏輯,單元測試通過后生成Drools業務規則,從而提升代碼質量并提高開發效率。

規則引擎;Drools;業務規則;Java注解;Java反射

Design and Implementation on Framework for Developing Drools Business Rules Based on Java Annotation

Zhou Zhongyu1,Li Yang1,Yang Chengyi1,Wang Huaichao2
(1.Travelsky Technology Limited,Beijing,100105;2.College of Computer Science and Technology, Civil Aviation University of China,Tianjin,300300)

We design and implement a framework for developing Drools business rules based on Java annotation in order to solve the problems such as absence of syntax checking, difficulty of debugging, etc. Using the framework developers implement business logic in Java language and translate Java files to Drools business rules after passing the unit test The framework is designed to improve code quality and efficiency

Rule Engine;Drools;Business Rules;Java Annotation;Java Reflect

2013年民航科技創新引導項目(MHRD20130216)。

猜你喜歡
引擎規則
以學促干 挺膺擔當 激活砥礪前行的紅色引擎
撐竿跳規則的制定
數獨的規則和演變
規則的正確打開方式
幸福(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
主站蜘蛛池模板: 97国产在线视频| 亚洲欧美另类久久久精品播放的| 四虎影视库国产精品一区| 麻豆国产原创视频在线播放| 久久精品国产精品一区二区| 毛片久久网站小视频| Aⅴ无码专区在线观看| 欧美日韩免费| 欧美全免费aaaaaa特黄在线| 成人福利在线视频免费观看| 伊人国产无码高清视频| 国产色网站| 午夜成人在线视频| 蜜桃臀无码内射一区二区三区| 亚洲无线视频| 蜜桃臀无码内射一区二区三区| 人人91人人澡人人妻人人爽| 中文无码影院| 国产麻豆另类AV| 国产一区三区二区中文在线| 无码又爽又刺激的高潮视频| 国产在线小视频| 国模粉嫩小泬视频在线观看| 亚洲欧美一区二区三区麻豆| 被公侵犯人妻少妇一区二区三区| 亚洲国产精品日韩欧美一区| 久久永久精品免费视频| 成人在线综合| 欧美人与性动交a欧美精品| 国产综合亚洲欧洲区精品无码| 亚洲最大在线观看| 国产在线精品香蕉麻豆| 人妻21p大胆| 青青草一区二区免费精品| 青青青国产视频手机| 1769国产精品免费视频| 亚洲激情区| 婷婷六月综合网| 久久精品国产91久久综合麻豆自制 | 日韩黄色在线| 亚洲av片在线免费观看| 国产成人午夜福利免费无码r| 超级碰免费视频91| 91无码视频在线观看| 99久久精品久久久久久婷婷| 久久国产亚洲偷自| 黄网站欧美内射| 波多野结衣久久精品| 久久先锋资源| 老司机午夜精品网站在线观看| 91精品国产自产在线观看| 老司机久久99久久精品播放| 欧美啪啪精品| 黄色网址免费在线| 免费在线观看av| 亚洲欧美精品在线| 欧美黄网站免费观看| 98精品全国免费观看视频| 伊人久久大香线蕉综合影视| 亚洲乱伦视频| 亚洲欧洲综合| 日本五区在线不卡精品| 91色在线观看| 精品视频在线一区| 亚洲欧美国产高清va在线播放| 欧美日韩国产在线人| 日韩欧美网址| 国产黑丝视频在线观看| 国产女人在线视频| 麻豆精品在线视频| 亚洲男人的天堂视频| 日韩国产亚洲一区二区在线观看| 色偷偷综合网| 亚洲av日韩综合一区尤物| 在线观看av永久| 国产91无毒不卡在线观看| 亚洲国语自产一区第二页| 四虎在线高清无码| 伊在人亚洲香蕉精品播放| 午夜日b视频| 日本日韩欧美| 亚洲精品老司机|