Drools:删除规则时,不会缩回使用accumulate逻辑插入的对象

时间:2018-06-15 20:22:50

标签: drools jboss-tools accumulate

发现这个问题,不知道它是一个错误还是一个预期的行为?

考虑在文件Test.drl中注册的两个简单规则,第一个不使用accumulate,第二个执行:

declare MyInt
    val : Integer @key
end

declare MySum
    val : Integer @key
end

rule "Simple rule"
    when
        $i : Integer(intValue > 5)
    then
        insertLogical(new MyInt($i))        
end

rule "Simple rule 2"
    when
        accumulate($i : Integer(intValue > 5), $s : sum($i))
    then
        insertLogical(new MySum($s))        
end

我使用KieFileSystem创建KeyContainer,我在其中加载Test.drl。我插入3个整数:3,7,9,调用FireAllRules并打印工作内存中的所有对象。结果如预期:

MySum( val=16 )
7
3
9
MyInt( val=9 )
MyInt( val=7 )

然后我从规则文件创建另一个不包括Test.drl的KieModule,将KieContainer更新为新的KieModule并调用FireAllRules。我希望MySum和MyInt类型的对象可以从工作内存中收回,因为触发这些对象的逻辑插入的规则不再存在。这对于MyInt来说是真实的,但对于MySum则不然,工作记忆是:

MySum( val=16 )
7
3
9

那么,为什么MySum永远不会缩回?

0 个答案:

没有答案