天天看點

規則引擎Drools使用 第六篇 Drools 指定規則運作

我們前面有說道drools指定規則運作,具體使用是在kieSession.fireAllRules()時,通過指定方法來實作運作會指定的規則,下面具體開始講解如何指定規則。

int fireAllRules(org.kie.api.runtime.rule.AgendaFilter agendaFilter);
           
public interface AgendaFilter {
    boolean accept(org.kie.api.runtime.rule.Match match);
}
           

//運作規則名稱以指定字元串結束的規則

kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter(""));

//運作規則名稱與指定字元串相等的規則

kieSession.fireAllRules(new RuleNameEqualsAgendaFilter(""));

//運作規則名稱符合正規表達式的規則

kieSession.fireAllRules(new RuleNameMatchesAgendaFilter(""));

//運作規則名稱以指定字元串開頭的規則

kieSession.fireAllRules(new RuleNameStartsWithAgendaFilter(""));

我們也可以自定義過濾規則,隻需要實作AgendaFilter 接口

public class MyRuleFilter implements AgendaFilter {

    private List<String> names;

    public MyRuleFilter(List<String> names) {
        this.names = names;
    }

    @Override
    public boolean accept(Match match) {
        return names.contains(match.getRule().getName());
    }
}
           

 使用

kieSession.fireAllRules(new MyRuleFilter(null));
           

運作規則名稱包括指定字元串的規則

public RuleNameMatchesAgendaFilter(java.lang.String regexp) { /* compiled code */ }
           
int count = kieSession.fireAllRules(new RuleNameMatchesAgendaFilter(".*" + fileType + ".*"));
           

繼續閱讀