JBoss Rules的入門學(xué)習(xí)
學(xué)習(xí)JBoss Rules有幾天了,因為這方面的中文資料較少,所以這幾天都在看官網(wǎng)上的manual。這是一份不錯的教程,我把我看的一些重要的東西翻譯整理了一下,希望可以對想學(xué)習(xí)JBoss Rules的朋友們提供一點幫助。
在開始這份教程之前,我先簡要介紹一下JBoss Rules:
JBoss Rules 的前身是Codehaus的一個開源項目叫Drools。最近被納入JBoss門下,更名為JBoss Rules,成為了JBoss應(yīng)用服務(wù)器的規(guī)則引擎。Drools是為Java量身定制的基于Charles Forgy的RETE算法的規(guī)則引擎的實現(xiàn)。具有了OO接口的RETE,使得商業(yè)規(guī)則有了更自然的表達。
既然JBoss Rules是一個商業(yè)規(guī)則引擎,那我們就要先知道到底什么是Rules,即規(guī)則。在JBoss Rules中,規(guī)則是如何被表示的
一條規(guī)則是對商業(yè)知識的編碼。一條規(guī)則有 attributes,一個 Left Hand Side(LHS)和一個Right Hand Side( RHS )。Drools 允許下列幾種attributes :salience,agenda-group,no-loop,auto-focus,duration,activation-group 。
- rule “ < name > ”
- < attribute > < value >
- when
- < LHS >
- then
- < RHS >
- end
規(guī)則的LHS由一個或多個條件(Conditions)組成。當(dāng)所有的條件(Conditions)都滿足并為真時,RHS將被執(zhí)行。RHS被稱為結(jié)果(Consequence)。LHS和RHS 類似于:
- if ( < LHS > ) {
- < RHS >
- }
規(guī)則可以通過package關(guān)鍵字同一個命名空間(namespace)相關(guān)聯(lián);其他的規(guī)則引擎可能稱此為規(guī)則集(Rule Set)。一個package聲明了imports,global變量,functions和rules 。
- package com.sample
- import java.util.List
- import com.sample.Cheese
- global List cheeses
- function void exampleFunction(Cheese cheese) {
- System.out.println( cheese );
- }
- rule “A Cheesy Rule”
- when
- cheese : Cheese( type == " stilton " )
- then
- exampleFunction( cheese );
- cheeses.add( cheese );
- end
對新的數(shù)據(jù)和被修改的數(shù)據(jù)進行規(guī)則的匹配稱為模式匹配(Pattern Matching)。進行匹配的引擎稱為推理機(Inference Engine)。被訪問的規(guī)則稱為ProductionMemory,被推理機進行匹配的數(shù)據(jù)稱為WorkingMemory。Agenda管理被匹配規(guī)則的執(zhí)行。推理機所采用的模式匹配算法有下列幾種:Linear,RETE,Treat,Leaps。
【編輯推薦】