drools 规则文件 —— 文件构成介绍

来源:互联网 发布:js 事件触发target 编辑:程序博客网 时间:2024/06/06 03:50

http://liureying.blog.163.com/blog/static/6151352011111391336589/?suggestedreading

简述:
规则文件是按规则引擎的规范与语法,记录一下处理逻辑。按引擎的算法来触发符合规则的处理

1.规则文件构成:
package(规则文件所在包*)
import(导入java 包)
globals
function(函数)
query(查找)
rules(规则*)

2.各部分介绍
  1. rules(规则*)
作用:规则文件规则部分
语法:
rule 规则名
when
   条件
then
   处理
end;

note:
一个规则文件可以有多个规则

2.package(规则文件所在包*)
作用:
package的作用是用来对功能相似或相关的文件放在同一个package下进行管理。与java的package类似
语法:
package com.demo.fun

3.import(导入java 包)
作用:
对于要用到的Java类,需要在规则文件当中用 import将类导入后方能使
用,这点和Java文件的编写规则相同

语法:
import 类名;

示例:
package com.demo.find
#Applicant是com.demo.Applicant,跟规则不在同一个包

import com.demo.*;

rule "text"
when
app : Applicant(age < 30)
then
System.out.println("age > 0");
end

4.function
作用:
函数是定义在规则文件当中一代码块,作用是将在规则文件当中若干个规则都会用到的业务操作封装起来,实现业务代码的复用,减少规则编写的工作量。 

语法:
#void/返回类型 function方法名(参数类型:参数名){
dosomething
}

示例:
package com.demo.fun

#导入java类的静态方法
#import function 类名.静态方法名
import function com.demo.fun.RuleTools.printInfo


#在规则文件function声明
function void printName(String name){
System.out.println("你的名字是:" +name);
}

#rule
rule "rule1"
when
eval(true)
then 
System.out.println("---------rule 1-------");
//调用方法
printName("具爱珍");
end

rule "rule3"
when
eval(true);
then 
System.out.println("------------rule 3--------");
printInfo("依晨");
end

note:
function 声明有两种方法
1.在规则文件内声明。只能在该规则文件中使用,不需要import
2.在规则文件内import Java静态类作为function,需要使用规则引擎import function 类名.静态方法名,就能使用

5.query
作用:
query是 Drools 当中提供的一种根据条件在当前的 WorkingMemory 当中查找 Fact 的方法。

语法:
1.不带参数语法
query 名字 
 dosomething 
 end

2.带参数语法
query 名字(参数类型 $参数名)
dosomething
end

示例:
package com.demo.find
import com.demo.*;

#query
query "myQueryTest"
app : Applicant(age > 30)
end

query "testQuery"(int $age)
app : Applicant(age > $age)
end

rule "text"
when
app : Applicant(age < 30)
then
System.out.println("age > 0");
end
6.globals
作用:
在Drools规则引擎当中,用于记录规则当中产生的数据及状态的变化数据,通过
在 StatefulKnowledgeSession 当中设置 global 对象来实现

语法:
global 类型 公共变量名;

示例:
package  com.demo.myglobal

global java.util.List myGlobalList;
global com.demo.Applicant app;

rule "rule1"
when
   $inNum:Integer(); 
   eval($inNum > 2)
then 
#System.out.println($inNum+">2");
myGlobalList.add("grobal test");
app.setAge(app.getAge() + 1);
end

7.declare
作用:
Drools除了可以接受用户在外部向 WorkingMemory当中插入现成的
Fact对象,还允许用户在规则文件当中定义一个新的 Fact对象。

语法:
declare Address
熟悉名 : 类型
end

示例:
package com.demo.fact

declare Address
city : String
addressName : String
end

rule "rule1"
salience 2
when
eval(true);
then 
Address add = new Address();
add.setCity("中国上海");
add.setAddressName("中国上海松江区");
insert(add);
end

原创粉丝点击