[jboss-svn-commits] JBL Code SVN: r18557 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Feb 21 15:18:35 EST 2008
Author: tirelli
Date: 2008-02-21 15:18:35 -0500 (Thu, 21 Feb 2008)
New Revision: 18557
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
Log:
JBRULES-1481: stoping action queue recursion
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-02-21 18:18:52 UTC (rev 18556)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-02-21 20:18:35 UTC (rev 18557)
@@ -29,6 +29,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Queue;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
@@ -70,7 +71,6 @@
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.ruleflow.instance.RuleFlowProcessInstanceFactory;
import org.drools.spi.Activation;
import org.drools.spi.AgendaFilter;
@@ -140,7 +140,9 @@
/** Rule-firing agenda. */
protected DefaultAgenda agenda;
- protected final List actionQueue = new ArrayList();
+ protected final Queue<WorkingMemoryAction> actionQueue = new LinkedList<WorkingMemoryAction>();
+
+ protected boolean evaluatingActionQueue;
protected final ReentrantLock lock = new ReentrantLock();
@@ -1409,17 +1411,15 @@
}
public void executeQueuedActions() {
- while ( !actionQueue.isEmpty() ) {
- final WorkingMemoryAction action = (WorkingMemoryAction) actionQueue.get( 0 );
- actionQueue.remove( 0 );
- action.execute( this );
+ if( ! evaluatingActionQueue ) {
+ evaluatingActionQueue = true;
+ WorkingMemoryAction action = null;
+
+ while ( ( action = actionQueue.poll() ) != null ) {
+ action.execute( this );
+ }
+ evaluatingActionQueue = false;
}
- // for ( final Iterator it = this.actionQueue.iterator(); it.hasNext();
- // ) {
- // final WorkingMemoryAction action = (WorkingMemoryAction) it.next();
- // it.remove();
- // action.execute( this );
- // }
}
public void queueWorkingMemoryAction(final WorkingMemoryAction action) {
More information about the jboss-svn-commits
mailing list