ConcurrentModificationException error when retracting fact in a for loop
Issue
when retracting fact in a for loop like below:
package com.sample
import java.util.List;
rule "Test"
when
$list : List(size == 3) from collect(String())
then
System.out.println("Fired rule: Test");
for (Object fact : $list) {
System.out.println("Retracting fact");
retract(fact);
}
end
If insert three strings, fire rule get ConcurrentModificationException.
Caused by: java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.sample.Rule_Test_f9c1ba5d160c4560b80b951b05b30ba5.defaultConsequence(Rule_Test_f9c1ba5d160c4560b80b951b05b30ba5.java:8)
at com.sample.Rule_Test_f9c1ba5d160c4560b80b951b05b30ba5DefaultConsequenceInvoker.evaluate(Unknown Source)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1204)
... 6 more
Environment
- BRMS 5.3.1
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.