李偉超,周興社,楊 剛,楊亞磊
(西北工業(yè)大學計算機學院,陜西 西安 710129)
隨著企業(yè)功能的日益龐大化、經(jīng)營環(huán)境的日益復雜化,及時調(diào)整業(yè)務來應對瞬息萬變的市場需求在企業(yè)生存發(fā)展中顯得尤為重要。規(guī)則引擎系統(tǒng)是完成業(yè)務邏輯快速變換的理想方案,它將業(yè)務邏輯的表達與執(zhí)行相分離,業(yè)務邏輯以業(yè)務規(guī)則的形式表示,業(yè)務流程以業(yè)務規(guī)則的執(zhí)行來完成,使業(yè)務邏輯的改變不會相應引起系統(tǒng)本身的修改,從而滿足業(yè)務快速調(diào)整的實際需求。業(yè)務邏輯在部署執(zhí)行前,業(yè)務人員要使用規(guī)則引擎解釋執(zhí)行的規(guī)則描述語言將其描述成特定格式并存入規(guī)則庫。然而,由于在業(yè)務規(guī)則領域缺少相應的標準,不同的規(guī)則引擎提供了不同的規(guī)則描述語言,例如Drools[1]使用SRL描述規(guī)則,而Jess[2]使用Lisp描述規(guī)則。這種差異性導致了同一企業(yè)環(huán)境中很難使用不同的規(guī)則引擎,當信息系統(tǒng)依賴的規(guī)則引擎需要升級更新或轉(zhuǎn)化到其他供應商提供的規(guī)則引擎時,需要采用新的規(guī)則描述語言將已部署的業(yè)務規(guī)則重新刻畫描述,這嚴重影響業(yè)務規(guī)則實施的效率,降低了系統(tǒng)的靈活性和可維護性。因而,尋求一種獨立于具體規(guī)則引擎的業(yè)務規(guī)則描述和表示方法是亟待解決的難題。
基于以上需求,本文在分析業(yè)務規(guī)則特點及現(xiàn)有業(yè)務規(guī)則生成工具的基礎上,設計并實現(xiàn)了獨立于具體規(guī)則引擎的基于映射機制業(yè)務規(guī)則生成系統(tǒng)UniBRGS:設計了非技術性的近似英語語法的業(yè)務規(guī)則描述語言,便于業(yè)務人員便捷準確地描述規(guī)則;采用XML定義了一套獨立于具體規(guī)則引擎的中間業(yè)務規(guī)則,根據(jù)規(guī)則間元素的映射關系,實現(xiàn)了元規(guī)則與中間規(guī)則、中間規(guī)則與具體規(guī)則引擎可識別業(yè)務規(guī)則之間的互相轉(zhuǎn)換,從而實現(xiàn)了不同規(guī)則引擎間業(yè)務規(guī)則的互相轉(zhuǎn)換。論文最后的實驗表明該系統(tǒng)具有一定的可行性及靈活性。
Figure 1 UniBRGS system framework圖1 UniBRGS系統(tǒng)結(jié)構(gòu)圖
業(yè)務規(guī)則是用于指導業(yè)務活動的規(guī)則或策略,廣泛存在于企業(yè)的信息系統(tǒng)中。業(yè)務規(guī)則組織(Business Rule Group)[3]給出的定義包含兩個層面的意思:從企業(yè)業(yè)務角度來看,業(yè)務規(guī)則是支持企業(yè)決策、影響或控制企業(yè)業(yè)務行為的指導;從信息系統(tǒng)角度來看,業(yè)務規(guī)則是一條語句,它定義或約束業(yè)務的某些方面,其目的是為了斷言業(yè)務結(jié)構(gòu)、控制或影響業(yè)務的行為。業(yè)務規(guī)則滿足典型的一階邏輯模式,形如“條件-動作”,即當某種條件滿足時,執(zhí)行規(guī)定的動作。業(yè)務規(guī)則表述形式可描述為IF 〈Conditions〉 THEN 〈Actions〉。
目前關于業(yè)務規(guī)則表示及開發(fā)方面有很多的研究。RuleML[4]是基于XML的通用規(guī)則描述語言,通過XSLT轉(zhuǎn)換器可將其表示的規(guī)則轉(zhuǎn)化到其他語言表示的規(guī)則,從而實現(xiàn)不同規(guī)則系統(tǒng)之間的互操作。然而,XSLT轉(zhuǎn)換器只能實現(xiàn)XML表示的規(guī)則之間的轉(zhuǎn)換,不具有通用性。Drools是由JBoss和Red Hat支持開發(fā)的開源項目,包含規(guī)則編輯、管理和執(zhí)行等一系列工具。它定義了類似于Java語法的規(guī)則描述語言DRL,并且提供了圖形化規(guī)則編輯器Drools Guvnor。Jess是一款小巧靈活的Java規(guī)則引擎,它提供了類Lisp的規(guī)則語言和基于XML的規(guī)則語言,但其規(guī)則語言語法結(jié)構(gòu)繁雜,形式化程度較高,適合具有編程經(jīng)驗的技術人員。同時,Drools和Jess沒有提供任何規(guī)則互相轉(zhuǎn)換的工具,不利于系統(tǒng)的可操作性和移植性,無法實現(xiàn)信息系統(tǒng)在各規(guī)則引擎間的無縫遷移。
本文描述的UniBRGS系統(tǒng)采用分層體系架構(gòu)設計,系統(tǒng)結(jié)構(gòu)如圖1所示。UniBRGS分為三個層次:表現(xiàn)層、中間層及轉(zhuǎn)換層。其中,表現(xiàn)層提供了基于向?qū)У腉UI規(guī)則編輯環(huán)境,業(yè)務人員可以使用定義的類自然語言定義業(yè)務規(guī)則,同時也可套用現(xiàn)有的規(guī)則模板,加速規(guī)則的開發(fā)。中間層根據(jù)定義好的業(yè)務規(guī)則描述語言以及業(yè)務對象所屬關系,對業(yè)務人員定義好的元規(guī)則進行詞法、語法以及語義解析,將解析信息實時上傳至表現(xiàn)層,同時根據(jù)映射關系將元規(guī)則轉(zhuǎn)換成基于XML定義的中間業(yè)務規(guī)則。轉(zhuǎn)換層根據(jù)規(guī)則引擎可解釋執(zhí)行的目標規(guī)則語法結(jié)構(gòu),構(gòu)建中間業(yè)務規(guī)則到目標規(guī)則的映射關系及映射器,完成中間業(yè)務規(guī)則到目標規(guī)則的相互轉(zhuǎn)換,從而實現(xiàn)目標業(yè)務規(guī)則之間的互相轉(zhuǎn)換。
業(yè)務規(guī)則描述模型定義了描述業(yè)務規(guī)則的語法結(jié)構(gòu)與規(guī)范。業(yè)務分析人員深刻了解企業(yè)業(yè)務策略以及運行過程,但他們難以直接將業(yè)務策略轉(zhuǎn)變?yōu)樾问交潭容^高的目標業(yè)務規(guī)則。為此,面向業(yè)務人員設計了一套近似英語語法的業(yè)務規(guī)則描述語言UniRL,部分語法如下所示(采用巴科斯范式描述)。
〈RuleDef〉∷=IF 〈BoolExpr〉THEN 〈Action〉
〈BoolExpr〉∷=〈BoolExpr〉AND 〈BoolExpr〉|
〈BoolExpr〉OR〈BoolExpr〉|
NOT 〈BoolExpr〉|
〈Expr〉[is] 〈RelationOp〉〈Expr〉
〈RelationOP〉∷=greater than|less than|equal to|…
〈Expr〉∷=〈Expr〉〈Op〉〈Expr〉| [〈Qualifier〉] 〈Object〉
〈Object〉∷=ObjName|ObjName’s ObjName|Const|…
〈Op〉∷=add|minus|multiply| divide
〈Qualifier〉∷=a|an|the|its|…
〈Action〉∷=〈ActionSt〉| 〈Action〉; 〈ActionSt〉
〈ActionSt〉∷=[〈Object〉] 〈Method〉[〈ParameterList〉]
〈ParameterList〉∷=〈Object〉| 〈ParameterList〉, 〈Object〉
…
(1)中間業(yè)務規(guī)則設計。
中間業(yè)務規(guī)則是目標業(yè)務規(guī)則互相轉(zhuǎn)換的中間橋梁,是系統(tǒng)框架的核心。中間業(yè)務規(guī)則形式獨立于形式化程度較高的目標規(guī)則,本文采用XML刻畫中間業(yè)務規(guī)則,其用XML Schema定義的部分語法結(jié)構(gòu)如下所示:
〈xs:element name="rule" type="rule:ruleType"/〉
〈xs:complexType name="ruleType"〉
〈xs:sequence〉
〈xs:element maxOccurs="unbounded" minOccurs="0" ref="rule:attribute"/〉
〈xs:element maxOccurs="unbounded" minOccurs="0" ref="rule:parameter"/〉
〈xs:element ref="rule:lhs"/〉
〈xs:element ref="rule:rhs"/〉
〈/xs:sequence〉
〈xs:attribute name="name" type="xs:string" use="required"/〉
〈/xs:complexType〉
…
元素rule是一個復雜類型節(jié)點,包含name名字屬性和attribute、parameter、lhs和rhs四個元素。attribute表示規(guī)則的屬性,如描述信息、優(yōu)先級和有效期等。parameter表示規(guī)則的輸入?yún)?shù),每個參數(shù)有唯一的標識符并與加載到工作內(nèi)存中的事實對象或全局變量相對應。lhs元素標記規(guī)則的前條件,包含多個condition元素, rhs元素標記規(guī)則的執(zhí)行動作,包含多個consequence元素,每個consequence元素表示一個對事實對象的操作。
(2)中間業(yè)務規(guī)則生成。
針對UniRL文法,采用LEX工具構(gòu)建詞法解析器,將元規(guī)則分解成單詞序列;采用遞歸下降分析方法構(gòu)建構(gòu)造語法解析器,根據(jù)單詞序列構(gòu)造成抽象語法樹AST;語義解析器根據(jù)AST以及業(yè)務對象關系,分析元規(guī)則是否符合業(yè)務對象的依賴關系;構(gòu)造UniRL文法元素與中間業(yè)務規(guī)則標簽元素之間的一一映射關系,并由此將元規(guī)則轉(zhuǎn)換成中間業(yè)務規(guī)則。同時,詞法、語法及語義解析過程中的錯誤信息傳至表現(xiàn)層以及時提醒用戶。
現(xiàn)有規(guī)則引擎種類繁多,其對應的目標業(yè)務規(guī)則也千差萬別。為適用于不同規(guī)則引擎,UniBRGS系統(tǒng)針對每種目標規(guī)則語言提供了與之對應的專用轉(zhuǎn)換器,負責中間業(yè)務規(guī)則到一種目標業(yè)務規(guī)則的互相轉(zhuǎn)換。分析目標業(yè)務規(guī)則的語法元素,將中間業(yè)務規(guī)則與其元素間可以通過映射直接互相轉(zhuǎn)換的提取成映射規(guī)則(例如中間業(yè)務規(guī)則到Drools和Jess規(guī)則的部分映射關系表1所示),其他元素的轉(zhuǎn)換用專用轉(zhuǎn)換器以硬代碼實現(xiàn),從而提高轉(zhuǎn)換器的靈活性。當需要引入新的目標業(yè)務規(guī)則時,只需添加對應的轉(zhuǎn)換器即可,提高了系統(tǒng)靈活性和擴展性。通過中間業(yè)務規(guī)則實現(xiàn)目標規(guī)則間的互相轉(zhuǎn)換,降低了底層規(guī)則引擎與上層信息系統(tǒng)的耦合性。
Table 1 Mapping for element transformation between intermediate rule and targeted rule
基于以上設計方案,采用Jess和Drools作為目標規(guī)則引擎實現(xiàn)UniBRGS原型系統(tǒng),并以表2中的打折規(guī)則為例驗證系統(tǒng)設計的可行性。
Table 2 A discount rule for some market
具體實驗過程如下:
(1)針對給出的某商場打折策略,在基于向?qū)У腉UI規(guī)則編輯環(huán)境中采用UniRL語法結(jié)構(gòu)正確對其刻畫描述。
IF
a customer’s type is GOLDEN and its purchase is greater than 500 or
a customer’s type is SILVER and its purchase is greater than 1 000 or
a customer’s type is BRONZE and its purchase is greater than 2 000
THEN
set discount 0.12 ; print it;
(2)將驗證無誤的UniRL描述的規(guī)則通過UniBRGS轉(zhuǎn)化成面向Drools規(guī)則引擎的目標規(guī)則,如下所示:
import com.custrule.Customer
rule "customerRule"
when
cust:(Customer(type=="GOLDEN", purchase>500) or
Customer(type=="SILVER", purchase>1 000) or
Customer(type=="BRONZE", purchase>2 000) )
then
cust.setDiscount(0.12);
System.out.println(cust);
end
創(chuàng)建1 000個顧客事實對象,按會員等級平均分成三類,每類顧客的消費額為0到3 000之間的隨機數(shù)。構(gòu)建Drools規(guī)則引擎環(huán)境,加載上述面向Drools的業(yè)務規(guī)則,向工作內(nèi)存添加創(chuàng)建的事實對象,執(zhí)行業(yè)務規(guī)則。規(guī)則執(zhí)行結(jié)果與預期相同。
(3)不依賴于任何輸入,通過UniBRGS生成與上述業(yè)務規(guī)則對應的面向Jess的目標規(guī)則,如下所示:
(import com.custrule.Customer)
(deftemplate Customer (declare (from-class Customer)))
(defrule customerRule
(Customer{(purchase>500 && type=="GOLDEN")‖
(purchase>1 000 && type=="SILVER")‖
(purchase>2 000 && type=="BRONZE")
}(OBJECT ?cust))
=>
(?cust setDiscount 0.12)
(printout t (?cust toString) crlf))
同樣地,構(gòu)建Jess規(guī)則引擎環(huán)境,加載面向Jess的業(yè)務規(guī)則,向工作內(nèi)存添加同(2)一樣的事實對象,執(zhí)行業(yè)務規(guī)則。其執(zhí)行結(jié)果同(2)中Drools規(guī)則執(zhí)行結(jié)果一樣。
通過上述實驗可得,UniBRGS可以快速準確地完成業(yè)務規(guī)則的定義與轉(zhuǎn)化。通過引擎無關的中間規(guī)則,用戶可直接實現(xiàn)已生成的目標規(guī)則到另外一種規(guī)則的轉(zhuǎn)換,從而實現(xiàn)信息系統(tǒng)在規(guī)則引擎間的無縫移植。同時,UniBRGS并不只面向Drools和Jess,通過動態(tài)添加目標規(guī)則與中間規(guī)則元素間的映射關系,可支持更多規(guī)則引擎的業(yè)務規(guī)則。
當前企業(yè)通過完成應用系統(tǒng)與規(guī)則引擎的集成來統(tǒng)一定義、存儲、管理和部署運行業(yè)務決策,從而降低企業(yè)應用的復雜性,適應萬變的市場需求。本文針對目前業(yè)務規(guī)則語言繁多而造成的信息系統(tǒng)難于升級或遷移等問題,提出了基于映射機制的業(yè)務規(guī)則生成系統(tǒng),使不同規(guī)則引擎所識別的業(yè)務規(guī)則之間可以互相轉(zhuǎn)換,從而使上層應用可以不依賴于具體供應商的規(guī)則引擎,降低了企業(yè)應用系統(tǒng)與規(guī)則引擎的耦合性,提高了系統(tǒng)的靈活性和可移植性。本文UniBRGS原型實現(xiàn)是針對Drools和Jess的,未來工作將考慮支持更多主流的規(guī)則引擎,如OpenRules,同時研究規(guī)則間轉(zhuǎn)換的完備性問題。
[1] JBoss Community. Drools—The business logic integration platform [EB/OL].[2013-05-07].http://www.jboss.org/drools/.
[2] Sandia National Laboratories.Jess,the rule engine for the Java platform[EB/OL].[2013-05-24].http://www.jessrules.com.
[3] Business Rule Group[EB/OL].[2013-06-13].http://www.businessrulesgroup.org/defnbrg.shtml.
[4] RuleML.The rule markup initiative[EB/OL].[2013-08-14].http://www.ruleml.org/.
[5] Rosenberg F, Dustdar S. Towards a distributed service-oriented business rules system[C]∥Proc of the 3rd IEEE European Conference on Web Services, 2005:11.
[6] Tosanguan P, Suwannasart T. An approach for defining rule as functions in rule-based software development[C]∥Proc of the 7th International Conference on Digital Information Management, 2012:30-34.
[7] Nagl C,Rosenberg F,Dustdar S.VIDRE—A distributed service-oriented business rule engine based on RuleML[C]∥Proc of the 10th International Enterprise Distributed Object Computing Conference, 2006:35-44.
[8] Fu G, Shao J, Embury S M, et al. A framework for business rule presentation[C]∥Proc of the 12th IEEE Internat-ional Workshop on Database and Expert Systems Applications, 2001:922-926.
[9] zur Muehlen M, Indulska M. Modeling languages for business processes and business rules:A representational analysis[J]. Information Systems, 2010, 35(4):379-390.
[10] Bona D D, Re G L, Aiello G, et al. A methodology for graphical modeling of business rules[C]∥Proc of the 5th UKSim European Symposium on Computer Modeling and Simulation, 2011:102-106.