如果有在看Hello World项目(Sample.drl)的默认规则,也有很多使用的关键字,我们现在将一个一个地来解释。
-
包: 每一个规则开始包的名称。包充当规则命名空间。包内的规则名称必须是唯一的。在规则中包类似于Java包。
-
Import语句: 要应用规则的任何fact,这些fact都需要导入。例如,com.sample.DroolsTest.Message; 在上面的例子。
-
规则定义: 它由规则名称,条件和后果。 Drools的关键字:rule, when, then, 以及 end. 在上述的例子中,规则名 “Hello World” 和 “GoodBye”. when 部分是两个规则中的条件,then 部分是后果.在规则的术语, when 部分也被称为LHS(左手侧)以及 then 部分作为规则的RHS(右手边)。
现在让我们来看看在用于装载的Drools并执行规则的Java文件中使用的术语。
知识库
知识库是管理规则,流程,和内部类型的集合的接口. 它包含在包 org.drools.KnowledgeBase 内. 在Drools中,这些被统称为knowledge definitions 或 knowledge. 知识定义被分成 knowledge packages. 知识的定义可以被添加或删除. 知识库的主要目的是为存储和重新使用它们,因为它们的创建是昂贵的。知识库提供了创造知识的会话方法。
知识会话
知识会话从知识库检索。它是用于与Drools的引擎进行交互的主要接口。知识会话有两种类型:
- 无状态知识会话
- 有状态知识会话
无状态会话知识
无状态会话知识是一个无状态的会话,形成最简单的使用情况,不会利用推断。一个无状态的会话可以被称为像一个函数,它传递了一些数据,然后将接收回来了一定的成效。无状态会话的常见例子包括:
-
验证
- 这个人有资格获得抵押贷款?
-
计算
- 计算按揭保险费。
-
路由和过滤
- 过滤传入的消息,如电子邮件,到文件夹中。
- 发送传入的消息到目的地
状态知识会话
状态会话更长保留,并允许随着时间的推移反复变化。一些常见的用例有状态会话包括:
-
监控
- 现货市场监测和分析半自动买盘。
-
诊断
- 故障排除,医疗诊断
-
物流
- 包裹跟踪和交付供应
知识生成器
KnoledgeBuilder接口负责构建从知识的定义(规则,流程,类型)一个KnowledgePackage。它包含在 org.drools.builder.KnowledgeBuilder 包内. 知识的定义可以是各种格式。如果使用构建有任何问题,KnowledgeBuilder将报告通过这两种方法的错误: hasErrors 以及 getError.
下图说明了过程
在上面的例子中,因为我们正在采取无状态会话知识的一个简单的例子,我们已经插入了事实的会话,然后fireAllRules()方法被调用,你会看到输出结果。
如果有状态会话的知识,一旦规则被激发,有状态的知识会话对象必须调用方法Dispose()释放会话以避免内存泄漏。