无限循环中的日期比较规则
Date comparison rule going in Infinite loop
我正在尝试执行下面列出的一组 5 条规则-
假设有两个实体 - 实体 1 和实体 2。
Entity1 包含 3 个日期类型变量 - Date1、Date2、Date3
Entity2包含一个日期类型的变量——Date4
- 规则 1 - 如果日期 1 > 日期 2,则抛出错误消息
- 规则 2 - 如果 Date2 > Date3,则抛出错误消息
- 规则 3 - 如果 Date3 < Date4,则抛出错误消息
- 规则 4 - 如果日期 1 > 今天的日期,则抛出错误消息
- 规则 4 - 如果日期 3 < 今天的日期,则抛出错误消息
过了一会儿,我注意到日志越来越大,系统内存不足。
进一步挖掘,我在 org.drools 包上启用了 TRACE,发现规则在循环中并且没有停止。
我正在使用 Drools Workbench 7.2.0 Final
请建议如何进行此操作。
编辑 -
添加了 DRL 文件的片段 DRL
一旦一个 modify( $passport )
被执行,所有匹配 LHS 的规则都可能被重新触发。无循环仅阻止修改完成的规则;它不会禁止循环遍历两个或多个规则。
抑制这种循环的最佳技术是在所有规则中添加一个约束来检测修改何时完成,例如
Passport( response == null, ... )
我正在尝试执行下面列出的一组 5 条规则-
假设有两个实体 - 实体 1 和实体 2。 Entity1 包含 3 个日期类型变量 - Date1、Date2、Date3 Entity2包含一个日期类型的变量——Date4
- 规则 1 - 如果日期 1 > 日期 2,则抛出错误消息
- 规则 2 - 如果 Date2 > Date3,则抛出错误消息
- 规则 3 - 如果 Date3 < Date4,则抛出错误消息
- 规则 4 - 如果日期 1 > 今天的日期,则抛出错误消息
- 规则 4 - 如果日期 3 < 今天的日期,则抛出错误消息
过了一会儿,我注意到日志越来越大,系统内存不足。
进一步挖掘,我在 org.drools 包上启用了 TRACE,发现规则在循环中并且没有停止。
我正在使用 Drools Workbench 7.2.0 Final
请建议如何进行此操作。
编辑 - 添加了 DRL 文件的片段 DRL
一旦一个 modify( $passport )
被执行,所有匹配 LHS 的规则都可能被重新触发。无循环仅阻止修改完成的规则;它不会禁止循环遍历两个或多个规则。
抑制这种循环的最佳技术是在所有规则中添加一个约束来检测修改何时完成,例如
Passport( response == null, ... )