[jboss-svn-commits] JBL Code SVN: r10956 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 12 22:23:19 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-04-12 22:23:19 -0400 (Thu, 12 Apr 2007)
New Revision: 10956
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/DefaultAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleFlowGroup.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java
Log:
JBRULES-788 lock-on-activate rule attribute
-lock-on-active now works with ruleflowgroup, including modifies.
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 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -122,7 +122,7 @@
/** Rule-firing agenda. */
protected DefaultAgenda agenda;
- protected final List factQueue = new ArrayList();
+ protected final List actionQueue = new ArrayList();
protected final ReentrantLock lock = new ReentrantLock();
@@ -352,8 +352,8 @@
// nested inside, avoiding concurrent-modification
// exceptions, depending on code paths of the actions.
- if ( !this.factQueue.isEmpty() ) {
- propagateQueuedActions();
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
}
boolean noneFired = true;
@@ -364,6 +364,9 @@
while ( this.agenda.fireNextItem( agendaFilter ) ) {
noneFired = false;
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
+ }
}
} finally {
this.firing = false;
@@ -382,8 +385,8 @@
*/
private void doOtherwise(final AgendaFilter agendaFilter) {
final FactHandle handle = this.assertObject( new Otherwise() );
- if ( !this.factQueue.isEmpty() ) {
- propagateQueuedActions();
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
}
while ( this.agenda.fireNextItem( agendaFilter ) ) {
@@ -734,8 +737,8 @@
handle,
object );
- if ( !this.factQueue.isEmpty() ) {
- propagateQueuedActions();
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
}
} finally {
this.lock.unlock();
@@ -893,8 +896,8 @@
this.handleFactory.destroyFactHandle( handle );
- if ( !this.factQueue.isEmpty() ) {
- propagateQueuedActions();
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
}
} finally {
this.lock.unlock();
@@ -990,25 +993,25 @@
propagationContext.clearRetractedTuples();
- if ( !this.factQueue.isEmpty() ) {
- propagateQueuedActions();
+ if ( !this.actionQueue.isEmpty() ) {
+ executeQueuedActions();
}
} finally {
this.lock.unlock();
}
}
- public void propagateQueuedActions() {
- for ( final Iterator it = this.factQueue.iterator(); it.hasNext(); ) {
+ public void executeQueuedActions() {
+ for ( final Iterator it = this.actionQueue.iterator(); it.hasNext(); ) {
final WorkingMemoryAction action = (WorkingMemoryAction) it.next();
it.remove();
- action.propagate();
+ action.execute();
}
}
public void queueWorkingMemoryAction(final WorkingMemoryAction action) {
- this.factQueue.add( action );
+ this.actionQueue.add( action );
}
public void queueRetractAction(final InternalFactHandle factHandle,
@@ -1109,7 +1112,7 @@
}
public interface WorkingMemoryAction {
- public void propagate();
+ public void execute();
}
public class WorkingMemoryRetractAction
@@ -1138,7 +1141,7 @@
this.activationOrigin = activationOrigin;
}
- public void propagate() {
+ public void execute() {
retractObject( this.factHandle,
this.removeLogical,
this.updateEqualsMap,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -67,7 +67,7 @@
private static final long serialVersionUID = 320L;
/** Working memory of this Agenda. */
- private final WorkingMemory workingMemory;
+ private final InternalWorkingMemory workingMemory;
private org.drools.util.LinkedList scheduledActivations;
@@ -102,7 +102,7 @@
* @param conflictResolver
* The conflict resolver.
*/
- public DefaultAgenda(final WorkingMemory workingMemory) {
+ public DefaultAgenda(final InternalWorkingMemory workingMemory) {
this.workingMemory = workingMemory;
this.knowledgeHelper = new DefaultKnowledgeHelper( this.workingMemory );
this.agendaGroups = new HashMap();
@@ -392,7 +392,7 @@
if ( item.getRuleFlowGroupNode() != null ) {
final InternalRuleFlowGroup ruleFlowGroup = item.getRuleFlowGroupNode().getRuleFlowGroup();
- ruleFlowGroup.removeActivation( item );
+ ruleFlowGroup.removeActivation( item, this.workingMemory );
}
eventsupport.getAgendaEventSupport().fireActivationCancelled( item,
@@ -428,7 +428,7 @@
if ( activation.getRuleFlowGroupNode() != null ) {
final InternalRuleFlowGroup ruleFlowGroup = activation.getRuleFlowGroupNode().getRuleFlowGroup();
- ruleFlowGroup.removeActivation( activation );
+ ruleFlowGroup.removeActivation( activation, this.workingMemory );
}
eventsupport.getAgendaEventSupport().fireActivationCancelled( activation,
@@ -504,7 +504,7 @@
if ( activation.getRuleFlowGroupNode() != null ) {
final InternalRuleFlowGroup ruleFlowGroup = activation.getRuleFlowGroupNode().getRuleFlowGroup();
- ruleFlowGroup.removeActivation( activation );
+ ruleFlowGroup.removeActivation( activation, this.workingMemory );
}
eventsupport.getAgendaEventSupport().fireAfterActivationFired( activation );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleFlowGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleFlowGroup.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleFlowGroup.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -9,7 +9,7 @@
void addActivation(Activation activation);
- void removeActivation(Activation activation);
+ void removeActivation(final Activation activation, InternalWorkingMemory workingMemory);
/**
* Activates or deactivates this <code>RuleFlowGroup</code>.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -2,6 +2,7 @@
import org.drools.FactException;
import org.drools.WorkingMemory;
+import org.drools.common.AbstractWorkingMemory.WorkingMemoryAction;
import org.drools.event.AgendaEventSupport;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
@@ -26,7 +27,9 @@
public TruthMaintenanceSystem getTruthMaintenanceSystem();
- public void propagateQueuedActions();
+ public void executeQueuedActions();
+
+ public void queueWorkingMemoryAction(final WorkingMemoryAction action);
public FactHandleFactory getFactHandleFactory();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -16,9 +16,11 @@
* limitations under the License.
*/
+import org.drools.common.AbstractWorkingMemory.WorkingMemoryAction;
import org.drools.ruleflow.instance.IRuleFlowNodeInstance;
import org.drools.ruleflow.instance.impl.RuleFlowSequenceNodeInstance;
import org.drools.spi.Activation;
+import org.drools.spi.RuleFlowGroup;
import org.drools.util.LinkedList;
import org.drools.util.LinkedList.LinkedListIterator;
@@ -127,18 +129,15 @@
}
}
- public void removeActivation(final Activation activation) {
+ public void removeActivation(final Activation activation, InternalWorkingMemory workingMemory) {
final RuleFlowGroupNode node = activation.getRuleFlowGroupNode();
this.list.remove( node );
activation.setActivationGroupNode( null );
if ( this.autoDeactivate ) {
if ( this.list.isEmpty() ) {
- this.active = false;
- // only trigger next node if this RuleFlowGroup was
- // triggered from inside a process instance
- if ( getProcessInstance() != null ) {
- triggerCompleted();
- }
+ // deactivate callback
+ WorkingMemoryAction action = new DeactivateCallback( this );
+ workingMemory.queueWorkingMemoryAction( action );
}
}
}
@@ -174,4 +173,24 @@
public void trigger(final IRuleFlowNodeInstance parent) {
setActive( true );
}
+
+ public class DeactivateCallback implements WorkingMemoryAction {
+ private InternalRuleFlowGroup ruleFlowGroup;
+
+ public DeactivateCallback(InternalRuleFlowGroup ruleFlowGroup) {
+ this.ruleFlowGroup = ruleFlowGroup;
+ }
+
+ public void execute() {
+ if ( this.ruleFlowGroup.isEmpty() ) {
+ this.ruleFlowGroup.setActive( false );
+ // only trigger next node if this RuleFlowGroup was
+ // triggered from inside a process instance
+ if ( getProcessInstance() != null ) {
+ triggerCompleted();
+ }
+ }
+ }
+
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -148,7 +148,7 @@
this.activationOrigin = activationOrigin;
}
- public void propagate() {
+ public void execute() {
final PropagationContext context = new PropagationContextImpl( ReteooWorkingMemory.this.propagationIdCounter++,
PropagationContext.ASSERTION,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -309,7 +309,7 @@
if ( activation.getRuleFlowGroupNode() != null ) {
final InternalRuleFlowGroup ruleFlowGroup = activation.getRuleFlowGroupNode().getRuleFlowGroup();
- ruleFlowGroup.removeActivation( activation );
+ ruleFlowGroup.removeActivation( activation, workingMemory );
}
workingMemory.getAgendaEventSupport().fireActivationCancelled( activation,
@@ -377,7 +377,7 @@
this.rule );
}
- workingMemory.propagateQueuedActions();
+ workingMemory.executeQueuedActions();
}
this.tupleSource.remove( this,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -1261,6 +1261,7 @@
ruleFlowGroup0.size() );
assertEquals( 0,
agenda.agendaSize() );
+ workingMemory.executeQueuedActions();
assertFalse( ruleFlowGroup0.isActive() );
// A new activation should now be added to the RuleFlowGroup but not to the agenda
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java 2007-04-13 02:02:52 UTC (rev 10955)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java 2007-04-13 02:23:19 UTC (rev 10956)
@@ -96,7 +96,7 @@
context1,
workingMemory );
- workingMemory.propagateQueuedActions();
+ workingMemory.executeQueuedActions();
assertLength( 1,
sink.getRetracted() );
@@ -124,7 +124,7 @@
context1,
workingMemory );
- workingMemory.propagateQueuedActions();
+ workingMemory.executeQueuedActions();
assertLength( 2,
sink.getRetracted() );
@@ -642,7 +642,7 @@
context2,
workingMemory );
- workingMemory.propagateQueuedActions();
+ workingMemory.executeQueuedActions();
// because this logical fact has two relationships it shouldn't retract yet
assertLength( 0,
@@ -657,7 +657,7 @@
context1,
workingMemory );
- workingMemory.propagateQueuedActions();
+ workingMemory.executeQueuedActions();
// Should cause the logical fact to be retracted
assertLength( 1,
More information about the jboss-svn-commits
mailing list