業(yè)務(wù)規(guī)則管理系統(tǒng)的基本原理是:用一個(gè)或多個(gè)規(guī)則引擎替換以程序代碼“固化”在應(yīng)用系統(tǒng)中的業(yè)務(wù)邏輯。一個(gè)完善的BRMS可以對(duì)業(yè)務(wù)規(guī)則的整個(gè)生命周期實(shí)現(xiàn)全程管理。

業(yè)務(wù)規(guī)則的全生命周期管理如圖1所示。BRMS在應(yīng)用系統(tǒng)中的地位與數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)類似,處于比較基礎(chǔ)的位置,是其他高端應(yīng)用的基石。圖2是GIGA Information Group 給出的IT架構(gòu)中BRMS的位置圖。

業(yè)務(wù)規(guī)則管理如何實(shí)現(xiàn)?
業(yè)務(wù)規(guī)則
一個(gè)業(yè)務(wù)規(guī)則包含一組條件和在此條件下執(zhí)行的操作,它們表示業(yè)務(wù)規(guī)則應(yīng)用程序的一段業(yè)務(wù)邏輯。業(yè)務(wù)規(guī)則通常應(yīng)該由業(yè)務(wù)分析人員和策略管理者開發(fā)和修改,但有些復(fù)雜的業(yè)務(wù)規(guī)則也可以由技術(shù)人員使用面向?qū)ο蟮募夹g(shù)語(yǔ)言或腳本來(lái)定制。業(yè)務(wù)規(guī)則的理論基礎(chǔ)是:設(shè)置一個(gè)或多個(gè)條件,當(dāng)滿足這些條件時(shí)會(huì)觸發(fā)一個(gè)或多個(gè)操作。
規(guī)則引擎
這是一種嵌入在應(yīng)用程序中的組件,它的任務(wù)是把當(dāng)前提交給引擎的數(shù)據(jù)對(duì)象與加載在引擎中的業(yè)務(wù)規(guī)則進(jìn)行測(cè)試和比對(duì),激活那些符合當(dāng)前數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則,根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,觸發(fā)應(yīng)用程序中對(duì)應(yīng)的操作。
目前主流的規(guī)則引擎組件多是基于Java和C++程序語(yǔ)言環(huán)境。在2000年11月,Java Community Process(簡(jiǎn)稱JCP) 組織開始著手起草Java規(guī)則引擎的API標(biāo)準(zhǔn),即JSR 94 規(guī)范。參與JSR 94起草的有BEA、IBM、ILOG、甲骨文、Novell、ATG、Unisys、Fujitsu等著名的軟件企業(yè)。JSR 94 在2003年11月25日正式定稿,支持JSR 94標(biāo)準(zhǔn)的規(guī)則引擎也幾乎同時(shí)推向市場(chǎng),包括ILOG 的JRules和Blaze的Advisor。
規(guī)則引擎的使用方式
由于規(guī)則引擎是軟件組件,所以只有開發(fā)人員才能夠通過(guò)程序接口的方式來(lái)使用和控制它,規(guī)則引擎的程序接口至少包含以下幾種API:加載和卸載規(guī)則集的API;數(shù)據(jù)操作的API;引擎執(zhí)行的API。開發(fā)人員在程序中使用規(guī)則引擎基本遵循以下5個(gè)典型的步驟:創(chuàng)建規(guī)則引擎對(duì)象;向引擎中加載規(guī)則集或更換規(guī)則集;向引擎提交需要被規(guī)則集處理的數(shù)據(jù)對(duì)象集合;命令引擎執(zhí)行;導(dǎo)出引擎執(zhí)行結(jié)果,從引擎中撤出處理過(guò)的數(shù)據(jù)。使用了規(guī)則引擎之后,許多涉及業(yè)務(wù)邏輯的程序代碼基本被這五個(gè)典型步驟所取代。
一個(gè)開放的業(yè)務(wù)規(guī)則引擎應(yīng)該可以“嵌入”在應(yīng)用程序的任何位置,不同位置的規(guī)則引擎可以使用不同的規(guī)則集,用于處理不同的數(shù)據(jù)對(duì)象。此外,對(duì)使用引擎的數(shù)量沒(méi)有限制。
規(guī)則引擎的內(nèi)部實(shí)現(xiàn)
規(guī)則引擎的基本機(jī)制是:對(duì)提交給引擎的數(shù)據(jù)對(duì)象進(jìn)行檢索,根據(jù)這些對(duì)象的當(dāng)前屬性值和它們之間的關(guān)系,從加載到引擎的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,創(chuàng)建這些規(guī)則的執(zhí)行實(shí)例。這些實(shí)例將在引擎接到執(zhí)行指令時(shí)、依照某種優(yōu)先序依次執(zhí)行。一般,規(guī)則引擎內(nèi)部由下面幾個(gè)部分構(gòu)成:工作內(nèi)存,用于存放被引擎引用的數(shù)據(jù)對(duì)象集合;規(guī)則執(zhí)行隊(duì)列,用于存放被激活的規(guī)則執(zhí)行實(shí)例;靜態(tài)規(guī)則區(qū),用于存放所有被加載的業(yè)務(wù)規(guī)則,這些規(guī)則將按照某種數(shù)據(jù)結(jié)構(gòu)組織,當(dāng)工作區(qū)中的數(shù)據(jù)發(fā)生改變后,引擎需要迅速根據(jù)工作區(qū)中的對(duì)象現(xiàn)狀,調(diào)整規(guī)則執(zhí)行隊(duì)列中的規(guī)則執(zhí)行實(shí)例。規(guī)則引擎的結(jié)構(gòu)示意圖如圖3所示。

