转载至: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

其中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

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

												

【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop的更多相关文章

  1. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

    转载至:https://blog.csdn.net/wo541075754/article/details/75150267 一个标准的规则文件的格式为已“.drl”结尾的文本文件,因此可以通过记事本 ...

  2. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法

    转载至:https://blog.csdn.net/wo541075754/article/details/76651073 RHS语法 使用说明 RHS是满足LHS条件之后进行后续处理部分的统称,该 ...

  3. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

    转载:https://blog.csdn.net/wo541075754/article/details/75332720 agenda-group 规则的调用与执行是通过StatelessKieSe ...

  4. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象

    转载:https://blog.csdn.net/wo541075754/article/details/74943236 3.2.1 什么是KIE KIE(Knowledge Is Everythi ...

  5. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

    转载至:https://blog.csdn.net/wo541075754/article/details/75349556 auto-focus 在agenda-group章节,我们知道想要让Age ...

  6. 《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用

    2.1 Drools5简述 上面已经提到Drools是通过规则编译.规则收集和规则的执行来实现具体功能的.Drools5提供了以下主要实现API: KnowledgeBuilder Knowledge ...

  7. 《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载

    在<Drools7.0.0.Final规则引擎教程>之Springboot集成中介绍了怎样将Drools与Springboot进行集成,本篇博客介绍一下集成之后,如何实现从数据库读取规则并 ...

  8. 《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例

    3.1 Hello World 实例 在上一章中介绍了Drools5x版本中规则引擎使用的实例,很明显在Drools7中KnowledgeBase类已经标注为"@Deprecated&quo ...

  9. 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

    一个标准的规则文件的格式为已".drl"结尾的文本文件,因此可以通过记事本工具进行编辑.规则放置于规则文件当中,一个规则文件可以放置多条规则.在规则文件当中也可以存放用户自定义的函 ...

随机推荐

  1. 新视觉影院yy6080.org视频的抓取

    用fiddler 分析了一下, 从点连接 到 视频播放的过程 http://yy6080.org/v/103390 http://id.jiathis.com/id.php?u=http%3A%2F% ...

  2. ISO 8859-1 对照表 (扩展ASCII码表)

    1. 0---127 是ASCII码 2.128--255 加了一些特殊符号 DEC OCT HEX BIN Symbol HTML Number HTML Name Description 128 ...

  3. Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)

    Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏 在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1.       内联样式 ...

  4. homestead 暴露接口到外网

    laravel 官方推荐的运行环境是homestead,但homestead是个虚拟机,你自己访问没问题,给别人联调怎么办? 一个大型项目肯定不止一个人开发,这个时候就需要将你虚拟机上的接口暴露给外网 ...

  5. 手动安装Silverlight 4 Tools for Visual Studio 2010

    手动安装吧,将Silverlight 4 Tools for Visual Studio 2010.exe改成rar文件,解压缩,按照下面的步骤安装: 1.silverlight_developer. ...

  6. Excel 版本对应

    (1) 1985年:Excel 1.0 (2) 1993年:Excel 5.0——Office 4.2 (3) 1995年:Excel 7.0(Excel 95)——Office 95 (4) 199 ...

  7. JavaScript学习总结(六)——JavaScript判断数据类型总结

    最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数.浮 ...

  8. 如何用SPY++工具查看窗体的句柄

    我安装的是vs2012,先找到SPY++工具打开 打开方式: 方式1:通过路径(C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microso ...

  9. uart boot log

    CC开始 xmodem 传输. 按 Ctrl+C 取消. 100% 95 KB 4 KB/s 00:00:23 0 Errors U-Boot SPL 2018.01 (Jan 16 2019 - 1 ...

  10. zabbix项目实践

    一,Zabbix生产环境监测案例概述 1.1 项目规划 [x] :主机分组 交换机 Nginx Tomcat MySQL Apache PHP-fpm redis(也有状态页, 自己研究) memca ...