《Drools7.0.0.Final规则引擎教程》第4章 global全局变量

简介: 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量

global 全局变量

global用来定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。通常,可以用来为规则文件提供数据或服务。特别是用来操作规则执行结果的处理和从规则返回数据,比如执行结果的日志或值,或者与应用程序进行交互的规则的回调处理。


全局变量并不会被插入到Working Memory中,因此,除非作为常量值,否则不应该将全局变量用于规则约束的判断中。对规则引擎中的fact修改,规则引擎根据算法会动态更新决策树,重新激活某些规则的执行,而全局变量不会对规则引擎的决策树有任何影响。在约束条件中错误的使用全局变量会导致意想不到的错误。


如果多个包中声明具有相同标识符的全局变量,则必须是相同的类型,并且它们都将引用相同的全局值。


实例代码如下:


规则文件内容:


package com.rules
import com.secbro.drools.model.Risk
import com.secbro.drools.model.Message
global com.secbro.drools.EmailService emailService
rule "test-global"
agenda-group "test-global-group"
when
then
    Message message = new Message();
    message.setRule(drools.getRule().getName());
    message.setDesc("to send email!");
    emailService.sendEmail(message);
end

测试代码:

@Test
public void testGlobal(){
    KieSession kieSession = this.getKieSession("test-global-group");
    int count = kieSession.fireAllRules();
    kieSession.dispose();
    System.out.println("Fire " + count  + " rule(s)!");
}

实体类:

public class Message {
    private String rule;
    private String desc;
    // getter/setter
    }

操作类:

public class EmailService {
    public static void sendEmail(Message message){
        System.out.println("Send message to email,the fired rule is '" + message.getRule()
                + "', and description  is '" + message.getDesc() + "'");
    }
}

执行之后,打印结果:


Send message to email,the fired rule is 'test-global', and description  is 'to send email!'

Fire 1 rule(s)!

上面的实例完成了一个规则从触发到通过global调用emailService方法的实现。


具体代码后续会更新到github上:https://github.com/secbr/drools


目录
相关文章
|
Java 应用服务中间件 API
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
231 0
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
|
Java 编译器 API
《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
222 0
《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
|
Java 测试技术 API
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
215 0
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
|
Java 编译器
《Drools7.0.0.Final规则引擎教程》第4章 Function函数
《Drools7.0.0.Final规则引擎教程》第4章 Function函数
229 0
《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象
《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象
264 0
《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
202 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
165 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
159 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
181 0
《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用
《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用
302 0