《Drools7.0.0.Final規則引擎教程》第4章 註釋&錯誤資訊
阿新 • • 發佈:2019-02-02
註釋
像Java開發語言一樣,Drools檔案中也可以添加註釋。註釋部分Drools引擎是會將其忽略調的。單行註釋使用“//”,示例如下:
rule "Testing Comments"
when
// this is a single line comment
eval( true ) // this is a comment in the same line of a pattern
then
// this is a comment inside a semantic code block
end
注意,使用“#”進行註釋已經被移除。
多行註釋與Java相同,採用“/註釋內容
rule "Test Multi-line Comments"
when
/* this is a multi-line comment
in the left hand side of a rule */
eval( true )
then
/* and this is a multi-line comment
in the right hand side of a rule */
end
錯誤資訊
Drools 5引入了標準化的錯誤資訊,可以快速的查詢和解決問題。本節將介紹如何利用錯誤資訊來進行快速定位問題和解決問題。
錯誤資訊的各式如下圖:
第一部分:錯誤編碼;
第二部分:錯誤出現的行列資訊;
第三部分:錯誤資訊描述;
第四部分:上下午的第一行資訊,通常表示發生錯誤的規則,功能,模板或查詢。此部分並不強制。
第五部分:標識發生錯誤的pattern(模式)。此部分並不強制。
下面以一組錯誤例項來分析常見的異常情況,首先用官網提供的例子來執行:
rule one
when
exists Foo()
exits Bar() // "exits"
then
end
由於exits是錯誤的語法,因此會丟擲異常,但此處需要注意的事在Drools 7中丟擲的異常並非官網提供的異常。異常資訊如下:
java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=27, column=0
text=[ERR 102] Line 27:6 mismatched input 'Bar' in rule "one" in pattern], Message [id=2, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
text=Parser returned a null Package]]
再看一個沒有規則名稱導致的錯誤:
rule
when
Object()
then
System.out.println("A RHS");
end
執行之後異常資訊如下:
java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=25, column=0
text=[ERR 102] Line 25:3 mismatched input 'when' in rule], Message [id=2, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
text=Parser returned a null Package]]
很顯然上面的異常是因為規則沒有指定名稱,而關鍵字when無法作為名稱,因此在此處丟擲異常。
格式不正確導致的異常:
rule test
when
foo3:Object(
異常資訊如下:
java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
text=Line 26:16 unexpected exception at input '<eof>'. Exception: java.lang.NullPointerException. Stack trace:
java.lang.NullPointerException
其他異常資訊就不在這裡贅述了,實際應用中不斷的學習總結即可根據錯誤資訊快速定位問題所在。
後語
此係列課程持續更新中,QQ群:593177274(可掃描左上側欄目二維碼),歡迎大家加入討論。點選連結關注《Drools部落格專欄》。由於Drools資料較少,教程編寫不易,每篇部落格都親身實踐編寫demo。如果對你有幫助也歡迎讚賞(微信)! 也是對原創的最大支援!