dev2dev 首頁(yè) > 
資源中心 > 
技術(shù)文章
企業(yè)平臺(tái)中的業(yè)務(wù)規(guī)則引擎
  業(yè)務(wù)策略并不是靜態(tài)的,它們經(jīng)常變更,且其關(guān)聯(lián)的業(yè)務(wù)流程也會(huì)隨之變更。正是由于這些變更,故而有必要在實(shí)現(xiàn)和修改業(yè)務(wù)流程時(shí)保持靈活性,從而在激烈的競(jìng)爭(zhēng)中贏得一席之地。業(yè)務(wù)規(guī)則引擎 可以實(shí)現(xiàn)所需的這種靈活性。 
  本文將準(zhǔn)工業(yè)標(biāo)準(zhǔn)ILOG Jrules與BEA WebLogic Platform 8.1內(nèi)的基于XML的規(guī)則引擎進(jìn)行了比較。文章還討論了在將規(guī)則引擎集成到J2EE平臺(tái)過(guò)程中Java Specification Request (JSR) 94所扮演的角色。因?yàn)闃I(yè)務(wù)規(guī)則在重要的真正業(yè)務(wù)流程中具有很高的復(fù)雜性,所以對(duì)諸如銷售代表這樣的非IT人員來(lái)說(shuō),擁有一個(gè)工具環(huán)境且能保證其有適當(dāng)?shù)目捎眯允欠浅V匾?。本文使用了一個(gè)基于銀行的真正業(yè)務(wù)流程的應(yīng)用程序作為原型進(jìn)行討論。 
動(dòng)機(jī)  更新業(yè)務(wù)流程的平均周期已經(jīng)從1980年的84個(gè)月縮短到了現(xiàn)在的6個(gè)月,而且IT解決方案交付周期也從30個(gè)月縮短到了3個(gè)月(參見(jiàn)圖1)。在銀行業(yè)也是這樣。其中的核心元素包括銀行業(yè)的工業(yè)化、消費(fèi)者需求的更改、競(jìng)爭(zhēng)的日趨激烈以及政府調(diào)控的影響。另外,銀行的業(yè)務(wù)環(huán)境和操作流程也在不斷變化。但是,當(dāng)試圖使受影響的軟件系統(tǒng)適應(yīng)這些改變時(shí),出現(xiàn)了很大的延遲。從技術(shù)的觀點(diǎn)來(lái)看,有高度適應(yīng)性和靈活性是很有必要的。但是因?yàn)殂y行擁有高度異構(gòu)的系統(tǒng)拓?fù)洌湎到y(tǒng)和接口(包含單片主機(jī)系統(tǒng))的數(shù)量非??捎^,所以要實(shí)現(xiàn)這一點(diǎn)很難。
 

圖1. 1980年以來(lái)業(yè)務(wù)流程周期和IT解決方案交付周期的發(fā)展
  面向服務(wù)的架構(gòu)(SOA)能提供調(diào)整業(yè)務(wù)流程和技術(shù)實(shí)現(xiàn)過(guò)程中所需的靈活性。此處對(duì)帶有封裝的功能的服務(wù)進(jìn)行了定義,這些服務(wù)通過(guò)標(biāo)準(zhǔn)化的接口和協(xié)議(如SOAP、WSDL、UDDI或J2EE連接器架構(gòu))訪問(wèn)各種系統(tǒng)(可能包括現(xiàn)存的系統(tǒng))的功能。通過(guò)將服務(wù)封送或“編排”進(jìn)可執(zhí)行的業(yè)務(wù)流程中,SOA可參考業(yè)務(wù)用戶的觀點(diǎn)對(duì)技術(shù)觀點(diǎn)進(jìn)行調(diào)整。目前,業(yè)務(wù)流程建模是基于所謂的“工作流管理系統(tǒng)”完成的。在建模過(guò)程中,會(huì)將業(yè)務(wù)流程映射為描述語(yǔ)言(已標(biāo)準(zhǔn)化或正在標(biāo)準(zhǔn)化)。利用這一點(diǎn),無(wú)需“硬編碼”即可對(duì)業(yè)務(wù)流程進(jìn)行調(diào)整,從而在運(yùn)行時(shí)即時(shí)滿足各種新要求。在《BIT》雜志的“銀行業(yè)與信息技術(shù)”(2004年第2卷第3期)中,討論了此架構(gòu)在銀行中與各種工作流符號(hào)(如eEPK、UML活動(dòng)圖、BPEL、XPDL以及JPD)結(jié)合的一個(gè)實(shí)現(xiàn)。
  為了提高業(yè)務(wù)流程實(shí)現(xiàn)的抽象層次和靈活性,業(yè)務(wù)規(guī)則引擎可以部署在SOA框架內(nèi)。這些規(guī)則引擎將業(yè)務(wù)流程內(nèi)的決策從用編程語(yǔ)言完成的實(shí)際實(shí)現(xiàn)隔離開(kāi)來(lái)。
