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

我有一些规则,这些规则将使用collect或累加函数汇总详细事实。这是一个例子。

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的值不正确,并且每次通过后都会增加(捕获消息,运行规则,事实仍然存在,重复),但我不知道为什么。

谁能阐明这种行为?

最佳答案

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

关于java - Drools 5.1.1意外的累积和收集行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15304083/

10-09 03:46