我们正在使用 drools 并允许我们的用户输入他们自己的 drools 规则条件和后果。然而,为了让整个 drools 的东西更可靠,我们需要确保没有无限循环或其他阻塞事物阻塞整个系统。
对于规则循环(规则 A -> 规则 B -> 规则 A -> ...),我们采取了措施。但是,仍然可以使用类似的东西
for(int i=0; i<1000000; i++) {
doSomething();
}
问题是我们无法使用黑名单或其他东西来避免这一切,所以我们需要一个流口水的措施来做到这一点。
在当前 KnowledgeSession 上使用session.halt()
不会中止结果部分。session.dispose()
即使会话已经死了,结果也会运行,这不是我们需要的。
我也没有找到一些“最大执行时间”,这可能会限制结果执行在终止之前所允许的时间。
还尝试向 beforeActivationFired 添加一个钩子,它启动一个线程,该线程等待 10 秒,然后使用agendaItem.cancel()
以及从 kBase 中删除规则。无济于事,规则后果继续运行。
任何想法都会有所帮助。