業(yè)務(wù)規(guī)則與企業(yè)平臺(tái)
  在分析例子之前,有必要了解一下“業(yè)務(wù)規(guī)則”這個(gè)術(shù)語(yǔ)的含義以及此領(lǐng)域已有的標(biāo)準(zhǔn)。
業(yè)務(wù)規(guī)則
  對(duì)于銀行而言,管理機(jī)構(gòu)、競(jìng)爭(zhēng)對(duì)手、客戶和整個(gè)市場(chǎng)情況不斷帶來(lái)各種變更,必須將這些變更作為業(yè)務(wù)規(guī)則。業(yè)務(wù)規(guī)則專家組 (BRG) 規(guī)定了業(yè)務(wù)規(guī)則的兩個(gè)定義。第一個(gè)定義與業(yè)務(wù)觀點(diǎn)相關(guān),而第二個(gè)定義與IT相關(guān):
    - “從業(yè)務(wù)的角度看,業(yè)務(wù)規(guī)則是一種原則,包含在特定活動(dòng)或范圍內(nèi)關(guān)于指導(dǎo)、操作、實(shí)踐或過(guò)程的行為規(guī)范。”
    
- “從信息系統(tǒng)的角度看,業(yè)務(wù)規(guī)則是一個(gè)定義或限制業(yè)務(wù)某些方面的聲明。業(yè)務(wù)規(guī)則旨在用于斷言業(yè)務(wù)結(jié)構(gòu),或者控制或影響業(yè)務(wù)行為。” 
  運(yùn)行時(shí),規(guī)則引擎 必須對(duì)這些業(yè)務(wù)規(guī)則進(jìn)行解釋??梢詫⒁?guī)則引擎理解為一種高性能的專用解釋程序,其中包含if-then命令,可根據(jù)預(yù)先定義的規(guī)則對(duì)轉(zhuǎn)換的值和對(duì)象進(jìn)行分析,然后返回修改后的值和對(duì)象,或直接執(zhí)行操作。因此,大多數(shù)規(guī)則引擎使用“Rete” 算法,并支持演繹和歸納。
  為了彌合業(yè)務(wù)觀點(diǎn)和IT觀點(diǎn)間的差距,就產(chǎn)生了對(duì)業(yè)務(wù)規(guī)則管理系統(tǒng)(BRMS)的需求。在BRMS中,會(huì)將公司使用的策略和過(guò)程進(jìn)行結(jié)合,以管理業(yè)務(wù)規(guī)則的整個(gè)生命周期。因此,受影響的部門和非IT人員必須能夠?qū)崟r(shí)地修改IT基礎(chǔ)架構(gòu),以適應(yīng)一般條件和策略。
企業(yè)平臺(tái)
  企業(yè)平臺(tái)(EP)可以看作SOA集成開(kāi)發(fā)與運(yùn)行時(shí)環(huán)境,這個(gè)環(huán)境涵蓋了全公司范圍的IT基礎(chǔ)架構(gòu)。此類平臺(tái)的功能分布在三個(gè)層次:門戶層、集成層和應(yīng)用程序服務(wù)器層。
  門戶層實(shí)現(xiàn)所有相關(guān)的信息和應(yīng)用程序“單點(diǎn)訪問(wèn)”,保證真正單點(diǎn)實(shí)現(xiàn)客戶、業(yè)務(wù)合作伙伴及員工訪問(wèn)。門戶和有關(guān)資源的訪問(wèn)權(quán)由用戶角色決定,以方便內(nèi)容管理和實(shí)現(xiàn)個(gè)性化。
  集成層提供所有需要的服務(wù),用于連接應(yīng)用程序、業(yè)務(wù)流程和業(yè)務(wù)合作伙伴,以及在各種應(yīng)用程序間進(jìn)行數(shù)據(jù)集成和數(shù)據(jù)轉(zhuǎn)換。
  應(yīng)用程序服務(wù)器層是企業(yè)平臺(tái)的基礎(chǔ)。應(yīng)用程序服務(wù)器必須滿足與(全局)事務(wù)的實(shí)現(xiàn)、管理和協(xié)調(diào)有關(guān)的所有要求,并提供高性能、高可用性和可伸縮性。
