http://liureying.blog.163.com/blog/static/6151352011111391336589/?suggestedreading
简述:
规则文件是按规则引擎的规范与语法,记录一下处理逻辑。按引擎的算法来触发符合规则的处理
1.规则文件构成:
package(规则文件所在包*)import(导入java 包)globalsfunction(函数)query(查找)rules(规则*)
2.各部分介绍
- 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);}
#rulerule "rule1"wheneval(true)thenSystem.out.println("---------rule 1-------");//调用方法printName("具爱珍");end
rule "rule3"wheneval(true);thenSystem.out.println("------------rule 3--------");printInfo("依晨");end
note:
function 声明有两种方法
1.在规则文件内声明。只能在该规则文件中使用,不需要import2.在规则文件内import Java静态类作为function,需要使用规则引擎import function 类名.静态方法名,就能使用
5. query
作用:
query是 Drools 当中提供的一种根据条件在当前的 WorkingMemory 当中查找 Fact 的方法。
语法:1.不带参数语法query 名字dosomethingend
2.带参数语法
query 名字(参数类型 $参数名)
dosomething
end
示例:package com.demo.findimport 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 : StringaddressName : String
end
rule "rule1"
salience 2
when
eval(true);
then
Address add = new Address();add.setCity("中国上海");add.setAddressName("中国上海松江区");insert(add);
end