【问题标题】:Best practices for using Drools Expert/Flow in a Web Application在 Web 应用程序中使用 Drools Expert/Flow 的最佳实践
【发布时间】:2023-03-06 04:40:01
【问题描述】:

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

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

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

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

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

BR 马格努斯

【问题讨论】:

    标签: web-applications architecture drools drools-flow


    【解决方案1】:

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

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

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

    【讨论】:

    • 不幸的是,使用 Drools Flow 隐含意味着我必须使用 StatefulKnowledgeSession,否则 Flow 不起作用。我已经尝试过了,据我记得我得到了一个运行时异常。到目前为止,我能找到的唯一提示是在请求之间保留有关会话的所有数据。我想这归结为该工具的使用模式。也许我在应用 Drools 时遗漏了一些基本的东西。我发现的示例似乎更倾向于桌面应用程序使用 (Swing) 和持续进行的会话。
    猜你喜欢
    • 2010-11-24
    • 2011-02-18
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多