關于 dialect 屬性
- drools 支援兩種dialect, 即
和java
mvel
- dialect 預設為
, 當然我們也推薦統一使用java
dialect, 以降低維護成本.java
- dialect 屬性僅用于設定
部分文法,RHS
部分并不受 dialect 的影響.LHS
- 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