【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
转载:https://blog.csdn.net/wo541075754/article/details/75332720
agenda-group
规则的调用与执行是通过StatelessKieSession或KieSession来实现的,一般的顺序是创建一个StatelessKieSession或KieSession,将各种经过编译的规则添加到session当中,然后将规则当中可能用到的Global对象和Fact对象插入到Session当中,最后调用fireAllRules 方法来触发、执行规则。
在没有调用fireAllRules方法之前,所有的规则及插入的Fact对象都存放在一个Agenda表的对象当中,这个Agenda表中每一个规则及与其匹配相关业务数据叫做Activation,在调用fireAllRules方法后,这些Activation会依次执行,执行顺序在没有设置相关控制顺序属性时(比如salience属性),它的执行顺序是随机的。
Agenda Group是用来在Agenda基础上对规则进行再次分组,可通过为规则添加agenda-group属性来实现。agenda-group属性的值是一个字符串,通过这个字符串,可以将规则分为若干个Agenda Group。引擎在调用设置了agenda-group属性的规则时需要显示的指定某个Agenda Group得到Focus(焦点),否则将不执行该Agenda Group当中的规则。
规则代码:
package com.rules rule "test agenda-group" agenda-group "abc"
when
then
System.out.println("规则test agenda-group 被触发");
end
rule otherRule when
then
System.out.println("其他规则被触发");
end
调用代码:
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kieContainer.newKieSession("ksession-rule"); kSession.getAgenda().getAgendaGroup("abc").setFocus();
kSession.fireAllRules();
kSession.dispose();
执行以上代码,打印结果为:
规则test agenda-group 被触发
其他规则被触发
如果将代码kSession.getAgenda().getAgendaGroup(“abc”).setFocus()注释掉,则只会打印出:
其他规则被触发
很显然,如果不设置指定AgendaGroup获得焦点,则该AgendaGroup下的规则将不会被执行。
最新文章
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
- 【转载】关于 Ubuntu 的小知识分享
- visual studio 局域网远程调试web项目
- C# IList<;T>;转为DataTable
- Python之Flask Web开发
- 毕向东JAVA视频讲解(第七课)
- C++库研究笔记——操作符重载实现类型转换&这样做的意义
- poj2391,poj2455
- 萌货猫头鹰登录界面动画iOS实现分析
- MakePic.com 图片制造 打造个性签名 拒绝垃圾邮件 生成个性印章
- BZOJ 1050: [HAOI2006]旅行comf( 并查集 )
- javascript预编译
- LuaFramework内存资源管理器ResourceManger详解及切换场景资源清理
- Y2 MyBatis(二)
- list内含有元组或字典
- 【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂
- Linux下怎样搜索文件
- 关于php
- Kubernetes 安装
- redis性能测试报告
热门文章
- Oracle 起诉 Google 事件
- php安装时开启很多扩展,如果忘了开启某些扩展,以后还能加上吗?答案是可以的
- 3-23Agile Web Development,3-24(chapter: 6)
- HDU 4764 Stone (巴什博弈)
- java标号
- 简话Angular 08 Angular ajax
- PHP:第一章——php中的变量001 /普通赋值/引用赋值/php变量的检查与销毁
- WEBSERVICE-AXIS2服务端代码
- 3.strcpy使用注意(3)
- TMemo Ctrl + A