📜  Drools-规则写作

📅  最后修改于: 2020-10-15 10:56:54             🧑  作者: Mango


 

如果您看到Hello World项目(Sample.drl)中编写的默认规则,则将使用很多关键字,我们现在将对其进行解释。

默认规则

Sample.drl

  • -每个规则均以包名称开头。该包充当规则的名称空间。包中的规则名称必须唯一。规则中的软件包与Java中的软件包相似。
  • 导入语句-无论您想对规则应用什么事实,都需要导入这些事实。例如com.sample.DroolsTest.Message;在上面的示例中。
  • 规则定义-它由规则名称,条件和后果组成。 Drools关键字是rule,when,thenend 。在上面的示例中,规则名称为“ Hello World”和“ GoodBye”。什么时候是规则中的条件,然后是结果。在规则术语中, when部分也称为规则的LHS(左侧), then部分也称为规则的RHS(右侧)。

现在,让我们看一下Java文件中用于加载Drools和执行规则的术语。

知识库

知识库是管理规则,流程和内部类型的集合的界面。它包含在org.drools.KnowledgeBase包中。在Drools中,这些通常称为知识定义知识。知识定义分为知识包。可以添加或删除知识定义。知识库的主要目的是存储和重用它们,因为它们的创建成本很高。知识库提供了创建知识会话的方法。

知识会议

从知识库中检索知识会话。它是与Drools Engine交互的主要界面。知识会议可以分为两种类型-

  • 无状态知识会议
  • 有状态知识会议

无状态知识会议

无状态知识会话是一种无状态会话,它构成最简单的用例,不利用推理。可以像调用函数一样调用无状态会话,将一些数据传递给它,然后再接收一些结果。无状态会话的常见示例包括-

  • 验证方式
    • 这个人有资格抵押吗?
  • 计算方式
    • 计算抵押贷款溢价。
  • 路由和过滤
    • 将传入消息(例如电子邮件)过滤到文件夹中。
    • 将传入消息发送到目的地

有状态知识会议

有状态会话的寿命更长,并且允许随着时间的推移进行迭代更改。有状态会话的一些常见用例包括-

  • 监控方式
    • 半自动购买的股票市场监控和分析。
  • 诊断程序
    • 故障查找,医疗诊断
  • 后勤
    • 包裹追踪和配送

知识创造者

KnoledgeBuilder接口负责根据知识定义(规则,过程,类型)构建KnowledgePackage。它包含在org.drools.builder.KnowledgeBuilder包中。知识定义可以采用各种格式。如果构建存在任何问题,则KnowledgeBuilder将通过以下两种方法报告错误: hasErrorsgetError

下图说明了该过程

知识创造者

在上面的示例中,我们以无状态知识会话的简单示例为例,我们在会话中插入了事实,然后调用fireAllRules()方法,然后看到输出。

在有状态知识会话的情况下,一旦激发了规则,则有状态知识会话对象必须调用方法dispose()来释放会话并避免内存泄漏。