《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

简介: 《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

auto-focus

在agenda-group章节,我们知道想要让AgendaGroup下的规则被执行,需要在代码中显式的设置group获得焦点。而此属性可配合agenda-group使用,代替代码中的显式调用。默认值为false,即不会自动获取焦点。设置为true,则可自动获取焦点。


对于规则的执行的控制,还可以使用org.kie.api.runtime.rule. AgendaFilter来实现。用户可以实现该接口的accept方法,通过规则当中的属性值来控制是否执行规则。

方法体如下:


boolean accept(Match match);

1

在该方法当中提供了一个Match参数,通过该参数可以获得当前正在执行的规则对象和属性。该方法要返回一个布尔值,返回true就执行规则,否则不执行。


auto-focus使用示例代码

规则代码:


package com.rules
 rule "test agenda-group"
    agenda-group "abc"
    auto-focus true
    when
    then
        System.out.println("规则test agenda-group 被触发");
    end

执行规则代码:

KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kieContainer.newKieSession("ksession-rule");
kSession.fireAllRules();
kSession.dispose();

执行结果:

规则test agenda-group 被触发• 1

这里,我们没有在代码中显式的让test agenda-group获取焦点,但规则同样被执行了,说明属性配置已生效。

AgendaFilter代码实例

规则文件代码:

package com.rules
 rule "test-agenda-group"
    when
    then
        System.out.println("规则test-agenda-group 被触发");
    end
rule other
    when
    then
        System.out.println("规则other被触发");
    end

实现的MyAgendaFilter代码:

package com.secbro.drools.filter;
import org.kie.api.runtime.rule.AgendaFilter;
import org.kie.api.runtime.rule.Match;
/**
 * Created by zhuzs on 2017/7/19.
 */
public class MyAgendaFilter implements AgendaFilter{
    private String ruleName;
    public MyAgendaFilter(String ruleName) {
        this.ruleName = ruleName;
    }
    @Override
    public boolean accept(Match match) {
        return match.getRule().getName().equals(ruleName) ? true : false;
}
// 省略getter/setter方法
}

测试方法:

KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kSession = kieContainer.newKieSession("ksession-rule");
AgendaFilter filter = new MyAgendaFilter("test-agenda-group");
kSession.fireAllRules(filter);
kSession.dispose();

执行结果:

规则test-agenda-group 被触发• 1

在执行规则的Filter中传入的规则名称为test-agenda-group,此规则被执行。而对照组的规则other,却未被执行。

目录
相关文章
|
Java 编译器 API
《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
237 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 实例
239 0
《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
|
Java 应用服务中间件 API
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
243 0
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
|
Java 编译器
《Drools7.0.0.Final规则引擎教程》第4章 Function函数
《Drools7.0.0.Final规则引擎教程》第4章 Function函数
244 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
339 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
180 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
195 0
《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
170 0
《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
《Drools7.0.0.Final规则引擎教程》番外篇之ruleflow-group合并
249 0
《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象
《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象
276 0