標(biāo)準(zhǔn)
  廣泛使用異構(gòu)計(jì)算機(jī)系統(tǒng),則意味著要采用標(biāo)準(zhǔn),以達(dá)到必要的互操作水平。通常將互操作性理解為通信和協(xié)作的能力,可允許一個(gè)系統(tǒng)內(nèi)的應(yīng)用程序訪問(wèn)另一個(gè)系統(tǒng)內(nèi)的數(shù)據(jù)或程序。使用標(biāo)準(zhǔn)的另一個(gè)目的是定義通用接口,以支持對(duì)互操作進(jìn)行編程。
  Java Specification Request (JSR) 94描述了軟件工程師如何通過(guò)API將規(guī)則引擎集成到應(yīng)用程序中,以及規(guī)則引擎供應(yīng)商必須如何實(shí)現(xiàn)此類API。
  不過(guò),JSR 94沒(méi)有提供描述業(yè)務(wù)規(guī)則的定義。JSR 94的目標(biāo)是在不確定規(guī)則引擎供應(yīng)商的情況下幫助把規(guī)則引擎集成到Java 應(yīng)用程序中。JSR 94沒(méi)有為任何類型的業(yè)務(wù)規(guī)則(如,基于XML的、基于統(tǒng)一數(shù)據(jù)的或基于對(duì)象模型的)指定描述語(yǔ)言。
規(guī)則集的實(shí)驗(yàn)性實(shí)現(xiàn)
  現(xiàn)在把我們的注意力轉(zhuǎn)向規(guī)則集的一個(gè)實(shí)驗(yàn)。我們將首先研究實(shí)驗(yàn)本身,然后再分析其在WebLogic Portal 8.1和ILOG Jrules中的實(shí)現(xiàn)。
場(chǎng)景
  我們的實(shí)驗(yàn)解決兩個(gè)問(wèn)題。首先是采用“push 概念”的方式進(jìn)行面向事件的客戶處理,即根據(jù)其在EP門戶內(nèi)的需求主動(dòng)處理客戶。在面向事件的客戶處理的上下文中,會(huì)利用基于用戶給定的事件的業(yè)務(wù)規(guī)則,向已登錄的用戶顯示個(gè)性化的內(nèi)容。此類規(guī)則與以下所示類似:
  如果用戶具有影響信用額度的“change of house”事件,而此事件尚未發(fā)生,則將向年滿18歲或18歲以上的用戶顯示一個(gè)信用額度啟事。
  該規(guī)則轉(zhuǎn)換為ECAA符號(hào)(Event, Condition, Action, Alternative Action)如下所示:
    
        
            | ON | Change of house | 
        
            | IF | Customer credit-worthy AND above 18 AND not yet addressed
 | 
        
            | DO | Show credit advertisement | 
        
            | ELSE | --- | 
    
  其次,是在集成層內(nèi)將規(guī)則引擎(各個(gè)業(yè)務(wù)規(guī)則)集成到業(yè)務(wù)流程的建模和運(yùn)行庫(kù)中。這是基于在線貸款業(yè)務(wù)流程實(shí)現(xiàn)的,此流程中具有自動(dòng)信用確定功能和后臺(tái)辦公流程(在此處通過(guò)規(guī)則引擎進(jìn)行決策)。
  我們的目標(biāo)是在WebLogic Platform 8.1和ILOG JRules中實(shí)現(xiàn)所有這些問(wèn)題。
利用BEA WebLogic 8.1 Service Pack 3進(jìn)行實(shí)現(xiàn)
  門戶規(guī)則服務(wù)屬于Weblogic Portal 8.1,用于在門戶應(yīng)用程序中實(shí)現(xiàn)個(gè)性化。它的實(shí)現(xiàn)需要借助不同組件: 
user segments、campaigns、content selectors以及Java Server Pages (JSP)內(nèi)的個(gè)性化標(biāo)簽。
  WebLogic Workshop 8.1具有合適的用戶界面,利用此界面,可以在很高的抽象層次上更改這些組件。更重要的是,2004年發(fā)布的Service Pack 3能提供對(duì)附加組件的API訪問(wèn),可直接訪問(wèn)基礎(chǔ)規(guī)則引擎。這就是規(guī)則控件和“RulesManager” Enterprise JavaBean (EJB)。
  WebLogic Portal 8.1規(guī)則包含稱為規(guī)則集的XML文檔。規(guī)則集的基本設(shè)置如下所示: 
