【问题标题】:Drools 5.1.1 unexpected Accumulate and Collect behaviorDrools 5.1.1 意外的 Accumulate 和 Collect 行为
【发布时间】:2013-03-08 22:01:45
【问题描述】:

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

我有几个规则可以使用收集或累积函数来聚合细节事实。这是一个例子。

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

任何人都可以阐明这种行为吗?

【问题讨论】:

    标签: java jboss rabbitmq drools spring-amqp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2017-03-27
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多