在drools 5.x中执行多个规则

时间:2011-09-21 06:26:14

标签: drools

我对流口水有点新意。我的drl文件中有2个规则,即DateYYYYMMDD和TotalChargesAndTax。我使用以下语法从我的main方法执行2规则。

    Command<?> syntacticValidation = new FireAllRulesCommand(
                    new RuleNameEqualsAgendaFilter("DateYYYYMMDD"));                
            Command<?> semanticValidation = new FireAllRulesCommand(
                new RuleNameEqualsAgendaFilter("TotalChargesAndTax"));

            List<Command> commands = new ArrayList<Command>();
            commands.add(semanticValidation);
            commands.add(syntacticValidation);

            session.execute(CommandFactory
                    .newBatchExecution(commands));

但是当我运行我的应用程序时,只执行TotalChargesAndTax规则并跳过DateYYYYMMDD规则。如果我在ArayList中交换命令对象的位置,如下所示,

    commands.add(syntacticValidation);
    commands.add(semanticValidation);

然后执行DateYYYYMMDD规则并跳过TotalChargesAndTax规则。有没有办法执行规则并执行两个规则的后果?截至目前,只执行一个结果,具体取决于数组列表中的哪个命令。

1 个答案:

答案 0 :(得分:1)

当您编写规则时,您无法说明必须触发哪条规则。规则引擎将根据您在知识会话中插入的事实/ pojos选择规则。我建议您不要使用议程过滤器来尝试强制执行规则。如果您插入的对象与规则条件侧(WHEN)匹配,则会自动执行多个规则。 如果您想分享您的规则,我们可以为您提供帮助。 干杯