drools无国籍与有状态会话

时间:2015-11-01 14:20:50

标签: drools jbpm

我应该何时使用Drools无状态会话,使用它而不是有状态会话有什么好处?
在一些评论here中,有人说无状态会话包含一个有状态会话,这是否意味着当我在解雇后触发statfeul会话时,所有规则都会表现得像有状态的一样?

2 个答案:

答案 0 :(得分:2)

或许最好说两个(有状态的)KieSession和StatelessKieSessions都基于AbstractRuntime类为类提供API(接口)。

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

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

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

  • 对于简单的规则评估,尤其是通过某些远程通信,请使用无状态会话。
  • 为了充分利用生产系统的全部权力,即由于事实改变和事实阵容改变而继续重新评估规则条件,有必要使用有状态会话。

如果您计划使用简单的应用程序界面,请不要担心“好处”:只使用有状态会话。

答案 1 :(得分:2)

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

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