Drools是基于Java的规则引擎;
基本概念
Rule(规则):一条规则可以看作是IF...THEN...语句块,或者一个简单的IPO(即输入、处理和输出),描述了一组输入,一组判断和一组输出;
Fact(事实):事实就是规则中用到的输入,在Java中就是JavaBean Object;
Rule的管理
RuleFile:一组相关的Rule组成一个RuleFile,比如:
IF...THEN...ELSE...判断语句,是两个Rule:
Rule1:WHEN (A) THEN OUT1
Rule2:WHEN (!A) THEN OUT2
Rule1和Rule2紧密相关,耦合度高,应该组织到一起;
Package:一组功能相近的RuleFile组合成一个Package,类似于Java的Package;
RuleBase:是Drools的规则容器,所有使用到的Rule都加载到RuleBase中,由RuleBase来管理:
1)Rule的组织:按照Fact和Rule的对应关系,建立对应表Fact-Rule;
2)提供检索功能:按照Fact-Rule对应表,查找对应Facts的Rule列表;
3)生成Rule工作区(WorkMemory);
Fact的管理
WorkMemory:用户工作区,包含用户的数据和相关Rule的引用;
AssertObject:Fact操作,把用户数据(Fact,即JavaBean)传递给WorkMemory;
Retraction:Fact操作,把Fact从WorkMemory取消;
Modification:Fact操作,把更新(更改)过的消息通知工作区(可能会触发其它的Rule);
WorkMemory工作原理
1、创建WorkMemory后,是一个空的用户工作区;
2、可以设置AgendaFilter,以便筛选起作用的Rule集合;
3、通过AssertObject,设置Fact;
4、WorkMemory筛选匹配的Rule集合(如果有Filter,自动按条件筛选);
5、调用fireAllRules,执行Rule;
Rule的输出
规则的根本目的是产生一个供使用的输出结果,即修改后的JavaBean;
1、修改JavaBean(通过JavaBean的setter方法),然后Modify(obj);
2、产生一个新对象(new方法),然后传递给工作区(AssertObject),触发其它的Rule;
基本概念
Rule(规则):一条规则可以看作是IF...THEN...语句块,或者一个简单的IPO(即输入、处理和输出),描述了一组输入,一组判断和一组输出;
Fact(事实):事实就是规则中用到的输入,在Java中就是JavaBean Object;
Rule的管理
RuleFile:一组相关的Rule组成一个RuleFile,比如:
IF...THEN...ELSE...判断语句,是两个Rule:
Rule1:WHEN (A) THEN OUT1
Rule2:WHEN (!A) THEN OUT2
Rule1和Rule2紧密相关,耦合度高,应该组织到一起;
Package:一组功能相近的RuleFile组合成一个Package,类似于Java的Package;
RuleBase:是Drools的规则容器,所有使用到的Rule都加载到RuleBase中,由RuleBase来管理:
1)Rule的组织:按照Fact和Rule的对应关系,建立对应表Fact-Rule;
2)提供检索功能:按照Fact-Rule对应表,查找对应Facts的Rule列表;
3)生成Rule工作区(WorkMemory);
Fact的管理
WorkMemory:用户工作区,包含用户的数据和相关Rule的引用;
AssertObject:Fact操作,把用户数据(Fact,即JavaBean)传递给WorkMemory;
Retraction:Fact操作,把Fact从WorkMemory取消;
Modification:Fact操作,把更新(更改)过的消息通知工作区(可能会触发其它的Rule);
WorkMemory工作原理
1、创建WorkMemory后,是一个空的用户工作区;
2、可以设置AgendaFilter,以便筛选起作用的Rule集合;
3、通过AssertObject,设置Fact;
4、WorkMemory筛选匹配的Rule集合(如果有Filter,自动按条件筛选);
5、调用fireAllRules,执行Rule;
Rule的输出
规则的根本目的是产生一个供使用的输出结果,即修改后的JavaBean;
1、修改JavaBean(通过JavaBean的setter方法),然后Modify(obj);
2、产生一个新对象(new方法),然后传递给工作区(AssertObject),触发其它的Rule;