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