zoukankan      html  css  js  c++  java
  • 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop

    转载至:https://blog.csdn.net/wo541075754/article/details/75201934

    no-loop

    定义当前的规则是否不允许多次循环执行,默认是 false,也就是当前的规则只要满足条件,可以无限次执行。什么情况下会出现规则被多次重复执行呢?下面看一个实例:

    package com.rules
    
    import com.secbro.drools.model.Product;
    
    rule updateDistcount
        no-loop false
        when
            productObj:Product(discount > 0);
        then
            productObj.setDiscount(productObj.getDiscount() + 1);
            System.out.println(productObj.getDiscount());
            update(productObj);
        end
    View Code

    其中Product对象的discount属性值默认为1。执行此条规则时就会发现程序进入了死循环。也就是说对传入当前workingMemory中的FACT对象的属性进行修改,并调用update方法就会重新触发规则。从打印的结果来看,update之后被修改的数据已经生效,在重新执行规则时并未被重置。当然对Fact对象数据的修改并不是一定需要调用update才可以生效,简单的使用 set 方法设置就可以完成,但仅仅调用set方法时并不会重新触发规则。所以,对insert、retract、update方法使用时一定要慎重,否则极可能会造成死循环。

    可以通过设置no-loop为true来避免规则的重新触发,同时,如果本身的RHS部分有insert、retract、update等触发规则重新执行的操作,也不会再次执行当前规则。

    上面的设置虽然解决了当前规则的不会被重复执行,但其他规则还是会收到影响,比如下面的例子:

    package com.rules
    
    import com.secbro.drools.model.Product;
    
    rule updateDistcount
        no-loop true
        when
            productObj:Product(discount > 0);
        then
            productObj.setDiscount(productObj.getDiscount() + 1);
            System.out.println(productObj.getDiscount());
            update(productObj);
        end
    
    rule otherRule
        when
        productObj : Product(discount > 1);
        then
        System.out.println("被触发了" + productObj.getDiscount());
        end
    View Code

    此时执行会发现,当第一个规则执行update方法之后,规则otherRule也会被触发执行。如果注释掉update方法,规则otherRule则不会被触发。那么,这个问题是不是就没办法解决了?当然可以,那就是引入lock-on-active true属性。

    
    
  • 相关阅读:
    充满了艰难的造题之幼儿园测试【历史考试】
    【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
    windows下nginx的安装使用及解决80端口被占用nginx不能启动的问题
    使用hMailServer搭建免费邮件服务器(亲测可用)
    $.ajax()方法详解
    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
    $.ajax()调用.cs里的方法实现ajax操作示例
    Asp.Net URL重写的具体实现(通过URLRewriter.dll)
    数据图
    C#解析JSON字符串总结
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/9438399.html
Copyright © 2011-2022 走看看