- Drools 教程
- Drools - 首页
- Drools - 简介
- Drools - Eclipse 插件
- Drools - 运行时
- Drools - 创建 Drools 程序
- Drools - 常用术语
- Drools - 规则编写
- Drools - 规则语法
- Drools - Drools 程序示例
- Drools - 调试
- Drools 有用资源
- Drools - 快速指南
- Drools - 有用资源
- Drools - 讨论
Drools - 规则编写
如果您查看 HelloWorld 项目 (Sample.drl) 中编写的默认规则,会发现使用了许多关键字,我们现在将对其进行解释。
Sample.drl
包 (Package) − 每条规则都以包名开头。包充当规则的命名空间。同一个包内的规则名称必须唯一。规则中的包类似于 Java 中的包。
导入语句 (Import statement) − 您想要应用规则的任何事实都需要导入。例如,以上示例中的 com.sample.DroolsTest.Message。
规则定义 (Rule Definition) − 它由规则名称、条件和结论组成。Drools 关键字为 rule、when、then 和 end。在上面的示例中,规则名称为“Hello World”和“GoodBye”。when 部分是两条规则中的条件,then 部分是结论。在规则术语中,when 部分也称为 LHS(左侧), then 部分也称为 RHS(右侧)。
现在让我们来看一下用于加载 Drools 并执行规则的 Java 文件中使用的术语。
知识库 (Knowledge Base)
知识库是一个接口,用于管理规则、流程和内部类型的集合。它包含在包org.drools.KnowledgeBase中。在 Drools 中,这些通常被称为知识定义或知识。知识定义分组到知识包中。可以添加或删除知识定义。知识库的主要目的是存储和重用它们,因为它们的创建成本很高。知识库提供创建知识会话的方法。
知识会话 (Knowledge Session)
知识会话是从知识库中检索的。它是与 Drools 引擎交互的主要接口。知识会话可以分为两种类型:
无状态知识会话 (Stateless Knowledge Session)
有状态知识会话 (Stateful Knowledge Session)
无状态知识会话 (Stateless Knowledge Session)
无状态知识会话是一个无状态会话,构成了最简单的用例,不使用推理。无状态会话可以像函数一样调用,传递一些数据,然后接收一些结果。无状态会话的常见示例包括:
验证
这个人是否有资格获得抵押贷款?
计算
计算抵押贷款保险费。
路由和过滤
将传入的消息(例如电子邮件)过滤到文件夹中。
将传入的消息发送到目标。
有状态知识会话 (Stateful Knowledge Session)
有状态会话生命周期更长,并允许随着时间的推移进行迭代更改。有状态会话的一些常见用例包括:
监控
股票市场监控和分析,用于半自动购买。
诊断
故障查找,医学诊断
物流
包裹跟踪和交付配置
知识构建器 (Knowledge Builder)
KnowledgeBuilder 接口负责从知识定义(规则、流程、类型)构建 KnowledgePackage。它包含在包org.drools.builder.KnowledgeBuilder中。知识定义可以采用多种格式。如果构建过程中有任何问题,KnowledgeBuilder 将通过这两种方法报告错误:hasErrors 和 getError。
下图解释了这个过程
在上面的示例中,由于我们采用的是无状态知识会话的简单示例,因此我们将事实插入会话中,然后调用 fireAllRules() 方法,您将看到输出。
对于有状态知识会话,一旦规则被触发,有状态知识会话对象必须调用dispose()方法来释放会话并避免内存泄漏。