首页 > 其他分享 >drools_09_drools_helper

drools_09_drools_helper

时间:2022-10-30 11:09:15浏览次数:74  
标签:drools KnowledgeHelper halt helper getRule RHS 09 rule

RHS中的drools 对象

在 RHS 中我们可以使用 drools 对象, 该对象是 KnowledgeHelper 接口的一个实例, 它是在rule被执行时被自动注入.

KnowledgeHelper 接口的官方文档:
​​​https://repository.jboss.org/nexus/content/unzip/unzip/org/drools/drools-core/7.53.0.Final/drools-core-7.53.0.Final-javadoc.jar-unzip/org/drools/core/spi/KnowledgeHelper.html​

几个重要的函数

  • drools.getWrokingMemory()
    该方法返回一个WorkingMemory接口的实例, 常用的stateful KieSession 就是该接口的实现类, 所以在RHS中理论上可以做很多事情, 当然我们不推荐RHS中有很复杂的逻辑.
  • drools.getRule()
    该方法System.out.println(drools.getRule().getName());返回 rule 本身的对象, 包括Rule 名称, agenda group, salience 等属性, 最常用的是, 在RHS中通过这个函数来输出rule的名称.
  • drools.update()/insert()/delete()
    同名宏函数可以认为是 drools.update()/insert()/delete() 的简化写法.
  • drools.halt()
    立即终止后面所有规则的执行, 两个主要使用场景: (1)一系列有递进关系的规则, 如果前置规则已经走到死胡同, 没必要在在执行后续规则, 可以在死胡同处调用halt;
    (2)调试规则文件, 在debug时先给目标rule设置一个高优先级, 然后在其RHS中调用 drools.halt(), 这样就只会运行该规则.

drl 示例文件

package com.sample.rules

import com.sample.Order;


rule "KnowledgeHelper"
when
$order:Order(originalPrice>0)
then
$order.setAmount(100);
System.out.println(drools.getRule().getName());
drools.halt(); // KnowledgeHelper2 将不会被执行
end


rule "KnowledgeHelper2"
when
$order:Order(originalPrice>0)
then
$order.setAmount(100);
System.out.println(drools.getRule().getName());
end



标签:drools,KnowledgeHelper,halt,helper,getRule,RHS,09,rule
From: https://blog.51cto.com/u_15585381/5807411

相关文章

  • drools_07_macro_functions
    delete()和retract()宏函数delete()用于在ruleRHS中将对象从工作内存中删除,retract()函数有同样的作用,不过已经被标记为废弃状态.insert()宏函数insert()用于在rul......
  • HCIA-ICT实战基础09-远程接入安全管理
    HCIA-ICT实战基础-远程接入安全管理目录AAA概述AAA配置实现telnet原理与配置Stelnet(华为ssh的另一种称呼)配置1AAA概述1.1基本概念AAA是Authentication(认证)、......
  • AcWing 1209. 带分数
    题目条件:枚举全排列,是9个数a,b,c的位数都还不知道枚举a,b,c的位数,枚举a和b的位数,c=9-a-b判断等式是否成立//暴力dfs#include<iostream>#include<cstrin......
  • 0096-Go-错误处理
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/errors目标使用Go语言的错误处理。错误处理packagemainimport("errors""fmt......
  • 0097-Go-协程
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/goroutines目标使用Go语言的协程。启动函数协程packagemainimport("fmt""ti......
  • 0098-Go-通道
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channels目标使用Go语言的通道。示例packagemainimport"fmt"funcmain(){ messag......
  • 0099-Go-缓冲通道
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channel-buffering目标使用Go语言的缓冲通道。示例packagemainimport"fmt"funcmain......
  • 0090-Go-字符串
    环境Time2022-08-23Go1.19前言说明参考:https://gobyexample.com/strings-and-runes目标使用Go语言的字符串。字节遍历packagemainimport"fmt"funcma......
  • 0091-Go-结构体
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/structs目标使用Go语言的结构体。直接使用结构体packagemainimport"fmt"typeperson......
  • 0092-Go-方法
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/methods目标使用Go语言的方法。值方法packagemainimport"fmt"typerectstruct{......