任何一個(gè)規(guī)則引擎都需要很好地解決規(guī)則的推理機(jī)制和規(guī)則條件匹配的效率問(wèn)題。
當(dāng)引擎執(zhí)行時(shí),會(huì)根據(jù)規(guī)則執(zhí)行隊(duì)列中的優(yōu)先順序逐條執(zhí)行規(guī)則執(zhí)行實(shí)例,由于規(guī)則的執(zhí)行部分可能會(huì)改變工作區(qū)的數(shù)據(jù)對(duì)象,從而會(huì)使隊(duì)列中的某些規(guī)則執(zhí)行實(shí)例因?yàn)闂l件改變而失效,必須從隊(duì)列中撤銷,也可能會(huì)激活原來(lái)不滿足條件的規(guī)則,生成新的規(guī)則執(zhí)行實(shí)例進(jìn)入隊(duì)列。于是就產(chǎn)生了一種“動(dòng)態(tài)”的規(guī)則執(zhí)行鏈,形成規(guī)則的推理機(jī)制。這種規(guī)則的“鏈?zhǔn)健狈磻?yīng)完全是由工作區(qū)中的數(shù)據(jù)驅(qū)動(dòng)的。
規(guī)則條件匹配的效率決定了引擎的性能,引擎需要迅速測(cè)試工作區(qū)中的數(shù)據(jù)對(duì)象,從加載的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,生成規(guī)則執(zhí)行實(shí)例。1982年美國(guó)卡耐基·梅隆大學(xué)的Charles L. Forgy發(fā)明了一種叫Rete算法,很好地解決了這方面的問(wèn)題。目前世界頂尖的商用業(yè)務(wù)規(guī)則引擎產(chǎn)品基本上都使用Rete算法。
BOM賦予規(guī)則行業(yè)特性
業(yè)務(wù)規(guī)則一定是針對(duì)某種業(yè)務(wù)的,不同的業(yè)務(wù)有自己特有的業(yè)務(wù)模型——業(yè)務(wù)對(duì)象模型(Business Object Mode,簡(jiǎn)稱BOM)。BOM為業(yè)務(wù)規(guī)則語(yǔ)言提供了絕大多數(shù)的詞匯,多由業(yè)務(wù)系統(tǒng)分析員設(shè)計(jì),由開發(fā)人員具體實(shí)現(xiàn)。從面向?qū)ο蟮木幊探嵌葋?lái)看,BOM就是一個(gè)簡(jiǎn)化的類圖,類圖中有類名、類的屬性、類的方法等。這些要素都將是業(yè)務(wù)規(guī)則語(yǔ)言中的基本“詞匯”。BOM的來(lái)源可以是Java對(duì)象模型、C++對(duì)象模型、XML Schema、Web服務(wù)定義等。
假定我們有一個(gè)簡(jiǎn)單的寵物商店購(gòu)物車應(yīng)用程序,在這個(gè)應(yīng)用程序中,顧客能夠在購(gòu)物車中放入各種寵物和相關(guān)物品對(duì)象。這個(gè)應(yīng)用程序的業(yè)務(wù)對(duì)象集合就可以有ShoppingCart(購(gòu)物車)、Customer(用戶)、Item (條目)和ItemType(條目類型)這幾個(gè)類。
表述業(yè)務(wù)規(guī)則的語(yǔ)法就是業(yè)務(wù)規(guī)則語(yǔ)言。由于規(guī)則語(yǔ)言的使用者主要有兩類:業(yè)務(wù)人員和技術(shù)人員,所以規(guī)則語(yǔ)言一般也分為兩類:“面向程序技術(shù)”的規(guī)則語(yǔ)言,它技術(shù)性很強(qiáng),可讀性較弱,比較適合IT 技術(shù)人員使用,一般每個(gè)規(guī)則引擎開發(fā)商都有自己的一套“面向程序技術(shù)”的規(guī)則語(yǔ)言語(yǔ)法,不過(guò)OASIS組織定義了不同應(yīng)用情況下的規(guī)則語(yǔ)言規(guī)范,包括SRML(Simple Rule Markup Language),BMRL(Business Markup Rule Language)和RuleML(Rule Markup Language)等;“面向業(yè)務(wù)”的規(guī)則語(yǔ)言,它是業(yè)務(wù)人員使用的語(yǔ)言,必須具備非技術(shù)性和可定制性,通常它需要經(jīng)過(guò)“翻譯”之后才能被規(guī)則引擎解析。BRMS必須提供這種“翻譯”機(jī)制,而開發(fā)人員要實(shí)現(xiàn)從“面向業(yè)務(wù)”規(guī)則語(yǔ)言到“面向程序”規(guī)則語(yǔ)言的映射。
“面向業(yè)務(wù)”的規(guī)則語(yǔ)言無(wú)論從語(yǔ)法上還是語(yǔ)句結(jié)構(gòu)上都可能千變?nèi)f化,不同行業(yè)可能有自己的“行話”。一個(gè)好的BRMS應(yīng)該提供一個(gè)完善的規(guī)則語(yǔ)言框架,能夠迅速地為業(yè)務(wù)人員定制不同的“行話”,否則業(yè)務(wù)人員還是無(wú)法真正成為業(yè)務(wù)規(guī)則的主人。
“單純”的規(guī)則如何互連?
業(yè)務(wù)規(guī)則有一個(gè)非常明顯的特性:?jiǎn)渭冃?。每個(gè)業(yè)務(wù)規(guī)則只描述自己特有的條件和滿足條件的操作,業(yè)務(wù)規(guī)則本身并不關(guān)心它與其他規(guī)則的關(guān)系,如優(yōu)先關(guān)系、互斥關(guān)系、包含關(guān)系等。每個(gè)業(yè)務(wù)規(guī)則本身可以有自己的屬性,稱元信息,可以用來(lái)處理規(guī)則之間相關(guān)性,例如引擎可以使用規(guī)則的優(yōu)先級(jí)來(lái)依序執(zhí)行規(guī)則的操作。
有些BRMS還提供一種稱為“規(guī)則流”的定制功能。規(guī)則流是一個(gè)圖表,定義了解決問(wèn)題或執(zhí)行業(yè)務(wù)流程的順序。類似于統(tǒng)一建模語(yǔ)言(UML)的活動(dòng)圖,由一組任務(wù)以及定義這些任務(wù)之間執(zhí)行順序的轉(zhuǎn)換邏輯組成。一個(gè)轉(zhuǎn)換由條件控制,只有當(dāng)該限制條件為“真”時(shí)才能完成這種轉(zhuǎn)換。
這些任務(wù)可以是規(guī)則任務(wù)、函數(shù)任務(wù)或子規(guī)則流任務(wù)。規(guī)則任務(wù)包含一組要作為任務(wù)主體執(zhí)行的規(guī)則,規(guī)則的執(zhí)行邏輯由用戶設(shè)置的任務(wù)屬性嚴(yán)格控制。這些屬性決定規(guī)則的排序、規(guī)則觸發(fā)策略、執(zhí)行算法等;函數(shù)任務(wù)包含要作為任務(wù)主體執(zhí)行的腳本代碼;子規(guī)則流任務(wù)則包含任務(wù)開始后將依次執(zhí)行的子規(guī)則流。
為了方便開發(fā)人員和業(yè)務(wù)人員管理業(yè)務(wù)規(guī)則,BRMS必須提供具有直觀用戶界面的工具來(lái)實(shí)現(xiàn)業(yè)務(wù)規(guī)則管理。規(guī)則管理工具至少應(yīng)該具備以下功能:規(guī)則的定制和編輯、規(guī)則流的定制、決策表形式的規(guī)則定制、規(guī)則的查詢、規(guī)則有效期限的控制、規(guī)則的組織結(jié)構(gòu)、規(guī)則模板的定制、規(guī)則庫(kù)訪問(wèn)權(quán)限的控制、規(guī)則變更歷史的記錄、規(guī)則文檔的管理等。
·小資料2·
業(yè)務(wù)規(guī)則管理系統(tǒng)其實(shí)是一組工具集,它包括:規(guī)則引擎、規(guī)則庫(kù)、規(guī)則語(yǔ)言框架、規(guī)則管理集成開發(fā)環(huán)境。業(yè)務(wù)規(guī)則管理系統(tǒng)的基本工作原理如圖所示。
規(guī)則引擎(Rules Engine)