<ruleset>
<rule>
<condition>
Left Hand Side expression: Event (ON) and Condition (IF)
</condition>
<action>
Right Hand Side expression: Action (DO)
</action>
</rule>
</ruleset>
所有的規(guī)則都以ruleset元素內(nèi)的rule元素的形式出現(xiàn)。此處映射左邊(LHS)表達(dá)式,即Event (ON) and Condition (IF)。單獨(dú)的元素是condition,在此元素內(nèi)可以將條件與邏輯運(yùn)算符鏈接。如果LHS為true,則將執(zhí)行RHS(位于action元素內(nèi))的Action (DO)。也可以在工作內(nèi)存中對(duì)轉(zhuǎn)換過(guò)的對(duì)象進(jìn)行操作,或在其中創(chuàng)建新對(duì)象。不過(guò),可能對(duì)象的列表(類型映射)僅限于小部分的類型。
  可以從WebLogic Platform 8.1的所有主要組件訪問(wèn)規(guī)則引擎,特別是集成層和門戶層。
  由于規(guī)則引擎的對(duì)象類型數(shù)據(jù)有限,故而不可能實(shí)現(xiàn)在線貸款流程。因此必須將ILOG的規(guī)則引擎作為插件安裝。
利用ILOG JRules 4.6進(jìn)行實(shí)現(xiàn)
  ILOG JRules 4.6是一套完整的BRMS,可以將其視為目前業(yè)務(wù)規(guī)則領(lǐng)域的行業(yè)標(biāo)準(zhǔn)。圖2演示了如何將BRMS集成到Java 2 Enterprise Edition (J2EE)架構(gòu)中。

圖2. ILOG Jrules應(yīng)用示例
  圖2摘自ILOG JRules 4.6白皮書。在JRules 4.6中可以使用全部應(yīng)用程序?qū)ο竽P?,包括所有XML架構(gòu)。Java和XML對(duì)象被組合為一個(gè)業(yè)務(wù)對(duì)象模型 (BOM)。利用BOM,可以將對(duì)象及其方法轉(zhuǎn)換為自然語(yǔ)言的短語(yǔ)。因此,例如將對(duì)象Customer分配給短語(yǔ)“the customer”,將方法getAge分配給“the age of”。則抽象為自然語(yǔ)言的示例規(guī)則如下所示:
If the age of the customer is greater than 18 And ... Then ...
  
其中,粗體部分顯示的是Rule Builder的既定元素,下劃線部分顯示的是BOM中的翻譯,而斜體部分顯示的是Rule Builder內(nèi)的用戶輸入。
  也可以采用規(guī)則集的方式組織這些規(guī)則。對(duì)象(Java 和 XML)加載到內(nèi)存中后,就可以根據(jù)這些規(guī)則集進(jìn)行運(yùn)行。然后規(guī)則可以操縱或創(chuàng)建任何的對(duì)象。規(guī)則集和BOM保存在規(guī)則庫(kù)中。因此,規(guī)則管理程序和管理員可以根據(jù)其角色對(duì)規(guī)則進(jìn)行訪問(wèn)、更新和部署,從而涵蓋業(yè)務(wù)規(guī)則的整個(gè)生命周期(創(chuàng)建、部署、更新、刪除)。
