【问题标题】:Guided Decision Table and Guided Rule has same ruleflow group. Which rule would get executed first?引导决策表和引导规则具有相同的规则流组。哪个规则将首先执行?
【发布时间】:2021-10-25 23:04:38
【问题描述】:

我有一个为某些收敛因素设置配置的引导规则文件。后来我有一个具有相同规则流组的引导决策表。 即使我没有在这两个文件中提及任何显着性,引导规则也会首先执行并设置配置值,稍后将相同的模型导入引导决策表中,并且这些默认值在引导规则中设置用于引导决策表。

是否有特定原因“为什么引导规则首先执行,引导决策表稍后执行,即使它们具有相同的规则流组”

【问题讨论】:

  • 除非您使用显着性,否则执行顺序是不确定的。通常它与规则被加载/读入内存的顺序有关。

标签: jboss drools jbpm kie kie-workbench


【解决方案1】:

除非您使用显着性,否则执行顺序是不确定的。不能保证规则 A 总是在规则 B 之前。它现在可能总是按照这个顺序 (A -> B),但这不能保证,明天或下次你进行规则更改或版本更新时,它可能会以不同的顺序进行。它通常与规则加载到内存中的顺序有关(这就是为什么单个 DRL 文件中的非显着性规则倾向于从文件顶部到文件底部执行,因为这是它们被读取的顺序.)

如果您的规则要求它们以特定顺序执行,您应该在它们上加上显着性,这样规则 X 将始终在规则 Y 之前执行,因为它们具有显着性。或者,您可以重写您的规则以依赖执行顺序(无论如何这被认为是好的做法。)

Drools 提供的唯一顺序保证是给定显着性的规则将同时执行,尽管不能保证这些规则在显着性的顺序。没有显着性的规则都默认为显着性 0,所以这个保证成立。所有规则都执行,但没有保证顺序,也不一定能提前一致确定(因此是“非确定性的”)。


所以说到底,当您的问题是“首先执行哪个规则?”答案是——除非你有显着性,否则没关系。如果它确实很重要,你需要修正你的规则。

【讨论】:

  • Roddy,如果我给我的引导规则的显着性为 100,并且在引导决策表中不给我的规则任何显着性,我认为我的引导规则将始终首先运行。因为我的 GDT 没有显着性,默认情况下它的显着性为 0。
  • 是的,默认为零。
猜你喜欢
  • 2015-08-03
  • 2011-06-20
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多