searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Drools 规则引擎介绍

2023-03-28 02:57:44
35
0

Drools 规则引擎

Drools 是 Java 编写的一款开源规则引擎,具有一个易于访问企业策略、易于调整以及易于管理的开源 业务规则引擎,符合业内标准,速度快、效率高。Drools 实现了 Rete 算法 对所编写的规则求值,支持 声明方式表达业务逻辑。使用 DSL(Domain Specific Language)语言来编写业务规则,使得规 则通俗易懂,便于学习理解。支持 Java 代码直接嵌入到规则文件中。

Drools 主要分为两个部分:

  • 一是 Drools 规则,二是 Drools 规则的解释执行。

规则的编译与运行要通过 Drools 提供的相关 API 来实现。而这些 API 总体上游可分为三类:

  • 规则编译、规则收集和规则的执行。

Drools 相关概念

Drools 通过事实、规则和模式相互组合来完成工作。

  • 事实(Fact): 对象之间及对象属性之间的关系。
  • 规则(rule): 是由条件和结论构成的推理语句,一般表示为 if…Then。
      - if 部分称为 LHS (left-hand-side)
      - then 部分称为 RHS (right hand side)
  • 模式(module): 模式是指的不能在继续分割下去的最小的原子条件。

FACT 对象

Fact 对象是指在使用 Drools 规则时,将一个普通的 JavaBean 对象插入到规则引擎的 WorkingMemory 当中的对象。规则可以对 Fact 对象进行任意的读写操作。Fact 对象不是对原来的 JavaBean 对象进行 Clone,而是使用传入的 JavaBean 对象的引用。规则在进行计算 时需要的应用系统数据设置在 Fact 对象当中,这样规则就可以通过对 Fact 对象数据的读写实现对应用数据的读写操作。

Fact 对象通常是一个具有 getter 和 setter 方法的 POJO 对象,通过 getter 和 setter 方法 可以方便的实现对 Fact 对象的读写操作,所以我们可以简单的把 Fact 对象理解为规则与应用系统数据交互的桥梁或通道。

规则文件

标准规则文件的结构如下:

package package-name
imports
globals
functions
queries
rules

rules: 定义一个条规则。rule “ruleName”。一条规则包含三部分:属性部分、条件部分 和结果部分。rule 规则以 rule 开头,以 end 结尾。

rule "name" 
 attributes
 when
   LHS  # Left Hand Side
 then
   RHS  # Right Hand Side
 end
LHS 语法

LHS 是规则条件部分的 统称,由 0 个或多个条件元素组成。无条件,则为 true。

如果有多条规则元素,默认它们之间是“和”的关系,也就是说必须同时满足所有的条件 元素才会触发规则。

when 
 Pattern1()
 and Pattern2() 
then
 ... // actions
end

Pattern

# 匹配 Working Memory 中所有满足约束条件的 Person 对象。
Person( age == 50 )   # 等效于 Person( getAge() == 50 )

约束条件

优先级:&& > || > ,  # ',' 作用相当于 AND

Query

仅包含规则文件中的 LHS 部分,不用指定“when”和“then”部分。

query "query-1"
 $person : Person(age > 30)
end
RHS 语法

RHS 的主要功能是对 working memory 中的数据进行 insert、update、delete 或 modify 操 作。

  • modify 是基于结构化的更新操作
  rule "modify stilton"
   when
    $stilton : Cheese(type == "stilton") 
    then
    modify( $stilton ){ 
     setPrice( 20 ),
     setAge( "overripe" ) }
   end

相关文档

Drools Documentation

 

0条评论
作者已关闭评论
萧****秀
5文章数
0粉丝数
萧****秀
5 文章 | 0 粉丝
萧****秀
5文章数
0粉丝数
萧****秀
5 文章 | 0 粉丝
原创

Drools 规则引擎介绍

2023-03-28 02:57:44
35
0

Drools 规则引擎

Drools 是 Java 编写的一款开源规则引擎,具有一个易于访问企业策略、易于调整以及易于管理的开源 业务规则引擎,符合业内标准,速度快、效率高。Drools 实现了 Rete 算法 对所编写的规则求值,支持 声明方式表达业务逻辑。使用 DSL(Domain Specific Language)语言来编写业务规则,使得规 则通俗易懂,便于学习理解。支持 Java 代码直接嵌入到规则文件中。

Drools 主要分为两个部分:

  • 一是 Drools 规则,二是 Drools 规则的解释执行。

规则的编译与运行要通过 Drools 提供的相关 API 来实现。而这些 API 总体上游可分为三类:

  • 规则编译、规则收集和规则的执行。

Drools 相关概念

Drools 通过事实、规则和模式相互组合来完成工作。

  • 事实(Fact): 对象之间及对象属性之间的关系。
  • 规则(rule): 是由条件和结论构成的推理语句,一般表示为 if…Then。
      - if 部分称为 LHS (left-hand-side)
      - then 部分称为 RHS (right hand side)
  • 模式(module): 模式是指的不能在继续分割下去的最小的原子条件。

FACT 对象

Fact 对象是指在使用 Drools 规则时,将一个普通的 JavaBean 对象插入到规则引擎的 WorkingMemory 当中的对象。规则可以对 Fact 对象进行任意的读写操作。Fact 对象不是对原来的 JavaBean 对象进行 Clone,而是使用传入的 JavaBean 对象的引用。规则在进行计算 时需要的应用系统数据设置在 Fact 对象当中,这样规则就可以通过对 Fact 对象数据的读写实现对应用数据的读写操作。

Fact 对象通常是一个具有 getter 和 setter 方法的 POJO 对象,通过 getter 和 setter 方法 可以方便的实现对 Fact 对象的读写操作,所以我们可以简单的把 Fact 对象理解为规则与应用系统数据交互的桥梁或通道。

规则文件

标准规则文件的结构如下:

package package-name
imports
globals
functions
queries
rules

rules: 定义一个条规则。rule “ruleName”。一条规则包含三部分:属性部分、条件部分 和结果部分。rule 规则以 rule 开头,以 end 结尾。

rule "name" 
 attributes
 when
   LHS  # Left Hand Side
 then
   RHS  # Right Hand Side
 end
LHS 语法

LHS 是规则条件部分的 统称,由 0 个或多个条件元素组成。无条件,则为 true。

如果有多条规则元素,默认它们之间是“和”的关系,也就是说必须同时满足所有的条件 元素才会触发规则。

when 
 Pattern1()
 and Pattern2() 
then
 ... // actions
end

Pattern

# 匹配 Working Memory 中所有满足约束条件的 Person 对象。
Person( age == 50 )   # 等效于 Person( getAge() == 50 )

约束条件

优先级:&& > || > ,  # ',' 作用相当于 AND

Query

仅包含规则文件中的 LHS 部分,不用指定“when”和“then”部分。

query "query-1"
 $person : Person(age > 30)
end
RHS 语法

RHS 的主要功能是对 working memory 中的数据进行 insert、update、delete 或 modify 操 作。

  • modify 是基于结构化的更新操作
  rule "modify stilton"
   when
    $stilton : Cheese(type == "stilton") 
    then
    modify( $stilton ){ 
     setPrice( 20 ),
     setAge( "overripe" ) }
   end

相关文档

Drools Documentation

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0