流口水无状态与有状态会话
drools stateless vs stateful session
我什么时候应该使用 Drools 无状态会话?使用它而不是有状态会话有什么好处?
在一些评论中 据说无状态会话包含有状态会话,这是否意味着当我在触发所有规则后销毁 statfeul 会话时会表现得像有状态会话?
也许更好的说法是(有状态的)KieSession 和 StatelessKieSession 都基于 class AbstractRuntime 为 classes 提供 API(接口)。
StatelessKieSession 提供了一个接口,用于通过单个 execute
方法调用执行一组命令,命令表示为一组对象。如果您想将命令发送到远程会话(但如果您 运行 应用程序中的会话则不是),这很有用。此外,这样的会话不会对工作内存中所做的更改做出反应,因此它的用处是有限的,尽管它可能比有状态会话更有效地执行第一轮也是唯一一轮。
一个execute
调用意味着一个dispose
调用,这是对会话对象的最后告别:将所有资源释放到垃圾回收中。
总结(Drools 文档中完整描述的内容)
- 对于简单的规则评估,尤其是通过一些远程通信,请使用无状态会话。
- 要利用生产系统的全部功能,即由于事实改变和事实排列改变而不断重新评估规则条件,有必要使用有状态会话。
如果您正在计划一个简单的应用程序界面,请不要担心 "benefits":只需使用有状态会话即可。
如果您想更新或控制在规则执行期间传递给规则的事实(数据),请使用有状态会话。您可以使用修改、收回方法。
如果您不想在规则执行期间更新事实,请使用无状态会话。
我什么时候应该使用 Drools 无状态会话?使用它而不是有状态会话有什么好处?
在一些评论中
也许更好的说法是(有状态的)KieSession 和 StatelessKieSession 都基于 class AbstractRuntime 为 classes 提供 API(接口)。
StatelessKieSession 提供了一个接口,用于通过单个 execute
方法调用执行一组命令,命令表示为一组对象。如果您想将命令发送到远程会话(但如果您 运行 应用程序中的会话则不是),这很有用。此外,这样的会话不会对工作内存中所做的更改做出反应,因此它的用处是有限的,尽管它可能比有状态会话更有效地执行第一轮也是唯一一轮。
一个execute
调用意味着一个dispose
调用,这是对会话对象的最后告别:将所有资源释放到垃圾回收中。
总结(Drools 文档中完整描述的内容)
- 对于简单的规则评估,尤其是通过一些远程通信,请使用无状态会话。
- 要利用生产系统的全部功能,即由于事实改变和事实排列改变而不断重新评估规则条件,有必要使用有状态会话。
如果您正在计划一个简单的应用程序界面,请不要担心 "benefits":只需使用有状态会话即可。
如果您想更新或控制在规则执行期间传递给规则的事实(数据),请使用有状态会话。您可以使用修改、收回方法。
如果您不想在规则执行期间更新事实,请使用无状态会话。