Drools中文网

基于java的功能强大的开源规则引擎

本站QQ群:
446150745

Drools规则编写

如果有在看Hello World项目(Sample.drl)的默认规则,也有很多使用的关键字,我们现在将一个一个地来解释。

Default Rule

 

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.

下图说明了过程

KnoledgeBuilder

在上面的例子中,因为我们正在采取无状态会话知识的一个简单的例子,我们已经插入了事实的会话,然后fireAllRules()方法被调用,你会看到输出结果。

如果有状态会话的知识,一旦规则被激发,有状态的知识会话对象必须调用方法Dispose()释放会话以避免内存泄漏。

留下评论

电子邮件地址不会被公开。