是否可以通过规则名称在drool文件中触发规则? 我的要求是,我的规则文件将包含所有规则(S)的列表。但我有一个单独的配置,其中包含要触发的规则名称列表(A)。注(A)是(S)的子集。在运行时,我想只触发(S)中带有名称(A)的规则。
感谢。
答案 0 :(得分:7)
您可以使用AgendaFilters。
以下是您设置的方式:
StatelessSession session = ruleBase.newStatelessSesssion();
session.setAgendaFilter( new RuleNameMatches("<regexp to your rule name here>") );
这将只允许一个具有指定名称的规则触发。
在您的情况下,您需要编写自己的AgendaFilter:
public class CustomAgendaFilter extends AgendaFilter{
private final Set<String> ruleNamesThatAreAllowedToFire;
public CustomAgendaFilter(Set<String> ruleNamesThatAreAllowedToFire){
this.ruleNamesThatAreAllowedToFire=ruleNamesThatAreAllowedToFire;
}
boolean accept(Activation activation){
return ruleNamesThatAreAllowedToFire.contains(activation.getRule().getName());
}
}