JAVA

drools-规则引擎语法

2018-05-18  本文已影响0人  大方一号

Drools语法-Language

关键词

Pakage

Function

Query

Rule

rule定义规则。rule "ruleName"

一个规则可以包含三个部分:属性部分,条件部分:即LHS,结果部分:即RHS.

image

属性部分-Attributes

定义当前规则执行的一些属性等,比如是否可被重复执行、过期时间、生效时间等。
activation-group agenda-group auto-focus date-effective date-expires dialect duration duration-value enabled lock-on-active no-loop ruleflow-group salience

[图片上传失败...(image-26f804-1526628115111)]

条件部分-LHS

定义当前规则的条件,如when Message(); 判断当前workingMemory中是否存在Message对象。

Left Hand SideLHS)是规则的条件部分的公共名称。它由零个或多个条件元素组成。
如果LHS为空,它将被认为是一个条件元素,它总是为真,并且当创建一个新的WorkingMemory会话时,它将被激活一次。

    Conditions / LHS —匹配模式(Patterns)

    没有字段约束的Pattern
    Person()

    有文本字段约束的Pattern
    Person( name == “bob” )

    字段绑定的Pattern
    Person( $name : name == “bob” )
    变量名称可以是任何合法的java变量,$是可选的,可由于区分字段和变量

    Fact绑定的Pattern
    $bob : Person( name == “bob” )字段绑定的Pattern

    变量约束的Pattern
    Person( name == $name )

Drools提供了十二种类型比较操作符:
> >= < <= == != contains not contains memberOf not memberOf matches not matches

其他条件元素:

结果部分-RHS

这里可以写普通java代码,即当前规则条件满足后执行的操作,可以直接调用Fact对象的方法来操作应用。

Right Hand SideRHS)是规则的结果或动作部分的通用名称;此部分应包含要执行的操作的列表。在规则的RHS中使用命令式或条件式代码是不好的做法;作为一个规则应该是原子的性质 - “when this, then do this”,而不是“when this, maybe do this”。规则的RHS部分也应该保持较小,从而保持声明性和可读性。如果你发现你需要在RHS中的命令式和/或条件代码,那么也许你应该把这个规则分成多个规则。 RHS的主要目的是插入,删除或修改工作存储器数据。为了协助,有一些方便的方法可以用来修改工作记忆;而不必首先引用工作内存实例。

一些内置的method。

上一篇下一篇

猜你喜欢

热点阅读