发现这个问题,不知道它是一个错误还是一个预期的行为?
考虑在文件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永远不会缩回?