2011-09-21 21 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