2013-03-08 23 views
1

我使用Spring AMQP從RabbitMQ讀取消息。讀取消息後,將其反序列化爲一個頭(父)對象和多個詳細(子)對象。然後將這些事實插入到Drools無狀態規則會話中。最後,更新的事實被插入到數據庫中。Drools 5.1.1意外收集和收集行爲

我有幾條規則可以使用collect或accumulate函數來聚合細節事實。這是一個例子。

rule "Header.TotalDuration" 
when 
    h : BresHeader() 
    n : Number() 
      from accumulate(d : BresDetail(willSendToInvoice==true, 
              uniqueConfID == h.uniqueConfID), 
          sum(d.Duration)) 
then 
    h.TotalDuration = new Integer(n.longValue()); 
    System.out.println("[TotalDuration] rule ran"); 
end 

如果我在jUnit中運行一次(在一條消息中讀取),TotalDuration計算正確。如果我在tomcat中運行它(不斷讀取消息),TotalDuration的值不正確,並且在每次傳遞(消息被抓取,規則運行,事實持續,重複)後增加,我無法弄清楚原因。

任何人都可以闡明這種行爲嗎?

回答

0

也許你有一個static變量,它繼續將以前消息中的事實傳遞給新消息。