|
锁定老贴子 主题:Drools3.1M1 发布标注
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||
|---|---|---|---|---|---|
| 作者 | 正文 | ||||
|
最后更新时间:2007-07-13 关键字: drools 规则库
语言增强 新的条件元素: 'from', 'collect', 'accumulate', 'forall' 'from'
'from'允许引擎对不在引擎之中的数据进行推论,这可以通过使用全局变量与数据提供服务进行交互,如Hibernate。MVEL为此提供脚本语言,任何之前绑定的变量可以用在MVEL表达式中。接下来的例子显示一个Hibernate命名的查询使用一些虚拟的属性,返回一个餐馆列表。Restaurant()是标准的模式,能够像其它模式一样拥有自己的字段约束和绑定。 $r : Restaurant( $postCode ) from hbSession.getNamedQuery( "some query" ).setProperties( [ key1 : value2, key2 : value ] ).list() collect
'collect' 允许在数据集上进行推论a rule "Collect Test" salience 70 when $person : Person( name == "Bob", $likes : likes ) $cheeseList : ArrayList(size > 2) from collect( Cheese( type == $likes ) ); then results.add($cheeseList); end accumulate
'accumulate' 是collect的更强大的版本,它能够用来承担集合操作,如sum或total rule "Accumulate with Bindings" salience 90 when $person : Person( name == "Bob", $likes : likes ) $totalAmount : Integer() from accumulate( $cheese : Cheese( type == $likes ), init( int total = 0; ), action( total += $cheese.getPrice(); ), result( new Integer( total ) ) ); then results.add($totalAmount); end forall
'forall' 允许规则在引擎中所有的值都是真时激活 rule "test nested CEs" when forall( State( $state : state ), Person( status == $state, $likes : likes ), Cheese( type == $likes ) ) then results.add("OK"); end 完全支持一阶逻辑: 元素的嵌套完成
You can now nest 'and' and 'or' inside 'not' and 'exists'. rule "test nested CEs" when not ( State( $state : state ) and not( Person( status == $state, $likes : likes ) and Cheese( type == $likes ) ) ) then results.add("OK"); end 支持多个约束条件的逻辑组合
“&”和“|”现在可以使用在模式中。它们的行为是不同的,因为它不会导致产生子规则。 rule "& operator with ! and strings" when $person : Person( hair != "blue" & != "purple", age > 30 & < 40 ) then list2.add( $person ); end rule "| operator with == and strings" when $person : Person( hair == "blue" | == "purple", age < 30 ) then list3.add( $person ); end 解析器增强: 解决关键字冲突
对断行的更好支持
支持字符串中的Escaped字符
原型支持: 不再需要自动封箱/拆箱
原型现在可以直接使用,允许更容易的维护规则以及更好的执行性能 模板支持:
现在可以使用Fact模板,允许你在自己的DRL中定义Fact,并在规则中使用,而不需要一个POJO。 template Cheese String name Integer price end rule "Match Stilton" when $stilton : Cheese( name == "stilton" ) then $stilton.setFieldValue( "price", new Integer( 200 ) ); list.add( $stilton ); end 支持额外的断言语义:
在变量绑定之后,你不再需要使用“->”语法标记。现在断言只要在逗号后面简单的使用一个相等/不等判断表达式,引擎会自己找到它需要的变量, Pattern( $var1 : attr1, $var2 : attr2, ( $var1.blabla() != $var2.xyz() ) ) 核心增强: 阴影Fact:
现在阴影Fact允许系统在多线程环境下工作,并且在引擎外面对Fact进行改变。每一个值都被隐藏在引擎中,只有在一个“安全点”才更新。因此不用再危及引擎的完整性。 支持在相同对象的字段之间进行约束判断
之前绑定的变量只能用在下一个范式中,现在它们可以在定义的范式中就使用。 执行性能增强
JBoss Rules 比之前更快,使用更少的内存。 为执行性能特殊化的“exists”节点
传统的Rete系统为exists实现两个Not节点,我们发现使用一个专门的Exists节点可以增强性能并使得Rete网络更简单。 IDE 摘要 IDE现在支持调试规则:断点可以加在Drl文件中规则的右手边(推论)以及函数中。无论何时在调试中遇到规则断点,相应的规则被显示,你可以单步调试。规则调试与Java调试完全集成,这样同时可以使用两者。 一个新的规则视图允许你可以同时对所有在工作空间中的规则,函数,查询和全局变量做一个快速浏览。你也可以通过选择一个元素然后双击来快速浏览它们。
注意 M1版本有一个遗留问题将在M2版本解决
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|||||
| 返回顶楼 | |||||
浏览 707 次



