李偉超,周興社,楊 剛,楊亞磊
(西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,陜西 西安 710129)
隨著企業(yè)功能的日益龐大化、經(jīng)營環(huán)境的日益復(fù)雜化,及時(shí)調(diào)整業(yè)務(wù)來應(yīng)對(duì)瞬息萬變的市場需求在企業(yè)生存發(fā)展中顯得尤為重要。規(guī)則引擎系統(tǒng)是完成業(yè)務(wù)邏輯快速變換的理想方案,它將業(yè)務(wù)邏輯的表達(dá)與執(zhí)行相分離,業(yè)務(wù)邏輯以業(yè)務(wù)規(guī)則的形式表示,業(yè)務(wù)流程以業(yè)務(wù)規(guī)則的執(zhí)行來完成,使業(yè)務(wù)邏輯的改變不會(huì)相應(yīng)引起系統(tǒng)本身的修改,從而滿足業(yè)務(wù)快速調(diào)整的實(shí)際需求。業(yè)務(wù)邏輯在部署執(zhí)行前,業(yè)務(wù)人員要使用規(guī)則引擎解釋執(zhí)行的規(guī)則描述語言將其描述成特定格式并存入規(guī)則庫。然而,由于在業(yè)務(wù)規(guī)則領(lǐng)域缺少相應(yīng)的標(biāo)準(zhǔn),不同的規(guī)則引擎提供了不同的規(guī)則描述語言,例如Drools[1]使用SRL描述規(guī)則,而Jess[2]使用Lisp描述規(guī)則。這種差異性導(dǎo)致了同一企業(yè)環(huán)境中很難使用不同的規(guī)則引擎,當(dāng)信息系統(tǒng)依賴的規(guī)則引擎需要升級(jí)更新或轉(zhuǎn)化到其他供應(yīng)商提供的規(guī)則引擎時(shí),需要采用新的規(guī)則描述語言將已部署的業(yè)務(wù)規(guī)則重新刻畫描述,這嚴(yán)重影響業(yè)務(wù)規(guī)則實(shí)施的效率,降低了系統(tǒng)的靈活性和可維護(hù)性。因而,尋求一種獨(dú)立于具體規(guī)則引擎的業(yè)務(wù)規(guī)則描述和表示方法是亟待解決的難題。
基于以上需求,本文在分析業(yè)務(wù)規(guī)則特點(diǎn)及現(xiàn)有業(yè)務(wù)規(guī)則生成工具的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了獨(dú)立于具體規(guī)則引擎的基于映射機(jī)制業(yè)務(wù)規(guī)則生成系統(tǒng)UniBRGS:設(shè)計(jì)了非技術(shù)性的近似英語語法的業(yè)務(wù)規(guī)則描述語言,便于業(yè)務(wù)人員便捷準(zhǔn)確地描述規(guī)則;采用XML定義了一套獨(dú)立于具體規(guī)則引擎的中間業(yè)務(wù)規(guī)則,根據(jù)規(guī)則間元素的映射關(guān)系,實(shí)現(xiàn)了元規(guī)則與中間規(guī)則、中間規(guī)則與具體規(guī)則引擎可識(shí)別業(yè)務(wù)規(guī)則之間的互相轉(zhuǎn)換,從而實(shí)現(xiàn)了不同規(guī)則引擎間業(yè)務(wù)規(guī)則的互相轉(zhuǎn)換。論文最后的實(shí)驗(yàn)表明該系統(tǒng)具有一定的可行性及靈活性。
Figure 1 UniBRGS system framework圖1 UniBRGS系統(tǒng)結(jié)構(gòu)圖
業(yè)務(wù)規(guī)則是用于指導(dǎo)業(yè)務(wù)活動(dòng)的規(guī)則或策略,廣泛存在于企業(yè)的信息系統(tǒng)中。業(yè)務(wù)規(guī)則組織(Business Rule Group)[3]給出的定義包含兩個(gè)層面的意思:從企業(yè)業(yè)務(wù)角度來看,業(yè)務(wù)規(guī)則是支持企業(yè)決策、影響或控制企業(yè)業(yè)務(wù)行為的指導(dǎo);從信息系統(tǒng)角度來看,業(yè)務(wù)規(guī)則是一條語句,它定義或約束業(yè)務(wù)的某些方面,其目的是為了斷言業(yè)務(wù)結(jié)構(gòu)、控制或影響業(yè)務(wù)的行為。業(yè)務(wù)規(guī)則滿足典型的一階邏輯模式,形如“條件-動(dòng)作”,即當(dāng)某種條件滿足時(shí),執(zhí)行規(guī)定的動(dòng)作。業(yè)務(wù)規(guī)則表述形式可描述為IF 〈Conditions〉 THEN 〈Actions〉。
目前關(guān)于業(yè)務(wù)規(guī)則表示及開發(fā)方面有很多的研究。RuleML[4]是基于XML的通用規(guī)則描述語言,通過XSLT轉(zhuǎn)換器可將其表示的規(guī)則轉(zhuǎn)化到其他語言表示的規(guī)則,從而實(shí)現(xiàn)不同規(guī)則系統(tǒng)之間的互操作。然而,XSLT轉(zhuǎn)換器只能實(shí)現(xiàn)XML表示的規(guī)則之間的轉(zhuǎn)換,不具有通用性。Drools是由JBoss和Red Hat支持開發(fā)的開源項(xiàng)目,包含規(guī)則編輯、管理和執(zhí)行等一系列工具。它定義了類似于Java語法的規(guī)則描述語言DRL,并且提供了圖形化規(guī)則編輯器Drools Guvnor。Jess是一款小巧靈活的Java規(guī)則引擎,它提供了類Lisp的規(guī)則語言和基于XML的規(guī)則語言,但其規(guī)則語言語法結(jié)構(gòu)繁雜,形式化程度較高,適合具有編程經(jīng)驗(yàn)的技術(shù)人員。同時(shí),Drools和Jess沒有提供任何規(guī)則互相轉(zhuǎn)換的工具,不利于系統(tǒng)的可操作性和移植性,無法實(shí)現(xiàn)信息系統(tǒng)在各規(guī)則引擎間的無縫遷移。
本文描述的UniBRGS系統(tǒng)采用分層體系架構(gòu)設(shè)計(jì),系統(tǒng)結(jié)構(gòu)如圖1所示。UniBRGS分為三個(gè)層次:表現(xiàn)層、中間層及轉(zhuǎn)換層。其中,表現(xiàn)層提供了基于向?qū)У腉UI規(guī)則編輯環(huán)境,業(yè)務(wù)人員可以使用定義的類自然語言定義業(yè)務(wù)規(guī)則,同時(shí)也可套用現(xiàn)有的規(guī)則模板,加速規(guī)則的開發(fā)。中間層根據(jù)定義好的業(yè)務(wù)規(guī)則描述語言以及業(yè)務(wù)對(duì)象所屬關(guān)系,對(duì)業(yè)務(wù)人員定義好的元規(guī)則進(jìn)行詞法、語法以及語義解析,將解析信息實(shí)時(shí)上傳至表現(xiàn)層,同時(shí)根據(jù)映射關(guān)系將元規(guī)則轉(zhuǎn)換成基于XML定義的中間業(yè)務(wù)規(guī)則。轉(zhuǎn)換層根據(jù)規(guī)則引擎可解釋執(zhí)行的目標(biāo)規(guī)則語法結(jié)構(gòu),構(gòu)建中間業(yè)務(wù)規(guī)則到目標(biāo)規(guī)則的映射關(guān)系及映射器,完成中間業(yè)務(wù)規(guī)則到目標(biāo)規(guī)則的相互轉(zhuǎn)換,從而實(shí)現(xiàn)目標(biāo)業(yè)務(wù)規(guī)則之間的互相轉(zhuǎn)換。
業(yè)務(wù)規(guī)則描述模型定義了描述業(yè)務(wù)規(guī)則的語法結(jié)構(gòu)與規(guī)范。業(yè)務(wù)分析人員深刻了解企業(yè)業(yè)務(wù)策略以及運(yùn)行過程,但他們難以直接將業(yè)務(wù)策略轉(zhuǎn)變?yōu)樾问交潭容^高的目標(biāo)業(yè)務(wù)規(guī)則。為此,面向業(yè)務(wù)人員設(shè)計(jì)了一套近似英語語法的業(yè)務(wù)規(guī)則描述語言UniRL,部分語法如下所示(采用巴科斯范式描述)。
〈RuleDef〉∷=IF 〈BoolExpr〉THEN 〈Action〉
〈BoolExpr〉∷=〈BoolExpr〉A(chǔ)ND 〈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è)務(wù)規(guī)則設(shè)計(jì)。
中間業(yè)務(wù)規(guī)則是目標(biāo)業(yè)務(wù)規(guī)則互相轉(zhuǎn)換的中間橋梁,是系統(tǒng)框架的核心。中間業(yè)務(wù)規(guī)則形式獨(dú)立于形式化程度較高的目標(biāo)規(guī)則,本文采用XML刻畫中間業(yè)務(wù)規(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是一個(gè)復(fù)雜類型節(jié)點(diǎn),包含name名字屬性和attribute、parameter、lhs和rhs四個(gè)元素。attribute表示規(guī)則的屬性,如描述信息、優(yōu)先級(jí)和有效期等。parameter表示規(guī)則的輸入?yún)?shù),每個(gè)參數(shù)有唯一的標(biāo)識(shí)符并與加載到工作內(nèi)存中的事實(shí)對(duì)象或全局變量相對(duì)應(yīng)。lhs元素標(biāo)記規(guī)則的前條件,包含多個(gè)condition元素, rhs元素標(biāo)記規(guī)則的執(zhí)行動(dòng)作,包含多個(gè)consequence元素,每個(gè)consequence元素表示一個(gè)對(duì)事實(shí)對(duì)象的操作。
(2)中間業(yè)務(wù)規(guī)則生成。
針對(duì)UniRL文法,采用LEX工具構(gòu)建詞法解析器,將元規(guī)則分解成單詞序列;采用遞歸下降分析方法構(gòu)建構(gòu)造語法解析器,根據(jù)單詞序列構(gòu)造成抽象語法樹AST;語義解析器根據(jù)AST以及業(yè)務(wù)對(duì)象關(guān)系,分析元規(guī)則是否符合業(yè)務(wù)對(duì)象的依賴關(guān)系;構(gòu)造UniRL文法元素與中間業(yè)務(wù)規(guī)則標(biāo)簽元素之間的一一映射關(guān)系,并由此將元規(guī)則轉(zhuǎn)換成中間業(yè)務(wù)規(guī)則。同時(shí),詞法、語法及語義解析過程中的錯(cuò)誤信息傳至表現(xiàn)層以及時(shí)提醒用戶。
現(xiàn)有規(guī)則引擎種類繁多,其對(duì)應(yīng)的目標(biāo)業(yè)務(wù)規(guī)則也千差萬別。為適用于不同規(guī)則引擎,UniBRGS系統(tǒng)針對(duì)每種目標(biāo)規(guī)則語言提供了與之對(duì)應(yīng)的專用轉(zhuǎn)換器,負(fù)責(zé)中間業(yè)務(wù)規(guī)則到一種目標(biāo)業(yè)務(wù)規(guī)則的互相轉(zhuǎn)換。分析目標(biāo)業(yè)務(wù)規(guī)則的語法元素,將中間業(yè)務(wù)規(guī)則與其元素間可以通過映射直接互相轉(zhuǎn)換的提取成映射規(guī)則(例如中間業(yè)務(wù)規(guī)則到Drools和Jess規(guī)則的部分映射關(guān)系表1所示),其他元素的轉(zhuǎn)換用專用轉(zhuǎn)換器以硬代碼實(shí)現(xiàn),從而提高轉(zhuǎn)換器的靈活性。當(dāng)需要引入新的目標(biāo)業(yè)務(wù)規(guī)則時(shí),只需添加對(duì)應(yīng)的轉(zhuǎn)換器即可,提高了系統(tǒng)靈活性和擴(kuò)展性。通過中間業(yè)務(wù)規(guī)則實(shí)現(xiàn)目標(biāo)規(guī)則間的互相轉(zhuǎn)換,降低了底層規(guī)則引擎與上層信息系統(tǒng)的耦合性。
Table 1 Mapping for element transformation between intermediate rule and targeted rule
基于以上設(shè)計(jì)方案,采用Jess和Drools作為目標(biāo)規(guī)則引擎實(shí)現(xiàn)UniBRGS原型系統(tǒng),并以表2中的打折規(guī)則為例驗(yàn)證系統(tǒng)設(shè)計(jì)的可行性。
Table 2 A discount rule for some market
具體實(shí)驗(yàn)過程如下:
(1)針對(duì)給出的某商場打折策略,在基于向?qū)У腉UI規(guī)則編輯環(huán)境中采用UniRL語法結(jié)構(gòu)正確對(duì)其刻畫描述。
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)將驗(yàn)證無誤的UniRL描述的規(guī)則通過UniBRGS轉(zhuǎn)化成面向Drools規(guī)則引擎的目標(biāo)規(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個(gè)顧客事實(shí)對(duì)象,按會(huì)員等級(jí)平均分成三類,每類顧客的消費(fèi)額為0到3 000之間的隨機(jī)數(shù)。構(gòu)建Drools規(guī)則引擎環(huán)境,加載上述面向Drools的業(yè)務(wù)規(guī)則,向工作內(nèi)存添加創(chuàng)建的事實(shí)對(duì)象,執(zhí)行業(yè)務(wù)規(guī)則。規(guī)則執(zhí)行結(jié)果與預(yù)期相同。
(3)不依賴于任何輸入,通過UniBRGS生成與上述業(yè)務(wù)規(guī)則對(duì)應(yīng)的面向Jess的目標(biāo)規(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è)務(wù)規(guī)則,向工作內(nèi)存添加同(2)一樣的事實(shí)對(duì)象,執(zhí)行業(yè)務(wù)規(guī)則。其執(zhí)行結(jié)果同(2)中Drools規(guī)則執(zhí)行結(jié)果一樣。
通過上述實(shí)驗(yàn)可得,UniBRGS可以快速準(zhǔn)確地完成業(yè)務(wù)規(guī)則的定義與轉(zhuǎn)化。通過引擎無關(guān)的中間規(guī)則,用戶可直接實(shí)現(xiàn)已生成的目標(biāo)規(guī)則到另外一種規(guī)則的轉(zhuǎn)換,從而實(shí)現(xiàn)信息系統(tǒng)在規(guī)則引擎間的無縫移植。同時(shí),UniBRGS并不只面向Drools和Jess,通過動(dòng)態(tài)添加目標(biāo)規(guī)則與中間規(guī)則元素間的映射關(guān)系,可支持更多規(guī)則引擎的業(yè)務(wù)規(guī)則。
當(dāng)前企業(yè)通過完成應(yīng)用系統(tǒng)與規(guī)則引擎的集成來統(tǒng)一定義、存儲(chǔ)、管理和部署運(yùn)行業(yè)務(wù)決策,從而降低企業(yè)應(yīng)用的復(fù)雜性,適應(yīng)萬變的市場需求。本文針對(duì)目前業(yè)務(wù)規(guī)則語言繁多而造成的信息系統(tǒng)難于升級(jí)或遷移等問題,提出了基于映射機(jī)制的業(yè)務(wù)規(guī)則生成系統(tǒng),使不同規(guī)則引擎所識(shí)別的業(yè)務(wù)規(guī)則之間可以互相轉(zhuǎn)換,從而使上層應(yīng)用可以不依賴于具體供應(yīng)商的規(guī)則引擎,降低了企業(yè)應(yīng)用系統(tǒng)與規(guī)則引擎的耦合性,提高了系統(tǒng)的靈活性和可移植性。本文UniBRGS原型實(shí)現(xiàn)是針對(duì)Drools和Jess的,未來工作將考慮支持更多主流的規(guī)則引擎,如OpenRules,同時(shí)研究規(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.