侧边栏壁纸
  • 累计撰写 106 篇文章
  • 累计创建 3 个标签
  • 累计收到 19 条评论
标签搜索

目 录CONTENT

文章目录

Drools入门之指定规则名调用

卑微幻想家
2022-07-07 / 0 评论 / 0 点赞 / 62 阅读 / 1,881 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

RuleNameEqualsAgendaFilter

rule "name1"
    when
    then
        System.out.println("调用规则:"+drools.getRule().getName());
end

rule "name2"
    when
    then
        System.out.println("调用规则:"+drools.getRule().getName());
end
    @Test
    public void testRuleNameInvoking() {
        KieServices kieService = KieServices.Factory.get();
        KieContainer kieContainer = kieService.getKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("testInvoking");

//        kieSession.fireAllRules();
        kieSession.fireAllRules(new RuleNameEqualsAgendaFilter("name1"));
        kieSession.dispose();
    }
}

执行日志

调用规则:name1

RuleNameEqualsAgendaFilter:比较规则名称是否如传入的一致

RuleNameEndsWithAgendaFilter

根据指定的规则名称后缀进行匹配

RuleNameStartsWithAgendaFilter

根据指定的规则名称前缀过滤

RuleNameMatchesAgendaFilter

根据指定的规则名称正则匹配过滤

自定义执行过滤器

AgendaFilter是一个接口,需要写一个类并实现AgendaFilter接口。创建CustomAgendaFilter.java文件,目录为comTwo/ruleName,其内容为:

public class CustomAgendaFilter implements AgendaFilter {

    private final Set<String> ruleNamesThatAreAllowedToFire; //传入的rule

    public CustomAgendaFilter(Set<String> ruleNamesThatAreAllowedToFire) {
        this.ruleNamesThatAreAllowedToFire = ruleNamesThatAreAllowedToFire;
    }


    @Override
    public boolean accept(Match match) {
        return ruleNamesThatAreAllowedToFire.contains(match.getRule().getName());
    }
}
    @Test
    public void testCustomRuleNameInvoking() {
        KieServices kieService = KieServices.Factory.get();
        KieContainer kieContainer = kieService.getKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("testInvoking");

        Set<String> set = new HashSet<>();
        set.add("name1");
        set.add("test1");
        kieSession.fireAllRules(new CustomAgendaFilter(set));
        kieSession.dispose();
    }
}

执行日志

调用规则:name1
调用规则:test1

对指定规则名调用方法做以下总结。

  1. “int fireAllRules()”执行所有满足条件的规则。
  2. “int fireAllRules(int max)”执行规则的最大数量,简单地说,即执行多少条规则。
  3. “int fireAllRules(AgendaFilter agendaFilter)”指定规则名的方式。
  4. “int fireAllRules(AgendaFilter agendaFilter,int max);”指定规则名,并设置执行规则的最大数量,在精确匹配中是不适用的。
0

评论区