在Web应用程序中使用Drools Expert / Flow的最佳实践

时间:2010-09-28 23:03:07

标签: web-applications architecture drools drools-flow

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

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

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

我要求的基本上是否有上述的最佳做法?文档和示例虽然非常好,但在这些特定点上并不清楚。

我确实读过有关Drools Grid的内容,不确定这是否能解决我的问题,而且似乎正在开发中。如果我的问题不清楚,请说出来。

BR Magnus

1 个答案:

答案 0 :(得分:4)

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

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

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