转载: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下的规则将不会被执行。

最新文章

  1. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
  2. 【转载】关于 Ubuntu 的小知识分享
  3. visual studio 局域网远程调试web项目
  4. C# IList<T>转为DataTable
  5. Python之Flask Web开发
  6. 毕向东JAVA视频讲解(第七课)
  7. C++库研究笔记——操作符重载实现类型转换&这样做的意义
  8. poj2391,poj2455
  9. 萌货猫头鹰登录界面动画iOS实现分析
  10. MakePic.com 图片制造 打造个性签名 拒绝垃圾邮件 生成个性印章
  11. BZOJ 1050: [HAOI2006]旅行comf( 并查集 )
  12. javascript预编译
  13. LuaFramework内存资源管理器ResourceManger详解及切换场景资源清理
  14. Y2 MyBatis(二)
  15. list内含有元组或字典
  16. 【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂
  17. Linux下怎样搜索文件
  18. 关于php
  19. Kubernetes 安装
  20. redis性能测试报告

热门文章

  1. Oracle 起诉 Google 事件
  2. php安装时开启很多扩展,如果忘了开启某些扩展,以后还能加上吗?答案是可以的
  3. 3-23Agile Web Development,3-24(chapter: 6)
  4. HDU 4764 Stone (巴什博弈)
  5. java标号
  6. 简话Angular 08 Angular ajax
  7. PHP:第一章——php中的变量001 /普通赋值/引用赋值/php变量的检查与销毁
  8. WEBSERVICE-AXIS2服务端代码
  9. 3.strcpy使用注意(3)
  10. TMemo Ctrl + A