我們前面有說道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 + ".*"));