当前位置: 首页 > 知识库问答 >
问题:

将多个Drools DRL文件添加到KieBase中,这如何影响规则的执行顺序?

蒋嘉颖
2023-03-14

我想将不同的drl文件加载到一个kiebase中,如果规则没有显著性属性附加到它们,默认的执行顺序会与在kmodule中指定的顺序对齐吗?我的意思是,Drools在幕后,只需要从多个drl文件中自动创建一个大的drl文件,然后执行。我的理解是,如果规则文件中的规则没有显著性,那么当它们被写入时,它们将被执行,除非对现有事实进行任何修改/插入,否则可能会重新触发规则的无序。

谢谢你。

共有1个答案

岳浩穰
2023-03-14

你不应该依赖执行命令,除非你有突出点分配。在匹配阶段,Drools将根据显著性对规则进行排序(默认值为零)。在一个突出的地方,没有保证的执行命令,尽管通常是书面的命令。对于多个文件,这是写入文件系统的顺序--因此它将依次加载每个文件,并依次加载每个文件中的每个规则。

虽然你保证显著性100的规则会在显著性10的规则之前触发,但不能保证显著性100内的规则顺序。此外,如果你的规则具有显著性100扩展了一个规则具有显著性-1,那么该规则具有显著性-1将在显著性10之前触发。

您不应该编写依赖于加载顺序或类似内容的规则。如果您的规则需要以特定的顺序执行,请使用突出部分。否则,编写具有互斥左手边的更好的规则。

 类似资料:
  • 我正在尝试将规则添加到已经使用KieBuilder定义和构建的KiePackage。 我知道您可以使用以下方式删除规则: 但是否有一个添加规则的等价物?我尝试添加一个新的。将drl文件导入KieFileSystem,并使用KieScanner获取更改,但它似乎不起作用: 当我评估一个事实与ksesion1时,新规则不存在于KieBase中。我错过了什么吗?

  • 当多个进程并行运行时,Drools似乎会给出不正确的结果,并且在每个进程中,每次都会创建和处理一个新的对象。 试用版本:, 细节: 我并行执行了120个任务(使用7个线程)。在这120项任务中,drools对108项任务给出了正确的结果,但对12项任务执行了错误的规则(每次运行失败的任务数量各不相同)。 让我在这里发布代码和输出: 你知道这背后的原因吗? 更新:以上代码仅用于测试目的,以查看Kie

  • 我尝试在从KieBase中删除规则后重新创建KieSession,但删除的规则仍在触发。 我使用以下代码创建了一个KieBase并删除了一条规则: 但是当我根据ksesion1评估一个事实时,rule1仍然在触发。如何将编辑后的KieBase重新加载到新会话中?

  • 我目前在Java的编程课上学习多线程。根据我的理解,不同线程的执行顺序是无法预测的,因此确保我们实现机制以确保所有东西都按所需的顺序执行是很重要的。 我学到的机制之一是使用,它强制一个线程等待,直到其他线程完成执行。然而,下面的示例代码实际上让我更加困惑: 这段代码应该演示是如何工作的,它将执行,然后得到一个正确打印的。 然而,当我实际运行代码时,执行的顺序似乎仍然是随机的。我得到的结果是 那么,

  • 问题内容: 我有一个 JFrame 。 我也有一个 Box 类,它扩展了 Component 。该box类具有一个 paint 方法,该方法可以创建一个填充的矩形。 当我将这些Box组件的多个添加到我的JFrame时,当我在JFrame上调用 重绘 时,仅显示最近添加的一个。 我看了一下布局管理器,但是我不确定那不是我想要的。我所希望的是能够在屏幕上的任何位置制作整个矩形的动画。 (我还尝试创建一

  • 我有这样的情况,在规则文件中的所有规则必须检查执行。如果我的理解是正确的,文档所说的规则将由引擎任意执行。 我有一个或多个疑问。 > 我在许多地方得到了答案,我必须使用显著性功能来按顺序执行它们。如果我使用显著性,并且我有执行所有规则的要求,它真的会大规模地影响性能吗?如果是,它会如何影响性能,甚至规则引擎也会任意执行所有规则,比如一些随机顺序。 提前谢谢。