2010-09-28 73 views
9

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

到目前为止,我已经得到了专家和流量从我的测试案例的工作,但我有一个很难搞清楚如何最好地实现Web容器内流动。

我应该把所有的脚手架成一个无状态会话EJB,让每个请求建立一切从头开始,然后运行流/规则?这似乎是对我的浪费资源。我是否可以存储单个知识会话,并在Web请求之间共享这些会话,并发访问它,这种情况是否会扩展并且线程安全(我的猜测是否定)?汇集知识会议是一个好主意吗?

我要求的基本上是否有上述的最佳做法?这些文档和例子虽然很好,但在这些特殊点上还不清楚。

我看过一些关于Drools的网格,不知道这会解决我的问题,这似乎是正在开发中。如果我的问题不清楚,请说出来。

BR马格努斯

回答

3

的知识库是线程安全的,大重量(它并不便宜,以创建),所以你会很可能要保留在应用范围。现在,大多数人倾向于使用无状态架构,并为每个Web请求创建一个StatelessKnowlegdeSession(线程不安全且便宜创建),例如在无状态会话bean(或接缝/ CDI bean或spring bean )。但是,如果您拥有有状态EJB的力量,那么继续使用一个StafefulKnowlegdeSession来处理同一个对话中的所有请求可能是有益的。

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

+0

Unfortunaly使用Drools的流动隐含意味着我必须使用StatefulKnowledgeSession,否则流量没有按”工作。我试过了,从我记得我得到一个运行时异常。 到目前为止,我唯一能找到自己的提示是坚持所有关于请求之间会话的数据。 我想它归结为工具的使用模式。也许我在我的Drools应用程序中缺少一些基本的东西。我发现的实例似乎更倾向于桌面应用程序的使用(Swing)和持续进行的会话。 – Magnus 2010-12-22 07:56:14

相关问题