规则引擎-Drools

来源:互联网 发布:打印机端口名称是什么 编辑:程序博客网 时间:2024/05/23 01:12

http://blog.sina.com.cn/s/blog_539d361e0100ncgp.html

 

 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;

 

原创粉丝点击