2011-09-21 57 views
0

我对流口水有点新。我在我的drl文件中有两条规则,即DateYYYYMMDD和TotalChargesAndTax。我使用以下语法从我的主要方法执行2个规则。在流口水中执行多个规则5.x

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

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

+0

我刚碰巧看到你今天的回复。当我发布上述问题时,这是我与Drools的第一天。你所说的正是我几天后意识到的。为了有效地定义我的事实模型,我已经走了很长的路,所以我很容易编写规则。虽然我有一个关于从Windows Shell编译.drl文件的新问题。你能帮助我吗? :) ..这里是问题的链接:-http://stackoverflow.com/questions/7992569/how-to-compile-a-drl-file-through-an-ant-build-script – CKing