在 drools 中有没有办法检测无限循环并以编程方式停止会话?
In drools is there a way to detect endless loops and halt a session programmatically?
简而言之,我的问题是:
- drools 中是否内置了任何东西 allows/facilitates 检测无限循环?
- 有没有办法以编程方式停止会话(例如,对于检测到无限循环的情况)?
更多详情:
我计划在 server/platform 中添加流口水(6.2 或更高版本)运行,用户将在其中创建和执行他们自己的规则。我面临的问题之一是 carelessly/faulty 规则设计很容易导致无限循环(无论是被遗忘的 "no-loop true" 语句还是更复杂的 rule1 触发 rule2 触发 rule3(重新)触发 rule1 循环导致无限循环。
如果发生这种情况,流口水基本上会使我的 server/platform 停止。
我目前正在研究如何检测 and/or 终止无限循环中 运行 的会话。
现在,作为一个(看似)无限循环本身并没有什么是无效的,或者在某些情况下甚至可能是需要的,我可以想象没有很多针对这种情况的内置检测机制(如果有的话)。但由于我不是专家,我很乐意知道是否有任何内置的东西可以检测无限循环?
在我的用例中,我可以根据任何规则可能被激活的频率阈值将会话确定为 "endlessly looped"。
据我了解,我可能可以使用 AgendaEventListeners 来跟踪触发任何规则的频率,如果满足阈值,则插入控制事实或以某种方式触发包含此会话的 drools.halt() 的规则。
我想知道(并且找不到很多细节)是否可以通过编程方式 halt/terminate 会话。
我只遇到过一个 fireUntilHalt() 方法,但这似乎不是可行的方法(或者我真的不明白)。
此外,此时我只打算使用无状态会话(但如果它封装得很好,我也可以使用有状态会话,如果这使我的目标更容易实现的话)。
任何 answers/ideas/feedback 我的初始方法都非常欢迎 :)
谢谢!
任何 RBS 实施的基本突破点都是在设计允许 "users create and design their own rules" 的地方创建的。我不知道为什么一些营销炒作会为非程序员打开大门,让他们在没有任何保护的情况下编写 程序代码 。
检测会话是否暂停在理论上是不可能的。 Google "Halting problem".
对于某些上下文,您可能会想出最多可以执行的规则数量限制或类似的东西。你可以使用侦听器来计数和引发异常等等。
基本上,一旦您屈服于执行业余爱好者创建的未经测试的代码,您就会有非常 的坏牌。
简而言之,我的问题是:
- drools 中是否内置了任何东西 allows/facilitates 检测无限循环?
- 有没有办法以编程方式停止会话(例如,对于检测到无限循环的情况)?
更多详情:
我计划在 server/platform 中添加流口水(6.2 或更高版本)运行,用户将在其中创建和执行他们自己的规则。我面临的问题之一是 carelessly/faulty 规则设计很容易导致无限循环(无论是被遗忘的 "no-loop true" 语句还是更复杂的 rule1 触发 rule2 触发 rule3(重新)触发 rule1 循环导致无限循环。 如果发生这种情况,流口水基本上会使我的 server/platform 停止。
我目前正在研究如何检测 and/or 终止无限循环中 运行 的会话。 现在,作为一个(看似)无限循环本身并没有什么是无效的,或者在某些情况下甚至可能是需要的,我可以想象没有很多针对这种情况的内置检测机制(如果有的话)。但由于我不是专家,我很乐意知道是否有任何内置的东西可以检测无限循环? 在我的用例中,我可以根据任何规则可能被激活的频率阈值将会话确定为 "endlessly looped"。 据我了解,我可能可以使用 AgendaEventListeners 来跟踪触发任何规则的频率,如果满足阈值,则插入控制事实或以某种方式触发包含此会话的 drools.halt() 的规则。
我想知道(并且找不到很多细节)是否可以通过编程方式 halt/terminate 会话。 我只遇到过一个 fireUntilHalt() 方法,但这似乎不是可行的方法(或者我真的不明白)。
此外,此时我只打算使用无状态会话(但如果它封装得很好,我也可以使用有状态会话,如果这使我的目标更容易实现的话)。
任何 answers/ideas/feedback 我的初始方法都非常欢迎 :)
谢谢!
任何 RBS 实施的基本突破点都是在设计允许 "users create and design their own rules" 的地方创建的。我不知道为什么一些营销炒作会为非程序员打开大门,让他们在没有任何保护的情况下编写 程序代码 。
检测会话是否暂停在理论上是不可能的。 Google "Halting problem".
对于某些上下文,您可能会想出最多可以执行的规则数量限制或类似的东西。你可以使用侦听器来计数和引发异常等等。
基本上,一旦您屈服于执行业余爱好者创建的未经测试的代码,您就会有非常 的坏牌。