天天看點

drools_03_dialect

關于 dialect 屬性

  • drools 支援兩種dialect, 即​

    ​java​

    ​​ 和​

    ​mvel​

  • dialect 預設為​

    ​java​

    ​​, 當然我們也推薦統一使用​

    ​java​

    ​ dialect, 以降低維護成本.
  • dialect 屬性僅用于設定​

    ​RHS​

    ​​ 部分文法,​

    ​LHS​

    ​ 部分并不受 dialect 的影響.
  • package 和 rule 都可以指定 dialect 屬性.

mvel dialect

  • mvel 是一種表達式語言, github首頁為​​https://github.com/mvel/mvel​​​ , 文檔首頁為​​http://mvel.documentnode.com/​​
  • dools 中的 mvel dialect 可以認為是 java dialect的超集, 也就是說 mvel dialect模式下, 也支援 java dialect的寫法.
  • mvel 和 java 的主要差別:
  • 對于POJO 對象, java dialect 必須使用 getter 和 setter 方法.
  • 對于POJO 對象, mvel dialect 可以直接使用屬性名稱進行讀寫, 甚至是private 屬性也可以.

java dialect示例:

rule "java_rule"  
   enabled true
   dialect "java"
   when
       $order:Order()
   then
      System.out.println("java_rule fired");
      $order.setRealPrice($order.getOriginalPrice()*0.8) ;
end      
rule "mvel_rule"
   enabled false
   dialect "mvel"
   when
       $order:Order()
   then
      System.out.println("mvel_rule fired");
      $order.realPrice=$order.originalPrice*0.7 ;   
end