Java Drools 5.1.1意外的累积和收集行为

Java Drools 5.1.1意外的累积和收集行为,java,jboss,rabbitmq,drools,spring-amqp,Java,Jboss,Rabbitmq,Drools,Spring Amqp,我正在使用Spring AMQP从RabbitMQ读取消息。读取消息后,将其反序列化为一个标头(父)对象和多个细节(子)对象。然后将这些事实插入Drools无状态规则会话。最后,将更新的事实插入数据库 我有几个规则可以使用collect或accumulate函数来聚合细节事实。这里有一个例子 rule "Header.TotalDuration" when h : BresHeader() n : Number() from accumulate(

我正在使用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的值不正确,并且在每次传递后都会增加(抓取消息、运行规则、保留事实、重复),我无法找出原因


有人能解释这种行为吗?

也许您有一个
静态
变量,该变量继续将事实从以前的消息传递到新消息