Drools 5.1.1意外累积和收集行为

时间:2013-03-08 22:01:45

标签: java jboss rabbitmq drools spring-amqp

我正在使用Spring AMQP从RabbitMQ中读取消息。在读取消息之后,它被反序列化为一个头(父)对象和多个细节(子)对象。然后将这些事实插入Drools无状态规则会话中。最后,将更新的事实插入到数据库中。

我有几条规则可以使用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的值不正确,每次传递后都会增加(消息被抓取,规则运行,事实持续存在,重复),我无法弄清楚原因。

有人能说清楚这种行为吗?

1 个答案:

答案 0 :(得分:0)

也许你有一个static变量继续将以前的消息中的事实传递给新消息。