是執(zhí)行業(yè)務(wù)規(guī)則的軟件組件,它嵌入在程序中,是業(yè)務(wù)規(guī)則管理系統(tǒng)的核心元素。規(guī)則引擎的類型有:簡(jiǎn)單型、數(shù)據(jù)中心型和面向事務(wù)型。
規(guī)則庫(kù)(Rules Repository)及其服務(wù)機(jī)制
用于存儲(chǔ)規(guī)則和規(guī)則元數(shù)據(jù)(Meta Data)以及與規(guī)則有關(guān)的屬性。它提供一組工具用于存儲(chǔ)、分類、查詢、版本控制、權(quán)限控制、測(cè)試、提交等,規(guī)則的狀態(tài)和有效性可以跟蹤。規(guī)則庫(kù)可以依托文件系統(tǒng)或數(shù)據(jù)庫(kù)管理系統(tǒng)。
規(guī)則語(yǔ)言框架(Rules Language Framework)
規(guī)則語(yǔ)言一般分為兩類:“面向程序技術(shù)”的規(guī)則語(yǔ)言,使用者是技術(shù)人員;“面向業(yè)務(wù)”的規(guī)則語(yǔ)言,使用者是業(yè)務(wù)人員。規(guī)則語(yǔ)言框架則為定制“面向業(yè)務(wù)”的規(guī)則語(yǔ)言提供支持。
規(guī)則管理工具(Rules Management Tool)
用于管理、創(chuàng)建、修改和部署業(yè)務(wù)規(guī)則的圖形化工具,易用性強(qiáng),除了開發(fā)人員外,業(yè)務(wù)人員也可以使用這套圖形化工具實(shí)現(xiàn)對(duì)規(guī)則的管理。
規(guī)則集成開發(fā)環(huán)境(Rules IDE)
一般規(guī)則集成開發(fā)環(huán)境只有規(guī)則編輯器,而高級(jí)的規(guī)則集成開發(fā)環(huán)境可以實(shí)現(xiàn)對(duì)規(guī)則和規(guī)則庫(kù)的管理:如規(guī)則的創(chuàng)建、分類、檢索、修改、版本控制、權(quán)限管理等;甚至可以實(shí)現(xiàn)對(duì)多個(gè)規(guī)則引擎的“在線”調(diào)試;對(duì)規(guī)則集合進(jìn)行沖突檢查等。
一個(gè)完整的BRMS應(yīng)該提供規(guī)則管理(Rules Management)、規(guī)則部署(ules Deployment)、規(guī)則分析(Rules Analysis)、規(guī)則定制和設(shè)計(jì)(Rules Design and Authoring)等功能。
(計(jì)算機(jī)世界報(bào) 第14期 B6、B7)