繁体   English   中英

Drools 中的 KieContainer vs KieModule vs KieBase vs KieSession

[英]KieContainer vs KieModule vs KieBase vs KieSession in Drools

我正处于探索阶段,将 Drools 用作我的一个项目的业务规则引擎。 阅读一点文档,我发现 Drools 使用 Kie 管理规则。

对医生进行的更多研究也给了我以下结论。 有人可以帮助验证/调整我的以下理解吗? 提前致谢。

KieSession - 是规则和数据之间的运行时推断器。

Kiebase - 是属于同一上下文的规则集合,可以包含多个 kiesession。

Kiemodule - 是 KieBases 的集合,位于 kmodule.xml 下。

Kiecontainer - 是一个包含以上所有内容的容器。

你基本上是对的。

基本单元是规则,其中包含您的业务逻辑。 您将业务逻辑规则收集到 KieBase 中。 理想情况下,每个 KieBase 都是相关规则的离散集合——例如,您可以有一个 KieBase 包含入站请求的验证规则,另一个 KieBase 包含用于监视来自警报系统的事件的规则。

当您决定触发规则时,您将确定哪些 KieBase(s) 包含您要调用的逻辑,然后针对它们请求 session。 api 将返回适当的 session(无状态或有状态),您将向其中添加输入数据并触发规则。

从文档中:

KieBase是所有应用程序知识定义的存储库。 它将包含规则、流程、功能和类型模型。 KieBase 本身不包含数据; 相反,会话是从 KieBase 创建的,可以将数据插入其中,并可以从其中启动流程实例。 KieBase 可以从包含定义 KieBase 的KieModuleKieContainer中获取。

KieContainer 和 KieModule 有点难以区分,但在实践中它们基本上是相同的(容器是运行时实现,模块是规范。)有技术原因它们是离散实体,但你很少会(如果有的话) ) 同时处理两者 它们都只包含 KieBase 和会话、计时器等的任何配置(实际上是 kiebase 运行时。)


作为一个更实际的例子,假设我们有一个小学管理员的应用程序。 我们有几种不同类别的规则:跟踪学生迟到和对过度缺勤处分; 为班级分配成绩; 和跟踪学习用品的库存。

我们将规则组织成三个 KieBase:

  • 出席和迟到
  • 成绩
  • 存货

当我们启动应用程序时,我们将通过 kjar 从存储库或本地内存规则加载所有规则。 这些将作为 KieModules 加载。 然后将编译各种 KBase 并将其读入 memory。

我们会保留对 KieServices 的引用,或者可能是 KieContainer,这取决于您是有多个模块还是只有一个包含所有 KieBases 的模块。 (回想一下,在运行时,我们处理的是 KieContainer,而不是抽象的 KieModule。)

当我们的应用程序需要触发特定类型的规则时,我们会从 KieServices(通过 KieContainer)获取 KieBase,请求 session,然后触发规则。 因此,如果我们在处理库存管理的应用程序中,我们将取出包含相关库存规则的 KieBase,获取 session,然后启动它。

(请注意,您可以获得针对 KieContainer 或 KieBase 的 session。不过,这不是您的问题的一部分。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM