规则引擎 Drools(六):运行时组件 Global

Global 是会话与外部环境之间的通讯的纽带。通过 Global,既可以向会话中传递信息,也可以从会话中接收信息。

KieSession 提供了方法设置和获取 Global 值:

  • void setGlobal(String identifier, Object value)
  • Object getGlobal(String identifier)

示例一

为规则 test 添加 enable 属性,并通过全局变量 isEnable 控制规则是否可用。

DRL:

global Boolean isEnable

rule "test"  
    enabled (isEnable)

    when
    then
        System.out.println("it works!");
end  

Java 代码:

// 启用规则
ksession.setGlobal("isEnable", true);  
ksession.fireAllRules();

// 禁用规则
ksession.setGlobal("isEnable", flase);  
ksession.fireAllRules();  

示例二

在规则 RHS 调用 HelloService 实例的 sayHello 方法,并传递参数。

DRL:

global HelloService helloService

rule "test"  
    when
    then
        helloService.sayHello("World");
end  

Java 代码:

ksession.setGlobal("helloService", helloService);  
ksession.fireAllRules();