前言程序員
最傳統的軟件是揉雜在一塊兒的,1970年代爲了更好的方便開發,程序員將數據庫份離出來,方便信息的存儲。1980年代,應用層分離出展現層,使得產品更加優化,人性化,而1990年代後,使用規則引擎將業務規則分離單獨管理,使得業務系統可以更加靈活變更,響應速度更加快速,旗正商業規則管理平臺正式業務規則的管理專家數據庫
規則引擎由推理引擎發展而來,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來,並使用預約義的語義模塊寫業務決策。接受數據輸入,解釋業務規則,並根據業務規則作出業務決策。架構
應用背景性能
企業級管理者對企業IT系統的開發有着以下的要求:優化
1.爲提升效率,管理流程必須自動化,即便現代商業規則異常複雜。開放源代碼
2.市場要求業務規則常常變化,IT系統必須依據業務規則的變化快速、低成本的更新。對象
3.爲了快速、低成本的更新,業務人員應能直接管理IT系統中的規則,不須要程序開發人員參與。接口
目前國外大多數企業在信息管理上已經使用到了BRMS的架構來保證公司更加迅速準確的完成任務。咱們國內,大多數企業BRMS處理方面並不盡人意,多數人甚至不知道規則引擎是作什麼的。規則引擎實現了將業務決策從應用程序代碼中分離出來,並使用預約義的語義模塊編寫業務決策。使得BRMS構架更加明顯,使非技術業務人員能直接參與到業務規則管理工做中,使受限於複雜多變且不斷髮展的業務規則的應用程序和流程實現靈活的決策自動化。內存
規則引擎執行原理開發
以旗正規則引擎(Visual Rules solution)爲例規則引擎會根據規則包名稱,取得對應規則包編譯後的RSC文件。而後將RSC加載到內存中,生成規則包執行上下文。同時規則引擎將傳遞的參數傳遞到規則包執行上下文中,而後開始執行規則包。執行完畢後,再將規則包執行上下文中的數據,傳回給調用規則包的應用程序。整個執行原理很是簡單,所以最大限度的保證了規則運行平臺的穩定以及最佳的性能。
數據庫接口
規則包的對象庫中,定義瞭如下一些數據庫對象接口Database、Table、Select、View、Procedure。旗正規則引擎直接用JDBC來實現這些接口,最大限度的保證了數據庫對象調用的性能。固然用戶能夠根據本身的須要,從新來實現這些數據庫接口。
一 Excel接口
規則包須要調用的Excel接口主要是I Excel Book、I ExcelSheet、I Excel Table Sheet、I Excel X Y Sheet。旗正規則引擎採用POI來實現Excel接口。
二 內存表格接口
規則包須要調用的內存表格接口爲Sheet,旗正規則引擎採用Object[][]來實現內存表格接口的實現。
三Xml接口
規則包須要調用的XML接口爲Node。目前旗正規則引擎採用JDOM來實現。
如何調用
規則引擎是外部Java程序調用規則包的一組Java類,其包含在engine.jar中。 外部Java程序調用規則包時只須要用到兩個類。一個是 com. Flagleader .Engine .Rule Engine 。另外一個是 com. Flagleader .engine .Rule Engine Factory 。
Rule Engine Factory是獲得規則引擎實例的工廠類。 一般代碼爲
Rule Engine rule Engine = Rule Engine Factory .new Instance().get Rule Engine();
獲得規則引擎實例後,能夠調用規則引擎中的方法,主要是put、excute和get這三個方法。 put用於傳入須要傳入的值,excute 用於運行指定的規則包,get用於獲得傳出的值。 通常的調用代碼爲:
Rule Engine .put(傳入對象);
Rule Engine .excute("規則包調用名");
傳出對象 = rule Engine .get("傳出對象名");
使用規則引擎的優勢
使用規則引擎能夠經過下降實現複雜業務邏輯的組件的複雜性,下降應用程序的維護和可擴展性成本,其優勢以下:
1.分離商業決策者的商業決策邏輯和應用開發者的技術決策;
2.能有效的提升實現複雜邏輯代碼的可維護性;
3.在開發期間或部署後修復代碼缺陷;
4.應付特殊情況,即客戶一開始沒有提到要將業務邏輯考慮在內;
5.符合組織對敏捷或迭代開發過程的使用;
6.大多數規則引擎都支持規則的次序和規則衝突檢驗,支持簡單腳本語言的規則實現,支持通用開發語言的嵌入開發。
規則引擎供應商
目前業內有多個規則引擎可供使用,其中包括國內和國外。
1.國外的表明是:Drools(開放源代碼)和Ilog(IBM收購)
2.國內的表明是:旗正規則引擎(Visual rules solution)