drools规则拼接_Drools规则文件结构说明

本文详细介绍了Drools规则文件的结构,包括package、import、rule等部分,并着重解析了rule的属性如agenda-group、salience。讨论了条件部分LHS的多种操作,如类型比较操作符、对Fact对象的操作,以及结果部分RHS的执行逻辑。还提到了函数定义、方言使用,以及eval表达式的应用。
摘要由CSDN通过智能技术生成

一、规则文件构成

package(规则文件所在包)

import(导入java包)

global(规则文件中的"全局变量")

function(函数)

query(查找)

rule(规则)

二、重点部分介绍

1、rule

1 rule "Rule Name"2 属性名称 属性值3 when4 条件5 then6 行为7 end

以下为在规则中使用的常用属性及其描述:

1)agenda-group:为规则设定所属的规则组,当规则组获得焦点时,会匹配组内的规则,如果规则组没有获得焦点,那么组内的规则将不会被触发。

该属性默认为MAIN。

2)salience:优先级,数值越大越先执行,这个可以控制规则的执行顺序。从0开始,即0优先级最小。

2、import

导入规则文件需要使用到的外部变量

不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法

1)导入类

2)导入Java类的静态方法

import function 类名.静态方法名

当调用该静态方法时,使用eval()。括号内写"方法名(参数)"。eval(true)参数为布尔值。类似于 while(true)。

三、十二中类型比较操作符

>  >= 

四、规则的条件部分LHS(Left Hand Side)

1、

when:规则条件开始。条件可以单个,也可以多个,多个条件一次排列,比如

when

eval(true)

$customer:Customer()

$message:Message(status==0)

上述罗列了三个条件,当前规则只有在这三个条件都匹配的时候才会执行RHS部分,三个条件中第一个

eval(true):是一个默认的api,true 无条件执行,类似于 while(true)

$message:Message(status==0) 这句话标示的:当前的workingMemory存在Message类型并且status属性的值为0的Fact对象,这个对象通常是通过外部java代码插入或者自己在前面已经执行的规则的RHS部分中insert进去的。

前面的$message代表着当前条件的引用变量,在后续的条件部分和RHS部分中,可以使用当前的变量去引用符合条件的FACT对象,修改属性或者调用方法等。可选,如果不需要使用,则可以不写。

2、对Fact对象private属性的操作可以使用getter和setter方法或.+属性名。

3、如果条件全部是 &&关系,可以使用“,”来替代,但是两者不能混用。

如:$customer :Customer(name == "john", age > 20)

五、规则的结果部分RHS(Right Hand Side)

1、当规则条件满足,则进入规则结果部分执行,结果部分可以是纯java代码。

下面的内容摘抄自http://kingsun1980.iteye.com/blog/459272/,感谢博主的分享!

六、函数Functions

function可以在规则文件中定义,但更多的是使用外部类中定义的static方法,这样只要Java中可以实现的逻辑,在规则中都可以做为function调用。

七、方言dialect

在规则表达式中可以使用方言来简化表达式,使之更加具有可读性。

Drools方言默认的是Java,Drools也支持mvel。

mvel是一种基于Java应用程序的表达式语言,它支持属性和方法的直接访问。

八、规则的条件部分

1、目前本人正在使用的两个表达式是eval表达式和内置eval表达式

如:

eval表达式

$account : Account()

eval(accountService.isUniqueAccountNumber($account))

内置eval表达式

$customer1 : Customer()

Customer(eval(age == $customer1.getAge() + 10))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值