需求场景

版本:drools使用的版本是:7.2.0.Final

需求场景:根据每次请求的规则分组id,运行不同的规则

初步方案

使用agenda-group关键字区分规则,使用下面这条代码来focus到不同的规则分组:

kieSession.getAgenda().getAgendaGroup(id).setFocus();

遇到问题

其他不相关,没有被focus标注的规则也被运行,规则条件中调用的外部工具方法的日志已经打印,说明已经被执行。

为什么会出现这种情况?

原因

kieSession中包含的所有规则,默认情况下首先会执行所有规则的LHS,就是when和then之间的部分。这也就是说与是否使用focus并无关系。

而当真正运行时才会进行指定的focus规则的then部分的执行。

解决方案

规则根据kieSession进行拆分,无用的规则不需要加载到kieSession中。这样,就避免了本来没有使用的规则的LHS的判断。

Drools技术视频

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools7系列优惠套餐》

Drools规则引擎基础+Workbench实战视频教程套餐



drools规则引擎agenda-group注意事项插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2019/11/28/drools-agenda-group-problem/