[jboss-jira] [JBoss JIRA] (DROOLS-1361) Infinite loop when updating a fact inside a shared subnetwork
Alessandro Lazarotti (JIRA)
issues at jboss.org
Tue Nov 15 10:17:00 EST 2016
Alessandro Lazarotti created DROOLS-1361:
--------------------------------------------
Summary: Infinite loop when updating a fact inside a shared subnetwork
Key: DROOLS-1361
URL: https://issues.jboss.org/browse/DROOLS-1361
Project: Drools
Issue Type: Bug
Components: core engine
Reporter: Alessandro Lazarotti
Assignee: Mario Fusco
Priority: Critical
Updating a fact evaluated inside a shared subnetwork may cause an infinite loop as demonstrated by the following unit test:
{code}
@Test(timeout = 10000L)
public void testUpdateOnSharedSubnetwork() {
String drl =
"import " + AtomicInteger.class.getCanonicalName() + ";\n" +
"global java.util.List list;\n" +
"rule R1y when\n" +
" AtomicInteger() \n" +
" Number() from accumulate ( AtomicInteger( ) and $s : String( ) ; count($s) )" +
" eval(false)\n" +
"then\n" +
"end\n" +
"\n" +
"rule R2 when\n" +
" $i : AtomicInteger( get() < 3 )\n" +
"then\n" +
" $i.incrementAndGet();" +
" insert(\"test\" + $i.get());" +
" update($i);" +
"end\n" +
"\n" +
"rule R1x when\n" +
" AtomicInteger() \n" +
" $c : Number() from accumulate ( AtomicInteger( ) and $s : String( ) ; count($s) )\n" +
" eval(true)\n" +
"then\n" +
" list.add($c);" +
"end\n";
KieSession kieSession = new KieHelper().addContent( drl, ResourceType.DRL )
.build().newKieSession();
List<Number> list = new ArrayList<Number>();
kieSession.setGlobal( "list", list );
kieSession.insert( new AtomicInteger( 0 ) );
kieSession.insert( "test" );
kieSession.fireAllRules();
assertEquals(1, list.size());
assertEquals(4, list.get(0).intValue());
}
{code}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jboss-jira
mailing list