AgendaFilter 接口
int fireAllRules(AgendaFilter agendaFilter);
在提交规则执行,如果不传参数,那么默认是将内存中的规则全部执行一遍。此外,也允许我们传递 AgendaFilter 参数。该参数是一个过滤器接口。允许使用者自行实现,Drools 也内置了几种过滤器。
/**
* Fire all Matches on the Agenda
*
* @param agendaFilter
* filters the Matches that may fire
* @return
* returns the number of rules fired
*/
int fireAllRules(AgendaFilter agendaFilter);
AgendaFilter 接口定义:
public interface AgendaFilter {
/**
* Determine if a given match should be fired.
*
* @param match
* The match that is requested to be fired
* @return
* boolean value of "true" accepts the match for firing.
*/
boolean accept(Match match);
}
RuleNameEndsWithAgendaFilter
指定以XXX结尾的规则,根据指定的规则名称后缀过滤器激活。RuleNameEndsWithAgendaFilter 实现了 AgendaFilter 接口, accept 函数获取了规则的名称并且进行后缀比较。
public boolean accept(Match activation) {
if (activation.getRule().getName().endsWith(this.suffix)) {
return this.accept;
} else {
return !this.accept;
}
}
int i =ksession.fireAllRules(new RuleNameEndsWithAgendaFilter("xxx"));
RuleNameEqualsAgendaFilter
指定名称为XXX的规则,根据指定的规则名称过滤器激活。RuleNameEqualsAgendaFilter 实现了 AgendaFilter 接口, accept 函数获取了规则的名称并且进行全等比较。
public boolean accept(Match activation) {
if (activation.getRule().getName().equals(this.name)) {
return this.accept;
} else {
return !this.accept;
}
}
int i =ksession.fireAllRules(new RuleNameEqualsAgendaFilter("xxx"));
RuleNameMatchesAgendaFilter
指定符合正则的规则,根据满足正则的过滤器激活。RuleNameMatchesAgendaFilter 实现了 AgendaFilter 接口, accept 函数获取了规则的名称并且进行正则匹配。
public boolean accept(Match activation) {
Matcher matcher = this.getPattern().matcher(activation.getRule().getName());
return !this.accept ^ matcher.matches();
}
int i =ksession.fireAllRules(new RuleNameMatchesAgendaFilter(\\w{0,5}[\\u4e00-\\u9fa5]{0,10}\\d));
RuleNameStartsWithAgendaFilter
指定xxx名称前缀的规则,根据指定的规则名称前缀过滤器激活。 RuleNameStartsWithAgendaFilter 实现了 AgendaFilter 接口, accept 函数获取了规则的名称并且进行前缀比较。
public boolean accept(Match activation) {
if (activation.getRule().getName().startsWith(this.prefix)) {
return this.accept;
} else {
return !this.accept;
}
}
int i =ksession.fireAllRules(new RuleNameStartsWithAgendaFilter("xxx"));
自定义 AgendaFilter
RulePackageNameStartsWithAgendaFilter
指定xxx包名称前缀的规则,根据指定的包名中的规则过滤器激活。 RulePackageNameStartsWithAgendaFilter 实现了 AgendaFilter 接口, accept 函数获取了规则的所属包名并且进行前缀比较。
public class RulePackageNameStartsWithAgendaFilter implements AgendaFilter {
private String packageNameStartsWith;
public RulePackageNameStartsWithAgendaFilter() {
}
public RulePackageNameStartsWithAgendaFilter(String packageNameStartsWith) {
}
@Override
public boolean accept(Match match) {
Rule rule = match.getRule();
String packageName = rule.getPackageName();
return packageName.startsWith(packageNameStartsWith);
}
}

Drools7 提供 AgendaFilter 接口,允许自定义规则执行。内置了 RuleNameEndsWithAgendaFilter、RuleNameEqualsAgendaFilter、RuleNameMatchesAgendaFilter 和 RuleNameStartsWithAgendaFilter 等过滤器,可以根据规则名称的后缀、全名、正则表达式和前缀来选择执行的规则。此外,还可以通过实现 AgendaFilter 接口创建自定义过滤器,如 RulePackageNameStartsWithAgendaFilter,根据规则包名前缀进行过滤。

4144

被折叠的 条评论
为什么被折叠?



