1. 程式人生 > >《Drools7.0.0.Final規則引擎教程》第4章 註釋&錯誤資訊

《Drools7.0.0.Final規則引擎教程》第4章 註釋&錯誤資訊

註釋

像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。如果對你有幫助也歡迎讚賞(微信)! 也是對原創的最大支援!
這裡寫圖片描述