ConcurrentModificationException error when retracting fact in a for loop

Solution Unverified - Updated -

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.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content