流口水无状态与有状态会话

drools stateless vs stateful session

我什么时候应该使用 Drools 无状态会话?使用它而不是有状态会话有什么好处?
在一些评论中 据说无状态会话包含有状态会话,这是否意味着当我在触发所有规则后销毁 statfeul 会话时会表现得像有状态会话?

也许更好的说法是(有状态的)KieSession 和 StatelessKieSession 都基于 class AbstractRuntime 为 classes 提供 API(接口)。

StatelessKieSession 提供了一个接口,用于通过单个 execute 方法调用执行一组命令,命令表示为一组对象。如果您想将命令发送到远程会话(但如果您 运行 应用程序中的会话则不是),这很有用。此外,这样的会话不会对工作内存中所做的更改做出反应,因此它的用处是有限的,尽管它可能比有状态会话更有效地执行第一轮也是唯一一轮。

一个execute调用意味着一个dispose调用,这是对会话对象的最后告别:将所有资源释放到垃圾回收中。

总结(Drools 文档中完整描述的内容)

  • 对于简单的规则评估,尤其是通过一些远程通信,请使用无状态会话。
  • 要利用生产系统的全部功能,即由于事实改变和事实排列改变而不断重新评估规则条件,有必要使用有状态会话。

如果您正在计划一个简单的应用程序界面,请不要担心 "benefits":只需使用有状态会话即可。

如果您想更新或控制在规则执行期间传递给规则的事实(数据),请使用有状态会话。您可以使用修改、收回方法。

如果您不想在规则执行期间更新事实,请使用无状态会话。