无状态 session 与有状态 session 的对比

标签 drools jbpm

什么时候应该使用 Drools 无状态 session ?使用它代替有状态 session 有什么好处?
在一些评论中here据说无状态 session 包装了有状态 session ,这是否意味着当我在触发所有规则后销毁 statfeul session 时,其行为会像有状态 session 一样?

最佳答案

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

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

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

总结(Drools 文档中有完整描述)

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

如果您计划使用简单的应用程序界面,则不必担心“好处”:只需使用有状态 session 即可。

关于无状态 session 与有状态 session 的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463155/

相关文章:

jbpm - 在任何信号边界事件上获取 "Data Output has no Data Type"

java - 为工作流系统建议持久性策略

java - 如何在部署在tomcat 7上的jbpm-console中添加新用户?

java - 使用 Drools 的专家系统

spring - drools-6 (kie) 自动扫描(来自 spring)来自 kie 工作台部署工件的模块和 session

java - 如何将drools的输出发送到java

Java规则API : [No RuleServiceProvider registered against URI: http://drools. org/),根本原因(null)]

java - 如何在没有 KIE-console 的情况下使用 JBPM 6.3 api 和 eclipse 部署 bpmn 文件?

jdbc - 在 Oracle 到 SQL Server 迁移期间 jBPM+jBoss 中的 XA 事务中断