在drools中,有没有一种方法可以检测无休止的循环并以编程方式停止会话?
简言之,我的问题是:在drools中,有没有一种方法可以检测无休止的循环并以编程方式停止会话?,drools,Drools,简言之,我的问题是: 是否有任何内置于drools中的东西允许/方便检测无休止的循环 是否有方法以编程方式停止会话(例如,对于检测到的无止境循环) 更多详情: 我计划让drools(6.2或更高版本)在一个服务器/平台上运行,在这个服务器/平台上,用户将创建并执行自己的规则。我面临的一个问题是,粗心/错误的规则设计很容易导致无止境的循环(无论是被遗忘的“no loop true”语句还是更复杂的rule1触发器rule2触发器rule3(re)触发器rule1循环导致无止境的循环)。 如果发
- 是否有任何内置于drools中的东西允许/方便检测无休止的循环
- 是否有方法以编程方式停止会话(例如,对于检测到的无止境循环)
谢谢 任何RBS实施的根本突破点都是在设计允许“用户创建和设计自己的规则”的地方创建的。我不知道为什么一些市场宣传为非程序员在没有任何保护的情况下编写程序代码打开了大门 检测会话是否停止在理论上是不可能的。谷歌“停止问题” 对于某些上下文,您可能会提出最多可以执行的规则数限制或类似的限制。您可以使用侦听器来计数和引发异常,等等
基本上,一旦你屈服于由业余爱好者创建的未经测试的代码的执行,你就有了非常糟糕的牌 你好,劳恩,谢谢你的反馈。在我看来,疯狂地创建规则的不仅仅是任何“业余”或非程序员。但即使在我们的团队中(由一些经验丰富的程序员组成),我也注意到理解RBS范式的困难。在长时间运行(即服务器类型)的应用程序中运行drools的问题必须足够常见,以保证采用“停止此执行”的方法。最后一个问题:您知道是否有一种程序化的方式来停止无状态会话吗?(或者甚至可以通过drools.halt()在规则中进行尝试……)您可以通过安装侦听器、监视激活并抛出异常来创建一个非常好的紧急停止机制,从而在会话激活过程中进行尝试。或者,您可以调用fireAllRules,并限制点火次数。(这只适用于有状态会话,但这没有问题。)Ciao,我和@Sebastian处于类似的场景中,我使用@laune提到的
fireAllRules(int max)
和阈值。我还希望通过实现某种侦听器来改善这种情况,正如@laune所示,因此,如果您以后还发现了其他替代方案或它的良好实现,@Sebastian,请让我们共享=)thanks@Tari劳恩,谢谢你们,我甚至不知道有限制的消防规则。如果我最终得到了其他或更好的东西,我将对此进行调查并在这里发布。