zoukankan      html  css  js  c++  java
  • Drools规则

    1.实现业务规则的集中管理

    2.可以动态的改变业务规则,从而快速响应需求变更

    fact:一个普通的JavaBean插入到规则的WorkMemory当中后的对象

    1.Drools提供的API,API可以分为三类:规则编译,规则执行

    knowledgeBuilder作用:编译编写好的规则,生产规则包,knowledgePackage

    Drools当中提供了两个对象与规则引擎进行交互:statefulKnowledgeSession与StatelesKnowledgeSession

    与规则引擎进行交互交,(用来接收业务数据,执行规则的)

    fact是指在Drools规则应用当中,将一个普通的JavaBean插入到规则的WorkingMemory当中后的对象,fact是原来的对象的引用,规则与应用系统数据交互的桥梁和通道

    2.drools的规则文件当中package对于规则文件中规则的管理只限于逻辑上的管理

    对于同一package 下的用户自定义函数、自定义的查询等,不管这些函数与查询是否在
    同一个规则文件里面,在规则里面是可以直接使用的,这点和Java 的同一package 里的Java
    类调用是一样的。

    LHS left hand side 条件部分

    [绑定变量名:]Object([field 约束])

    ;绑定变量不仅可以用在对象上,也可以用在对象的属性上面,命名方法与
    对象的命名方法相同;“field 约束”是指当前对象里相关字段的条件限制

    比较操作符::>、>=、<、<=、= =、!=、contains、not contains、
    memberof、not memberof、matches、not matches

    not contains :not contains 作用与contains 作用相反,not contains 是用来判断一个Fact 对象的某个字
    段(Collection/Array 类型)是不是包含一个指定的对象,和contains 比较符相同,它也只能
    用在对象的field 当中

    RHS

    结果部分部分又被称之为Right Hand Side,简称为RHS,在一个规则当中then 后面部分就
    是RHS,只有在LHS 的所有条件都满足时RHS 部分才会执行。

    在RHS 当中可以使用LHS 部分当中定义的绑定变量名、设置的全局变量、或者是直
    接编写Java 代码(对于要用到的Java 类,需要在规则文件当中用import 将类导入后方能使
    用,这点和Java 文件的编写规则相同

    在 Drools 当中,在RHS 里面,提供了一些对当前Working Memory 实现快速操作的
    宏函数或对象,比如insert/insertLogical、update 和retract 就可以实现对当前Working Memory
    中的Fact 对象进行新增、删除或者是修改

    一旦调用insert 宏函数,那么Drools 会重新与所有的规则再重新匹配一次,对于没有设
    置no-loop 属性为true 的规则,如果条件满足,不管其之前是否执行过都会再执行一次,这
    个特性不仅存在于insert 宏函数上,后面介绍的update、retract 宏函数同样具有该特

    salience”的属性,该属性的作用是通过一个数字来确认
    规则执行的优先级,数字越大,执行越靠前

    因为一旦
    调用insert、update 或retract 函数,Drools 会重新与所有的规则再重新匹配一次,对于没有
    设置no-loop 属性为true 的规则,如果条件满足,不管其之前是否执行过都会再执行一次。

    salience 1

    no-loop true,如果添加no-loop 属性为true,那么Customer的name 属性将只会输出一次。

    update(new FactHandle(),new Object());它可以支持创建一个新的Fact 对象,从而把FactHandle
    对象指定的Fact 对象替换掉,从而实现对象的全新更新

    宏对象,宏函数,drools

    如果您希望在规则文件里更多的实现对当前的Working Memory 控制,那么可以使用
    drools 宏对象实现,通过使用drools 宏对象可以实现在规则文件里直接访问Working
    Memory。在前面介绍update 宏函数的时候我们就使用drools 宏对象来访问当前的Working
    Memory,得到一个指定的Fact 对象的FactHandle。同时前面介绍的insert、insertLogical、
    update 和retract 宏函数的功能皆可以通过使用drools 宏对象来实现

    kcontext = knowledgeRuntime

    属性部分:

    规则的属性共有13 个,它们分别是:activation-group、agenda-group、
    auto-focus、date-effective、date-expires、dialect、duration、enabled、lock-on-active、no-loop、
    ruleflow-group、salience、when,

    salience:规则执行的优先级,越大优先级越高,默认值为0

    no-loop:控制已经执行过的规则在条件再次满足时是否再次执行,默认为false,

    引擎 检查规则

    date-effective:控制规则只有在到达后才会触发,在规则运行时,引擎会自动拿当前操作
    系统的时候与date-effective 设置的时间值进行比对,只有当系统时间>=date-effective 设置的
    时间值时,规则才会触发执行,否则执行将不执行,dd-MMM-yyyy,25-Sep-2009,修改默认的格式:System.setProperty("drools.dateformat","yyyy-MM-dd");

    date-expires:那么会
    将这个属性的值与当前系统时间进行比对,如果大于系统时间,那么规则就执行,否则就不
    执行

    enable:定义一个规则是否可用的,默认为true

    dialect:该属性用来定义规则当中要使用的语言类型,目前Drools5 版本当中支持两种类型的语
    言:mvel 和java,默认是Java语言

    duration(期间):如果设置了该属性,那么规则将在该属性指定的值之后在另外一个
    线程里触发,单位毫秒,duration 3000

    agenda-group:规则的调用与执行是通过StatelessSession 或StatefulSession 来实现的,一般的顺序是创
    建一个StatelessSession 或StatefulSession,将各种经过编译的规则的package 添加到session
    当中,接下来将规则当中可能用到的Global 对象和Fact 对象插入到Session 当中,最后调用
    fireAllRules 方法来触发、执行规则

    function :唯一不同之处就是在Drools 的函数定义当中没有可见范围的设定,而Java 当中可
    以通过public、private 之类来设置方法的可见范围

    import function

    查询 在Drools 当中查询可分为两种:一种是不需要外部传入参数;一种是需要外部传入参
    数。查询的内容就是查询的条件部分,条件部分内容的写法与规则的LHS 部
    分写法完全相同

    QueryResults ->QueryResultsRow->Fact

    对象的定义:

    在 Drools 当中,可以定义两种类型的对象:一种是普通的类型Java Fact 的对象;另一
    种是用来描述Fact 对象或其属性的元数据对象。

    通过使用import function 关键字,将test.RuleTools 类中静态方法
    printInfo 引入到当前规则文件中

    mvel
  • 相关阅读:
    day 26 python2和python3的区别 模块logging 的高级版,collections 模块,random模块
    常用模块:time,os,sys,rondom
    模块 hashlib(算法) configparser(配置) logging(日志)
    序列化,json pickle,shelve
    面向对象的封装,多态,单例模式
    属性,类方法,静态方法,反射
    面向对象的接口类 以及鸭子类型
    面向对象的继承
    面向对象的介绍
    reset internet explorer settings with registry
  • 原文地址:https://www.cnblogs.com/lelouchKOP/p/5974567.html
Copyright © 2011-2022 走看看