>
>
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-----建立遠端的drl檔案,位址為 e:\native.drlpackage template
rule 「test_0」
when
string(this == 「規則條件」)
then
system.out.println(「規則動作」);
end-----模板drt渲染後的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...