9

我目前正在自学 Drools Expert/Flow 以及 GWT。我想使用 Drools Flow 作为事件/命令总线和业务规则引擎来实现应用程序不同部分之间的松散耦合。

到目前为止,我已经从我的测试用例中获得了 Expert 和 Flow 的工作,但我很难弄清楚如何在 Web 容器中最好地实现 Flows。

我是否应该将所有脚手架放入无状态会话 EJB 中,让每个请求从头开始设置所有内容,然后运行流程/规则?这对我来说似乎是一种资源浪费。我可以改为存储单个知识会话并在 Web 请求之间共享该会话,同时访问它,该场景是否可以扩展并且它是线程安全的(我的猜测是否定的)?汇集知识会议是个好主意吗?

我要问的基本上是上述是否有任何最佳实践?文档和示例虽然在其他方面非常好,但在这些特定点上并不清楚。

我确实读过一些关于 Drools Grid 的东西,不确定这是否能解决我的问题,而且这似乎正在开发中。如果我的问题不清楚,请直说。

BR马格努斯

4

1 回答 1

4

知识库是线程安全且重量级的(创建起来并不便宜),因此您可能希望将其保留在应用程序范围内。

目前,大多数人倾向于使用无状态架构并为每个 Web 请求创建一个 StatelessKnowlegdeSession(线程不安全且创建成本低),例如在无状态会话 bean(或 seam/CDI bean 或 spring bean)中。但是,如果您拥有有状态 EJB 的能力,那么继续使用一个 StafefulKnowlegdeSession 来处理同一对话中的所有请求可能是有益的。

我不确定 StatefulKnowlegdeSession 是否是线程安全的(不这么认为),所以我提出了一个问题:https ://issues.jboss.org/browse/JBRULES-2842

于 2010-12-21T08:20:56.427 回答