規則引擎 Drools 模板編譯

2021-08-29 17:56:10 字數 4170 閱讀 1414

>

>

org.droolsgroupid

>

>

drools-templatesartifactid

>

>

7.7.0.finalversion

>

dependency

>

新建模板檔案 test.drt

template header

condition

execution

package template

template "this is a test"

rule "test_@"

when

@then

system.out.

println(@)

; end

end template

說明

規則模板主要由兩部分構成:

template header 定義了在模板中使用的變數。

模板中以 「template name」 開頭, 以」end template」 結尾, 中間定義了模板的內容。變數佔位符使用 @ .

@是乙個特殊的變數, 每次會按順序生成乙個行號, 可用於區分規則名。

渲染模板的流程,先將資料封裝為 dataprovider,然後通過 dataprovidercompiler 使用 dataprovider 將模板編譯為 drl。

drools支援陣列型別的dataprovider, arraydataprovider實現了dataprovider,

示例

inputstream templatestream = datadriventemplateexample.

class

.getresourceasstream

("/rules/******templateexample.drt");

// @=陣列下標, @=規則條件, @=規則動作

dataprovider data =

newarraydataprovider

(new

string

});dataprovidercompiler converter =

newdataprovidercompiler()

;string drl = converter.

compile

(data, templatestream)

;

在模板渲染、編譯成規則檔案後,就可以正常的編譯drl規則檔案, 新建會話等。

kiehelper 是 drools提供的工具類, 可用於編譯drl規則檔案, 新建會話等。

ps: 也可以使用其他的方式編譯,這裡只是為了簡單

kiehelper helper =

newkiehelper()

;helper.

addcontent

(drl, resourcetype.drl)

;kiesession kiesession = helper.

build()

.newkiesession()

;kiesession.

insert

(new

string

("hello, world!"))

;kiesession.

fireallrules()

;kiesession.

dispose()

;

template header

condition

execution

package template

template "this is a test"

rule "test_@"

when

@then

system.out.

println(@)

; end

end template

public

class

demo

@before

public

void

setup()

}); dataprovidercompiler compiler =

newdataprovidercompiler()

; string drl = compiler.

compile

(dataprovider, stream)

; system.out.

println

("-----模板drt渲染後的drl-----");

system.out.

println

(drl)

; system.out.

println

("-----模板drt渲染後的drl-----");

byte

drlbytes = drl.

getbytes

("utf-8");

resource resourcetemplate = resourcefactory.

newbytearrayresource

(drlbytes)

; builder.

add(resourcetemplate, resourcetype.drl);}

catch

(ioexception e)

builder.

add(resourcenative, resourcetype.drl)

;// builder.add(resourceremote, resourcetype.drl);

kiebase = builder.

newkiebase()

;}@test

public

void

testtemplate()

}

-----模板drt渲染後的drl-----

package template

rule 「test_0」

when

string(this == 「規則條件」)

then

system.out.println(「規則動作」);

end-----模板drt渲染後的drl-----

規則動作

建立遠端的drl檔案,位址為 e:\native.drl

package rules.

native

;dialect "mvel"

rule "native"

when

then

system.out.

println

("本地載入成功");

end

建立遠端的drl檔案,位址為 http://localhost:8761/remote.drl

package rules.remote;

dialect "mvel"

rule "remote"

when

then

system.out.

println

("遠端載入成功");

end

2.3 單元測試

public

class

demo

@before

public

void

setup()

@test

public

void

testnativeandremote()

}

遠端載入成功

本地載入成功

關鍵api:

resource: 資源類,規則檔案的載入

knowledgebuilder: 收集編譯已經編寫好的規則檔案(drl)

從整體的收集、編譯、執行上看,遠端載入與本地載入大同小異,無非就是在使用resource時載入規則檔案上的不同。使用模板則在此基礎上,需要將模板(drt)編譯成規則(drl)。

Drools規則引擎介紹

規則引擎起源於基於規則的專家系統,而基於規則的專家系統又是專家系統的其中乙個分支。專家系統屬於人工智慧的範疇,它模仿人類的推理方式,使用試探性的方法進行推理,並使用人類能理解的術語解釋和證明它的推理結論 規則引擎一般由3部分組成 規則庫 knowledge base working memory f...

Drools 規則引擎 入門

參考網上前輩的例子,自己把drools整合在了springboot中能正常執行。特此記錄一下 pom檔案引入jar包 org.drools drools core 7.0.0.final org.drools drools compiler 7.0.0.final org.drools drools...

10042 Drools規則引擎

原文 通過學習rete演算法之後,這篇部落格來介紹一下乙個 rete 演算法實現的規則引擎的框架 drools。drools是 jboss 公司旗下一款開源的規則引擎,有如下特點 完整的實現了rete 演算法 提供了強大的eclipse plugin 開發支援 通過使用其中的dsl domain s...