2013-03-08 16 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变量,它继续将以前消息中的事实传递给新消息。