• Right Hand Side,当LHS所有条件满足才会执行
  • 可以使用LHS部分定义的绑定变量、全局变量、或者直接编写JAVA代码。
  • 提供宏函数操作working memory fact对象,如insert/update/retract,使用会触发规则重新匹配
  • 宏对象drools操作working memory,kcontext操作KnowledgeRuntime

modify块

  • Modify表达式块,修改完后自动更新到workmemory中
  • 语法

    modify(fact-expression){
      <修改Fact 属性的表达式>[,<修改Fact 属性的表达式>*]
    }

package com.sample

import  com.bean.Customer;
import com.bean.Account; rule "modify"
when
$customer : Customer(name=="七夜雪" )
then
System.out.println( "modify Rule success and Customer is : " + $customer.getName() );
modify($customer){ //modify块,修改之后会重新触发规则执行
setName("碧落"); //直接使用修改fact属性的表达式
}
end rule "modify 1"
when
$customer : Customer(name=="碧落" )
then
System.out.println( "modify Rule success and Customer is : " + $customer.getName() );
end
  /**
* modify块
* @throws Exception
*/
@Test
public void testModify() throws Exception {
KnowledgeBase kbase = readKnowledgeBase("modify.drl");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
Customer customer = new Customer();
customer.setName("七夜雪");
ksession.insert(customer);
ksession.fireAllRules();
logger.close();
}

执行结果:

属性

用来控制规则执行:

  • activation-group:具有相同的activation-group的规则,只有一个会被执行,可配合salience确定哪个规则被执行
  • agenda-group:在执行fireAllRules之前,所有的规则以及fact都存在agenda中,agenda-group对agenda进行分组
  • auto-focus:
  • date-effective:规则生效时间,系统时间>=date-effective时触发,默认格式“dd-MMM-yyyy”,可通过System.setProperty("drools.dateformat", "yyyy-MM-dd");设置时间格式
  • date-expires:规则失效时间,与date-effective相反,格式一致
  • dialect:两种方言,java和mvel,默认为java
  • duration:规则将在指定时间之后的另一个线程触发,时间单位毫秒
  • enabled:规则是否可用,默认为true
  • lock-on-active:增强版的no-loop,主要在使用ruleflow-group或agenda-group时使用,默认为false
  • no-loop:控制已经执行的规则在条件满足的情况下,是否会再次执行,默认false,为true则只能执行一次
  • ruleflow-group
  • salience:规则优先级,值越大优先级越高,默认为0

date-effective、date-expires

 

最新文章

  1. mybatis3.2.3+spring3 控制台打印sql解决办法
  2. git常见错误
  3. 利用SQL 建立和删除 LINKED SERVER
  4. MySQL_订单类型细分_20161222
  5. 3.2---最小栈(CC150)
  6. HDU 3622 Bomb Game(二分+2SAT)
  7. 问题: ActivityManager: Warning: Activity not started, its current task has been brought to the front
  8. 最大权闭合图最大获益(把边抽象为点)HDU3879
  9. php将中文插入数据库出现乱码
  10. Python学习笔记——基础篇【第六周】——PyYAML &amp; configparser模块
  11. Android项目文件结构
  12. Servlet和Filter的url匹配以及url-pattern详解 及 filter 循环问题的解决
  13. LeetCode 548. Split Array with Equal Sum (分割数组使得子数组的和都相同)$
  14. 如何解决Linux 系统下 ifconfig 命令无网络接口 ens33
  15. 动态控制jQuery easyui datagrid工具栏显示隐藏
  16. Python习题(第一课)
  17. #032 有空就看PTA
  18. SpringBoot入门教程(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常
  19. LAB12 Transaction
  20. ZOJ 4062 Plants vs. Zombies(二分答案)

热门文章

  1. window7 共享wifi(不通过wifi软件)
  2. rpm卸载软件error preun
  3. 利用PushbackReader读取文件中某个字符串之前的内容
  4. webdriver 选择
  5. Android使用SVG小结
  6. 解决:Eclipse安装Pydev插件报错: An error occurred while collecting items to be installed session context was:(profile=...
  7. JavaScript如何处理解析JSON数据详解
  8. hdoj-1013-Digital Roots(九余数定理)
  9. THUPC2018 城市地铁规划
  10. UVA - 11212 Editing a Book (IDA*)