我正在尝试编写一个需要了解当前时间的累积函数。 我显然可以使用 System.currentTimeMillis(),但为了测试我使用伪时钟运行 drools session ,并且希望能够测试此功能。
我正在寻找一种从 getResult() 方法中获取 session 时钟(或者更好的是 KnowledgeRuntime)的方法,或者如果不可能的话,从 drools 代码本身(在 te when 部分)中获取,所以我可以将时钟传递给函数
最佳答案
使用时钟时要小心,因为你可能会遇到很多惊喜。请注意,当将事实/事件插入 session 或通过更新/修改调用进行修改时,将评估约束。这意味着评估约束时的时钟时间可能与触发规则时的时钟时间不同。这就是为什么 drools 不将当前时间直接暴露给 LHS 模式的原因。
话虽如此,执行此操作的方法是将 session 时钟作为事实插入到 session 中并将其与任何其他事实一样绑定(bind):
rule X
when
$clock : SessionClock()
... your patterns / accumulate / etc ...
then
...
end
关于java - 从累积函数或规则代码访问 drools session 时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719441/