《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
来源:互联网 发布:江边城外 知乎 编辑:程序博客网 时间:2024/05/17 02:58
lock-on-active
当在规则上使用ruleflow-group属性或agenda-group属性的时候,将lock-on-active 属性的值设置为true,可避免因某些Fact对象被修改而使已经执行过的规则再次被激活执行。可以看出该属性与no-loop属性有相似之处,no-loop属性是为了避免Fact被修改或调用了insert、retract、update之类的方法而导致规则再次激活执行,这里的lock-on-active 属性起同样的作用,lock-on-active是no-loop的增强版属性,它主要作用在使用ruleflow-group属性或agenda-group属性的时候。lock-on-active属性默认值为false。与no-loop不同的是lock-on-active可以避免其他规则修改FACT对象导致规则的重新执行。
因FACT对象修改导致其他规则被重复执行示例:
package com.rulesimport com.secbro.drools.model.Product;rule rule1 no-loop true when obj : Product(discount > 0); then obj.setDiscount(obj.getDiscount() + 1); System.out.println("新折扣为:" + obj.getDiscount()); update(obj); endrule rule2 when productObj : Product(discount > 1); then System.out.println("其他规则被触发了" + productObj.getDiscount()); end
执行之后打印结果为:
新折扣为:2其他规则被触发了2第一次执行命中了2条规则!
其他规则(rule2)因FACT对象的改变而被出发了。
通过lock-on-active属性来避免被其他规则更新导致自身规则被重复执行示例:
package com.rulesimport com.secbro.drools.model.Product;rule rule1 no-loop true when obj : Product(discount > 0); then obj.setDiscount(obj.getDiscount() + 1); System.out.println("新折扣为:" + obj.getDiscount()); update(obj); endrule rule2 lock-on-active true when productObj : Product(discount > 1); then System.out.println("其他规则被触发了" + productObj.getDiscount()); end
很明显在rule2的属性部分新增了lock-on-active true。执行结果为:
新折扣为:2第一次执行命中了1条规则!
标注了lock-on-active true的规则不再被触发。
后语
你的支持是我努力的最大动力!社区的建立离不开你的支持。此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。如有疑问可以留言也可以发送本人邮箱secbro2@gmail.com。击此处关注Drools博客专栏的持续更新《Drools博客专栏》
阅读全文
4 0
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历
- 《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern
- 《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)
- 《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
- 《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
- 《Drools7.0.0.Final规则引擎教程》第4章 注释&错误信息
- 《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
- 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
- 《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
- 《Drools7.0.0.Final规则引擎教程》第4章 Function函数
- 二级缓冲
- POSIX 信号
- 网络编程常识汇总.
- 7.16
- PIC与非PIC的优缺点
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
- 贪心好题(两种变量的贪心)poj3262 Protecting the Flowers
- stm32 GPIO 浮空输入的理解
- 继承的虚函数缺省参数值不要重新定义的原因
- observer
- js 数组
- 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
- Spring AOP 增强类型
- Spring data redis-StringRedisTemplate 用法