比較
  WebLogic Portal 8.1提供了業(yè)務(wù)規(guī)則功能,但到目前為止,此功能只是用于WebLogic Platform 8.1內(nèi)的活動(dòng)管理和用戶分段。Service Pack 3 通過(guò)提供API增強(qiáng)了規(guī)則引擎的功能。不過(guò),其使用仍然僅限于進(jìn)行個(gè)性化。ILOG JRules 4.6具有無(wú)限制的規(guī)則引擎,是一套完整的BRMS。
  實(shí)現(xiàn)的結(jié)果表明WebLogic Portal 8.1的規(guī)則功能適用于較為簡(jiǎn)單的個(gè)性化和活動(dòng)管理任務(wù)。創(chuàng)建和更新活動(dòng)和用戶分段已集成到WebLogic Workshop 8.1 IDE中,能在高抽象層次執(zhí)行這些任務(wù),且只能由具有適當(dāng)權(quán)限的人員執(zhí)行此類任務(wù)。不過(guò),只能在WebLogic Platform 8.1環(huán)境中部署規(guī)則引擎,不能在任何其他供應(yīng)商的平臺(tái)上使用。
  對(duì)于更復(fù)雜的個(gè)性化規(guī)則(通過(guò)結(jié)合AND和OR語(yǔ)句),可以使用規(guī)則服務(wù)定義XML格式的規(guī)則集。不過(guò),必須在本機(jī)XML中創(chuàng)建和編輯規(guī)則。XML編輯器還不足以涵蓋相應(yīng)的抽象層次,而且,相對(duì)于Java代碼映射而言,具有多于三個(gè)條件的規(guī)則和包含兩個(gè)以上規(guī)則的規(guī)則集都更加復(fù)雜化,更加容易混淆。
  ILOG JRules 4.6本身就是一個(gè)靈活的BRMS,涵蓋了業(yè)務(wù)規(guī)則的整個(gè)生命周期。ILOG JRules 4.6內(nèi)的規(guī)則引擎是J2EE應(yīng)用程序,可以部署到任何J2EE項(xiàng)目。另外,ILOG能輕松集成到IDE環(huán)境中,可以利用Java控件調(diào)用規(guī)則引擎。對(duì)于較大規(guī)模的項(xiàng)目來(lái)說(shuō),集成和使用ILOG JRules 4.6一類的規(guī)則管理系統(tǒng)是可能的,也是值得這樣做的。最后,結(jié)果表明,對(duì)于面向事件的客戶處理和銀行業(yè)務(wù)流程工業(yè)化二者的實(shí)現(xiàn)而言,ILOG JRules 4.6這樣的BRMS是絕對(duì)必不可少的。
結(jié)束語(yǔ)
  如其他行業(yè)早期一樣,銀行正面臨將推動(dòng)該行業(yè)進(jìn)一步發(fā)展的結(jié)構(gòu)變更。在這種情況下,銀行業(yè)關(guān)心的主要問(wèn)題是業(yè)務(wù)的劃分、全球跨行業(yè)務(wù)往來(lái),技術(shù)集成以及持續(xù)的數(shù)字化進(jìn)程。
  為了應(yīng)對(duì)即將來(lái)臨的變更,業(yè)務(wù)流程(從技術(shù)觀點(diǎn)出發(fā))必須不斷靈活且迅速地處理好新的挑戰(zhàn)。解決此問(wèn)題的可能方法之一就是使用EP和EAI。為了讓相關(guān)部門獲得更強(qiáng)的業(yè)務(wù)處理能力,必須進(jìn)一步將業(yè)務(wù)邏輯從IT和實(shí)現(xiàn)端分離。利用業(yè)務(wù)規(guī)則和BRMS可以做到這一點(diǎn)。ILOG等BRMS可以輕松與BEA WebLogic Platform和WebLogic Workshop IDE實(shí)現(xiàn)集成。對(duì)于想在銀行業(yè)以贏家身份出現(xiàn)的企業(yè)而言,將這些工具結(jié)合在一起使用可以獲得明顯的競(jìng)爭(zhēng)優(yōu)勢(shì)。
參考資料
  Daniel Jobst在德國(guó)的雷根斯堡大學(xué)ibi研究中心工作,該中心專門致力于研究銀行業(yè)IT與技術(shù)革新。其研究的主要領(lǐng)域是企業(yè)平臺(tái)、集成方案和業(yè)務(wù)規(guī)則管理系統(tǒng)。除了進(jìn)行研究工作外,Daniel還為數(shù)家銀行提供集成和規(guī)則項(xiàng)目咨詢。
  Rainer von Ammon自2002年起在上奧地利州應(yīng)用科學(xué)技術(shù)大學(xué)擔(dān)任軟件工程教授,專門研究電子商務(wù)基礎(chǔ)架構(gòu)和分布式系統(tǒng)。他還擔(dān)任德國(guó)雷根斯堡大學(xué)銀行情報(bào)學(xué)院研究中心的主任。
  Benjamin Gebauer在德國(guó)的雷根斯堡大學(xué)ibi研究中心工作,該中心專門致力于研究銀行業(yè)IT與技術(shù)革新。其研究的主要領(lǐng)域是企業(yè)平臺(tái)、集成方案和業(yè)務(wù)規(guī)則管理系統(tǒng)。除了進(jìn)行研究工作外,Benjamin還為數(shù)家銀行提供集成和規(guī)則項(xiàng)目咨詢。
原文出處
http://dev2dev./pub/a/2005/04/business_rules_engines.html