drools 规则引擎
来源:互联网 发布:html post json 编辑:程序博客网 时间:2024/05/18 04:59
Drools基本语法:
传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后
得到的结果。
在drools中,这个传递数据进去的对象,术语叫Fact对象,Fact对象是一个普通的java bean
规则中可以对当前的对象进行任何的读写操作,调用该对象提供的方法
当一个java bean插入到workingMemory中,规则使用的是原有对象的引用,通过fact对象的读写
对其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前workingMemory中插入删除新的Fact对象
规则文件可以使用.drl/.xml
使用规则:
package:对于一个规则文件而已,package是必须定义的,必须放在规则文件第一行
import:导入规则文件需要使用到的外部变量,导入的不仅仅可以是一个类,也可以是这个类
中的某一个可访问的静态方法
rule:定义一个规则,一个规则同时包含三个部分
1、属性部分,定义当前规则执行的一些属性等,比如是否可被重复执行、过期时间、生效时间等
2、条件部分,即LHS定义当前规则的条件,如:when Message判断当前workingMemory中是否存在Message对象
3、结果部分,即RHS可以写普通的java代码,即当前规则条件满足后执行的操作,可以直接访问fact对象的方法来操作
例如:
rule "name"
no-loop true
when
$message:Message(status == 0)
then
System.out.println("fit");
$message.setStatus(1);
update($message);
end
传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后
得到的结果。
在drools中,这个传递数据进去的对象,术语叫Fact对象,Fact对象是一个普通的java bean
规则中可以对当前的对象进行任何的读写操作,调用该对象提供的方法
当一个java bean插入到workingMemory中,规则使用的是原有对象的引用,通过fact对象的读写
对其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前workingMemory中插入删除新的Fact对象
规则文件可以使用.drl/.xml
使用规则:
package:对于一个规则文件而已,package是必须定义的,必须放在规则文件第一行
import:导入规则文件需要使用到的外部变量,导入的不仅仅可以是一个类,也可以是这个类
中的某一个可访问的静态方法
rule:定义一个规则,一个规则同时包含三个部分
1、属性部分,定义当前规则执行的一些属性等,比如是否可被重复执行、过期时间、生效时间等
2、条件部分,即LHS定义当前规则的条件,如:when Message判断当前workingMemory中是否存在Message对象
3、结果部分,即RHS可以写普通的java代码,即当前规则条件满足后执行的操作,可以直接访问fact对象的方法来操作
例如:
rule "name"
no-loop true
when
$message:Message(status == 0)
then
System.out.println("fit");
$message.setStatus(1);
update($message);
end
no-loop:定义当前的规则是否不允许多次循环执行,默认是false,也就是当前的规则只要满足条件,可以无限次执行
基本的文件样式如下:
pom.xml引入的:
<dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId></dependency>
定义Fact实体Product:
public class Product {
public static final String DIAMOND = "DIAMOND"; // 钻石
public static final String GOLD = "GOLD"; // 黄金
private String type;
private int discount;
//get,set省略
}
规则文件:
package com.rules
import cn.no7player.model.Product
rule Offer4Diamond
when
productObject : Product(type == Product.DIAMOND)
then
productObject.setDiscount(100);
end
rule Offer4Gold
when
productObject : Product(type == Product.GOLD)
then
productObject.setDiscount(75);
end
kmodule.xml
<?xml version="1.0" encoding="UTF-8" ?><kmodule xmlns="http://www.drools.org/xsd/kmodule"> <kbase name="rules" packages="com.rules"> <ksession name="ksession-rule"/> </kbase></kmodule>Demo测试如下:
package cn.no7player.test;import cn.no7player.model.Product;import org.junit.Test;import org.kie.api.KieServices;import org.kie.api.runtime.KieContainer;import org.kie.api.runtime.KieSession;public class DroolsTest{ @Test public void testRules(){ KieServices ks = KieServices.Factory.get(); KieContainer kieContainer = ks.getKieClasspathContainer(); //获取kmodule.xml中配置中名称为ksession-rule的session,默认为有状态的。 KieSession kSession = kieContainer.newKieSession("ksession-rule"); Product product = new Product(); product.setType(Product.DIAMOND); kSession.insert(product); int count = kSession.fireAllRules(); System.out.println("命中了"+count+"条规则"); System.out.println("商品" +product.getType() + "的商品折扣为" + product.getDiscount() + "%"); }}
运行的结果如下:
命中了1条规则
商品DIAMOND的商品折扣为100%
阅读全文
0 0
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- [Drools]JAVA规则引擎 -- Drools
- MySQL查询用in,怎么按照in里面的查询顺序进行排名
- Android中ActivityManagerService与应用程序(客户端)通信模型分析
- ssm框架后台对app的接口进行登录验证(拦截器,更智能只要方法上面有这个定义注解就验证)
- 使用FindBugs-IDEA插件找到代码中潜在的问题
- 获取首字母工具方法
- drools 规则引擎
- in_array,isset,array_key_exits()的效率对比
- JAVA知识_13
- linux内核栈和用户栈解析
- js 日期转字符串 时间类型转换
- 安装Django 文档
- 百度地图----浏览器定位API
- 自我修养——静态链接
- Proxifier+SecureCRT 实现代理+动态端口转发