论坛首页 Java版 JBoss

Drools3.1M1 发布标注

浏览 707 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-07-13 关键字: drools 规则库
 

Drools3.1M1 ReleaseNotes

 

 


语言增强

新的条件元素: 'from', 'collect', 'accumulate', 'forall'

'from'

  • http://jira.jboss.com/jira/browse/JBRULES-341

'from'允许引擎对不在引擎之中的数据进行推论,这可以通过使用全局变量与数据提供服务进行交互,如HibernateMVEL为此提供脚本语言,任何之前绑定的变量可以用在MVEL表达式中。接下来的例子显示一个Hibernate命名的查询使用一些虚拟的属性,返回一个餐馆列表。Restaurant()是标准的模式,能够像其它模式一样拥有自己的字段约束和绑定。

    $r : Restaurant( $postCode ) from hbSession.getNamedQuery( "some query" ).setProperties( [ key1 : value2, key2 : value ] ).list()

collect

  • http://jira.jboss.com/jira/browse/JBRULES-486

'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

  • http://jira.jboss.com/jira/browse/JBRULES-337

'accumulate' collect的更强大的版本,它能够用来承担集合操作,如sumtotal

 

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

  • http://jira.jboss.com/jira/browse/JBRULES-218

'forall' 允许规则在引擎中所有的值都是真时激活

 

 

rule "test nested CEs"

        when

            forall( State( $state : state ),

                    Person( status == $state, $likes : likes ),

                    Cheese( type == $likes ) )

        then

               results.add("OK");            

end

完全支持一阶逻辑: 元素的嵌套完成

  • http://jira.jboss.com/jira/browse/JBRULES-218

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

支持多个约束条件的逻辑组合

  • http://jira.jboss.com/jira/browse/JBRULES-216

&”和“|”现在可以使用在模式中。它们的行为是不同的,因为它不会导致产生子规则。

 

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  

解析器增强:

解决关键字冲突

  • http://jira.jboss.com/jira/browse/JBRULES-214

对断行的更好支持

  • http://jira.jboss.com/jira/browse/JBRULES-269

支持字符串中的Escaped字符

  • http://jira.jboss.com/jira/browse/JBRULES-519

原型支持: 不再需要自动封箱/拆箱

  • http://jira.jboss.com/jira/browse/JBRULES-527

原型现在可以直接使用,允许更容易的维护规则以及更好的执行性能

 

模板支持:

  • http://jira.jboss.com/jira/browse/JBRULES-330

现在可以使用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  

支持额外的断言语义:

  • http://jira.jboss.com/jira/browse/JBRULES-556

在变量绑定之后,你不再需要使用“->”语法标记。现在断言只要在逗号后面简单的使用一个相等/不等判断表达式,引擎会自己找到它需要的变量,

Pattern( $var1 : attr1, $var2 : attr2, ( $var1.blabla() != $var2.xyz() ) )

核心增强:

阴影Fact:

  • http://jira.jboss.com/jira/browse/JBRULES-44

现在阴影Fact允许系统在多线程环境下工作,并且在引擎外面对Fact进行改变。每一个值都被隐藏在引擎中,只有在一个“安全点”才更新。因此不用再危及引擎的完整性。

支持在相同对象的字段之间进行约束判断

  • http://jira.jboss.com/jira/browse/JBRULES-515

之前绑定的变量只能用在下一个范式中,现在它们可以在定义的范式中就使用。

执行性能增强

  • http://jira.jboss.com/jira/browse/JBRULES-484
  • http://jira.jboss.com/jira/browse/JBRULES-498
  • http://jira.jboss.com/jira/browse/JBRULES-526

JBoss Rules 比之前更快,使用更少的内存。

为执行性能特殊化的“exists”节点

  • http://jira.jboss.com/jira/browse/JBRULES-547

传统的Rete系统为exists实现两个Not节点,我们发现使用一个专门的Exists节点可以增强性能并使得Rete网络更简单。

IDE 摘要

IDE现在支持调试规则:断点可以加在Drl文件中规则的右手边(推论)以及函数中。无论何时在调试中遇到规则断点,相应的规则被显示,你可以单步调试。规则调试与Java调试完全集成,这样同时可以使用两者。

一个新的规则视图允许你可以同时对所有在工作空间中的规则,函数,查询和全局变量做一个快速浏览。你也可以通过选择一个元素然后双击来快速浏览它们。


支持新的语言特性(像from,collect,accumulate),并且IDE也已经更新以支持所有内核改变。并且不断改进和更好的调整其它的功能,如对大纲和规则视图提供过滤器,(可配置的)解析器结果缓存等等

注意

M1版本有一个遗留问题将在M2版本解决

  • http://jira.jboss.com/jira/browse/JBRULES-675 BetaNode节点直接的节点共享问题

 

   
论坛首页 Java版 JBoss

跳转论坛:
JavaEye推荐