论坛首页 Java企业应用论坛

Drools3.1M1 发布标注

浏览 2129 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-08  
 

Drools<st1:chmetcnv unitname="m" sourcevalue="3.1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">3.1M</st1:chmetcnv>1 ReleaseNotes<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>


语言增强<o:p></o:p>

新的条件元素: 'from', 'collect', 'accumulate', 'forall'<o:p></o:p>

'from'<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-341 <o:p></o:p>

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

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

collect<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-486 <o:p></o:p>

'collect' 允许在数据集上进行推论a <o:p></o:p>

rule "Collect Test" salience 70<o:p></o:p>

    when<o:p></o:p>

        $person      : Person( name == "Bob", $likes : likes )<o:p></o:p>

        $cheeseList  : ArrayList(size > 2) from collect( Cheese( type == $likes ) );<o:p></o:p>

    then<o:p></o:p>

        results.add($cheeseList);<o:p></o:p>

end<o:p></o:p>

accumulate<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-337 <o:p></o:p>

'accumulate' collect的更强大的版本,它能够用来承担集合操作,如sumtotal<o:p></o:p>

<o:p> </o:p>

rule "Accumulate with Bindings" salience 90<o:p></o:p>

    when<o:p></o:p>

        $person      : Person( name == "Bob", $likes : likes )<o:p></o:p>

        $totalAmount : Integer() from accumulate( $cheese : Cheese( type == $likes ),<o:p></o:p>

                                                  init( int total = 0; ),<o:p></o:p>

                                                  action( total += $cheese.getPrice(); ),<o:p></o:p>

                                                  result( new Integer( total ) ) );<o:p></o:p>

    then<o:p></o:p>

        results.add($totalAmount);<o:p></o:p>

end  <o:p></o:p>

forall<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-218 <o:p></o:p>

'forall' 允许规则在引擎中所有的值都是真时激活<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

rule "test nested CEs" <o:p></o:p>

        when<o:p></o:p>

            forall( State( $state : state ),<o:p></o:p>

                    Person( status == $state, $likes : likes ),<o:p></o:p>

                    Cheese( type == $likes ) )<o:p></o:p>

        then <o:p></o:p>

               results.add("OK");             <o:p></o:p>

end<o:p></o:p>

完全支持一阶逻辑: 元素的嵌套完成<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-218 <o:p></o:p>

You can now nest 'and' and 'or' inside 'not' and 'exists'. <o:p></o:p>

rule "test nested CEs"  <o:p></o:p>

  when<o:p></o:p>

      not ( State( $state : state ) and<o:p></o:p>

            not( Person( status == $state, $likes : likes ) and<o:p></o:p>

                 Cheese( type == $likes ) ) )<o:p></o:p>

  then <o:p></o:p>

    results.add("OK");    <o:p></o:p>

end<o:p></o:p>

支持多个约束条件的逻辑组合<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-216 <o:p></o:p>

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

<o:p> </o:p>

rule "& operator with ! and strings"<o:p></o:p>

    when      <o:p></o:p>

    $person : Person( hair != "blue" & != "purple", age > 30 & < 40  )        <o:p></o:p>

    then<o:p></o:p>

        list2.add( $person );<o:p></o:p>

end   <o:p></o:p>

<o:p> </o:p>

rule "| operator with == and strings"<o:p></o:p>

    when      <o:p></o:p>

    $person : Person( hair == "blue" |  == "purple",   age < 30 )       <o:p></o:p>

    then<o:p></o:p>

        list3.add( $person );<o:p></o:p>

end   <o:p></o:p>

解析器增强:<o:p></o:p>

解决关键字冲突 <o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-214 <o:p></o:p>

对断行的更好支持 <o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-269 <o:p></o:p>

支持字符串中的Escaped字符 <o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-519 <o:p></o:p>

原型支持: 不再需要自动封箱/拆箱<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-527 <o:p></o:p>

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

<o:p> </o:p>

模板支持:<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-330 <o:p></o:p>

现在可以使用Fact模板,允许你在自己的DRL中定义Fact,并在规则中使用,而不需要一个POJO<o:p></o:p>

<o:p> </o:p>

template Cheese<o:p></o:p>

    String  name<o:p></o:p>

    Integer price<o:p></o:p>

end<o:p></o:p>

<o:p> </o:p>

rule "Match Stilton"<o:p></o:p>

  when<o:p></o:p>

      $stilton : Cheese( name == "stilton" )<o:p></o:p>

    then<o:p></o:p>

      $stilton.setFieldValue( "price", new Integer( 200 ) );<o:p></o:p>

      list.add( $stilton );<o:p></o:p>

end   <o:p></o:p>

支持额外的断言语义: <o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-556 <o:p></o:p>

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

Pattern( $var1 : attr1, $var2 : attr2, ( $var1.blabla() != $var2.xyz() ) ) <o:p></o:p>

核心增强:<o:p></o:p>

阴影Fact:<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-44 <o:p></o:p>

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

支持在相同对象的字段之间进行约束判断<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-515 <o:p></o:p>

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

执行性能增强<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-484 <o:p></o:p>
  • http://jira.jboss.com/jira/browse/JBRULES-498 <o:p></o:p>
  • http://jira.jboss.com/jira/browse/JBRULES-526 <o:p></o:p>

JBoss Rules 比之前更快,使用更少的内存。<o:p></o:p>

为执行性能特殊化的“exists”节点<o:p></o:p>

  • http://jira.jboss.com/jira/browse/JBRULES-547 <o:p></o:p>

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

IDE 摘要<o:p></o:p>

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

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


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

注意<o:p></o:p>

M1版本有一个遗留问题将在M2版本解决<o:p></o:p>

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

<o:p> </o:p>

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics