[jboss-svn-commits] JBL Code SVN: r12882 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 27 01:06:07 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-06-27 01:06:06 -0400 (Wed, 27 Jun 2007)
New Revision: 12882

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.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/QuadroupleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AddRemoveTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectTypeNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/PropertyChangeListenerTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java
Log:
JBRULES-948 urn off node memories and latch lianode

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -71,12 +71,13 @@
     private ChainedProperties   chainedProperties;
 
     private boolean             immutable;
+    
+    private boolean             sequential;
 
     private boolean             maintainTms;
     private boolean             removeIdentities;
     private boolean             shareAlphaNodes;
     private boolean             shareBetaNodes;
-    private boolean             objectTypeMemory;
     private boolean             alphaMemory;
     private int                 alphaNodeHashingThreshold;
     private int                 compositeKeyDepth;
@@ -107,6 +108,9 @@
         if ( properties != null ) {
             this.chainedProperties.addProperties( properties );
         }
+        
+        setSequential( Boolean.valueOf( this.chainedProperties.getProperty( "drools.sequential",
+                        "false" ) ).booleanValue() );        
 
         setMaintainTms( Boolean.valueOf( this.chainedProperties.getProperty( "drools.maintainTms",
                                                                              "true" ) ).booleanValue() );
@@ -114,9 +118,6 @@
         setRemoveIdentities( Boolean.valueOf( this.chainedProperties.getProperty( "drools.removeIdentities",
                                                                                   "false" ) ).booleanValue() );
 
-        setObjectTypeMemory( Boolean.valueOf( this.chainedProperties.getProperty( "drools.objectTypeMemory",
-                                                                                  "true" ) ).booleanValue() );
-
         setAlphaMemory( Boolean.valueOf( this.chainedProperties.getProperty( "drools.alphaMemory",
                                                                              "false" ) ).booleanValue() );
 
@@ -174,8 +175,16 @@
             throw new UnsupportedOperationException( "Can't set a property after configuration becomes immutable" );
         }
     }
+    
+    public void setSequential(boolean sequential) {
+        this.sequential = sequential;
+    }
+    
+    public boolean isSequential() {
+        return this.sequential;
+    }
 
-    public boolean getMaintainTms() {
+    public boolean isMaintainTms() {
         return this.maintainTms;
     }
 
@@ -193,15 +202,6 @@
         this.removeIdentities = removeIdentities;
     }
 
-    public boolean isObjectTypeMemory() {
-        return this.objectTypeMemory;
-    }
-
-    public void setObjectTypeMemory(final boolean objectTypeMemory) {
-        checkCanChange(); // throws an exception if a change isn't possible;
-        this.objectTypeMemory = objectTypeMemory;
-    }
-
     public boolean isAlphaMemory() {
         return this.alphaMemory;
     }

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-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -48,6 +48,7 @@
 import org.drools.event.RuleFlowEventSupport;
 import org.drools.event.WorkingMemoryEventListener;
 import org.drools.event.WorkingMemoryEventSupport;
+import org.drools.reteoo.LIANodePropagation;
 import org.drools.rule.Rule;
 import org.drools.ruleflow.common.core.Process;
 import org.drools.ruleflow.common.instance.ProcessInstance;
@@ -137,6 +138,10 @@
     protected long                            propagationIdCounter;
 
     private final boolean                     maintainTms;
+    
+    private final boolean                     sequential;
+    
+    private List                        liaPropagations                                = Collections.EMPTY_LIST;
 
     /** Flag to determine if a rule is currently being fired. */
     protected boolean                         firing;
@@ -157,7 +162,8 @@
         this.id = id;
         this.ruleBase = ruleBase;
         this.handleFactory = handleFactory;
-        this.maintainTms = this.ruleBase.getConfiguration().getMaintainTms();
+        this.maintainTms = this.ruleBase.getConfiguration().isMaintainTms();
+        this.sequential = this.ruleBase.getConfiguration().isSequential();
 
         if ( this.maintainTms ) {
             this.tms = new TruthMaintenanceSystem( this );
@@ -185,11 +191,22 @@
 
     // ------------------------------------------------------------
     // Instance methods
-    // ------------------------------------------------------------
-
+    // ------------------------------------------------------------    
+    
     void setRuleBase(final InternalRuleBase ruleBase) {
         this.ruleBase = ruleBase;
     }
+    
+    public boolean isSequential() {
+        return this.sequential;
+    }
+    
+    public void addLIANodePropagation(LIANodePropagation liaNodePropagation) {
+        if ( this.liaPropagations == Collections.EMPTY_LIST ) {
+            this.liaPropagations = new ArrayList();
+        }
+        this.liaPropagations.add( liaNodePropagation );
+    }
 
     public void addEventListener(final WorkingMemoryEventListener listener) {
         try {
@@ -388,8 +405,14 @@
         // If we're already firing a rule, then it'll pick up
         // the firing for any other assertObject(..) that get
         // nested inside, avoiding concurrent-modification
-        // exceptions, depending on code paths of the actions.
+        // exceptions, depending on code paths of the actions.                
 
+        if ( isSequential() ) {
+            for ( Iterator it = this.liaPropagations.iterator(); it.hasNext(); ) {
+                (( LIANodePropagation ) it.next()).doPropagation( this );
+            }
+        }
+        
         if ( !this.actionQueue.isEmpty() ) {
             executeQueuedActions();
         }
@@ -626,7 +649,15 @@
             // you cannot assert a null object
             return null;
         }
+                
         InternalFactHandle handle = null;
+        
+        if ( isSequential() ) {
+            handle = this.handleFactory.newFactHandle( object );
+            insert(handle, object, rule, activation);
+            return handle;
+        }
+        
         try {
             this.lock.lock();
             // check if the object already exists in the WM
@@ -761,31 +792,37 @@
             if ( dynamic ) {
                 addPropertyChangeListener( object );
             }
+            
+            insert(handle, object, rule, activation);
 
-            final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
-                                                                                      PropagationContext.ASSERTION,
-                                                                                      rule,
-                                                                                      activation,
-                                                                                      this.agenda.getActiveActivations(),
-                                                                                      this.agenda.getDormantActivations() );
 
-            doInsert( handle,
-                      object,
-                      propagationContext );
-
-            this.workingMemoryEventSupport.fireObjectInserted( propagationContext,
-                                                               handle,
-                                                               object );
-
-            if ( !this.actionQueue.isEmpty() ) {
-                executeQueuedActions();
-            }
         } finally {
             this.lock.unlock();
         }
         return handle;
     }
+    
+    private void insert( InternalFactHandle handle, Object object, Rule rule, Activation activation) {
+        final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
+                                                                                  PropagationContext.ASSERTION,
+                                                                                  rule,
+                                                                                  activation,
+                                                                                  this.agenda.getActiveActivations(),
+                                                                                  this.agenda.getDormantActivations() );
 
+        doInsert( handle,
+                  object,
+                  propagationContext );
+
+        this.workingMemoryEventSupport.fireObjectInserted( propagationContext,
+                                                           handle,
+                                                           object );
+
+        if ( !this.actionQueue.isEmpty() ) {
+            executeQueuedActions();
+        }        
+    }
+
     protected void addPropertyChangeListener(final Object object) {
         try {
             final Method method = object.getClass().getMethod( "addPropertyChangeListener",

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -2,6 +2,7 @@
 
 import java.io.Serializable;
 
+import org.drools.RuleBaseConfiguration;
 import org.drools.reteoo.BetaMemory;
 import org.drools.reteoo.ReteTuple;
 import org.drools.util.LinkedList;
@@ -26,5 +27,5 @@
 
     public boolean isEmpty();
 
-    public BetaMemory createBetaMemory();
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config);
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -191,7 +191,7 @@
         return false;
     }
 
-    public BetaMemory createBetaMemory() {
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
         BetaMemory memory;
         if ( this.indexed > 0 ) {
             LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
@@ -221,10 +221,10 @@
             } else {
                 factHandleMemory = new FactHashTable();
             }
-            memory = new BetaMemory( tupleMemory,
+            memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory );
         } else {
-            memory = new BetaMemory( new TupleHashTable(),
+            memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                      new FactHashTable() );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -159,7 +159,7 @@
         return false;
     }
 
-    public BetaMemory createBetaMemory() {
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
         BetaMemory memory;
 
         final List list = new ArrayList( 2 );
@@ -196,10 +196,10 @@
             } else {
                 factHandleMemory = new FactHashTable();
             }
-            memory = new BetaMemory( tupleMemory,
+            memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory );
         } else {
-            memory = new BetaMemory( new TupleHashTable(),
+            memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                      new FactHashTable() );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -18,6 +18,7 @@
 
 import java.io.Serializable;
 
+import org.drools.RuleBaseConfiguration;
 import org.drools.reteoo.BetaMemory;
 import org.drools.reteoo.ReteTuple;
 import org.drools.util.FactHashTable;
@@ -79,8 +80,8 @@
         return true;
     }
 
-    public BetaMemory createBetaMemory() {
-        final BetaMemory memory = new BetaMemory( new TupleHashTable(),
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
+        final BetaMemory memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                                   new FactHashTable() );
 
         return memory;

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-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -3,6 +3,7 @@
 import org.drools.FactException;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
+import org.drools.reteoo.LIANodePropagation;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
 import org.drools.spi.FactHandleFactory;
@@ -42,4 +43,8 @@
                        final Activation activation) throws FactException;
 
     public Lock getLock();    
+    
+    public boolean isSequential();
+    
+    public void addLIANodePropagation(LIANodePropagation liaNodePropagation);
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -230,7 +230,7 @@
         return false;
     }
 
-    public BetaMemory createBetaMemory() {
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
 
         BetaMemory memory;
 
@@ -283,10 +283,10 @@
             } else {
                 factHandleMemory = new FactHashTable();
             }
-            memory = new BetaMemory( tupleMemory,
+            memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory );
         } else {
-            memory = new BetaMemory( new TupleHashTable(),
+            memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                      new FactHashTable() );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -119,7 +119,7 @@
         return false;
     }
 
-    public BetaMemory createBetaMemory() {
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
         BetaMemory memory;
         if ( this.indexed ) {
             final VariableConstraint variableConstraint = (VariableConstraint) this.constraint;
@@ -139,10 +139,10 @@
             } else {
                 factHandleMemory = new FactHashTable();
             }
-            memory = new BetaMemory( tupleMemory,
+            memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory );
         } else {
-            memory = new BetaMemory( new TupleHashTable(),
+            memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                      new FactHashTable() );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -193,7 +193,7 @@
         return false;
     }
 
-    public BetaMemory createBetaMemory() {
+    public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
 
         BetaMemory memory;
 
@@ -238,10 +238,10 @@
             } else {
                 factHandleMemory = new FactHashTable();
             }
-            memory = new BetaMemory( tupleMemory,
+            memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory );
         } else {
-            memory = new BetaMemory( new TupleHashTable(),
+            memory = new BetaMemory( config.isSequential() ? null : new TupleHashTable(),
                                      new FactHashTable() );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -100,6 +100,7 @@
              final ObjectSource rightInput,
              final BetaConstraints constraints) {
         super( id );
+        super.setHasMemory( true );
         this.leftInput = leftInput;
         this.rightInput = rightInput;
         this.constraints = constraints;
@@ -230,7 +231,7 @@
      * Creates a BetaMemory for the BetaNode's memory.
      */
     public Object createMemory(final RuleBaseConfiguration config) {
-        return this.constraints.createBetaMemory();
+        return this.constraints.createBetaMemory(config);
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -142,8 +142,10 @@
                                                           workingMemory );
 
         if ( allowed ) {
-            final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( this );
-            memory.add( tuple );
+            if ( !workingMemory.isSequential() ) {
+                final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( this );
+                memory.add( tuple );
+            }
 
             this.sink.propagateAssertTuple( tuple,
                                             context,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -106,7 +106,10 @@
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        memory.getTupleMemory().add( leftTuple );
+        
+        if ( !workingMemory.isSequential() ) {
+            memory.getTupleMemory().add( leftTuple );
+        }
 
         final Iterator it = memory.getFactHandleMemory().iterator( leftTuple );
         this.constraints.updateFromTuple( workingMemory,
@@ -146,6 +149,10 @@
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
 
         memory.getFactHandleMemory().add( handle );
+        if ( workingMemory.isSequential() ) {
+            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+            return;
+        }
 
         final Iterator it = memory.getTupleMemory().iterator( handle );
         this.constraints.updateFromFactHandle( workingMemory,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -0,0 +1,26 @@
+package org.drools.reteoo;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.spi.PropagationContext;
+
+public class LIANodePropagation {
+    private final LeftInputAdapterNode node;
+    private final InternalFactHandle handle;
+    private final PropagationContext context;
+    
+    public LIANodePropagation(final LeftInputAdapterNode node,
+                              final InternalFactHandle handle,
+                              final PropagationContext context ) {
+        super();
+        this.node = node;
+        this.handle = handle;
+        this.context = context;
+    }
+    
+    public void doPropagation(InternalWorkingMemory workingMemory) {
+        node.getSinkPropagator().createAndPropagateAssertTuple( handle, context, workingMemory );
+    }
+    
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -89,21 +89,6 @@
         setHasMemory( false );
     }
 
-    //    public AlphaNodeFieldConstraint[] getConstraints() {
-    //        // Sanity check
-    //        if ( this.constraints == null ) {
-    //            return null;
-    //        }
-    //        LinkedList constraints = this.constraints.getConstraints();
-    //
-    //        AlphaNodeFieldConstraint[] array = new AlphaNodeFieldConstraint[constraints.size()];
-    //        int i = 0;
-    //        for ( LinkedListEntry entry = (LinkedListEntry) constraints.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
-    //            array[i++] = (AlphaNodeFieldConstraint) entry.getObject();
-    //        }
-    //        return array;
-    //    }
-
     /* (non-Javadoc)
      * @see org.drools.reteoo.BaseNode#attach()
      */
@@ -141,14 +126,18 @@
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
 
-        this.sink.createAndPropagateAssertTuple( handle,
-                                                 context,
-                                                 workingMemory );
+        if ( !workingMemory.isSequential() ) {
+            this.sink.createAndPropagateAssertTuple( handle,
+                                                     context,
+                                                     workingMemory );
 
-        if ( this.hasMemory ) {
-            final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
-            memory.add( handle,
-                        false );
+            if ( this.hasMemory ) {
+                final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+                memory.add( handle,
+                            false );
+            }
+        } else {
+            workingMemory.addLIANodePropagation( new LIANodePropagation(this, handle, context) );
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -93,14 +93,13 @@
     public ObjectTypeNode(final int id,
                           final ObjectType objectType,
                           final Rete rete,
-                          final boolean hasMemory,
                           final int alphaNodeHashingThreshold) {
         super( id,
                null,
                alphaNodeHashingThreshold );
         this.rete = rete;
         this.objectType = objectType;
-        setHasMemory( hasMemory );
+        setHasMemory( true );
     }
 
     // ------------------------------------------------------------
@@ -144,14 +143,13 @@
     public void assertObject(final InternalFactHandle handle,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
-        final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
-
         if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
             // we do this after the shadowproxy update, just so that its up to date for the future
             return;
         }
 
-        if ( hasMemory() ) {
+        if ( !workingMemory.isSequential() ) {
+            final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
             memory.add( handle,
                         false );
         }

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-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -179,7 +179,10 @@
 
             agenda.scheduleItem( item );
             tuple.setActivation( item );
-            memory.getTupleMemory().add( tuple );
+            
+            if ( !workingMemory.isSequential() ) {
+                memory.getTupleMemory().add( tuple );
+            }
 
             item.setActivated( true );
             ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -88,7 +88,6 @@
                                                                   new ObjectTypeNode( context.getNextId(),
                                                                                       pattern.getObjectType(),
                                                                                       context.getRuleBase().getRete(),
-                                                                                      context.getRuleBase().getConfiguration().isObjectTypeMemory(),
                                                                                       context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() ) ) );
 
         final List betaConstraints = new ArrayList();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AddRemoveTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AddRemoveTest.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AddRemoveTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -33,7 +33,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( Object.class ),
                                                                   rete,
-                                                                  true,
                                                                   1 );
         objectTypeNode.attach();
 

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-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LogicalAssertionTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -47,7 +47,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -149,7 +148,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -240,7 +238,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -378,7 +375,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -466,7 +462,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -565,7 +560,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -693,8 +687,7 @@
         final Rete rete = new Rete( (InternalRuleBase)ruleBase);
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
-                                                                  rete,
-                                                                  true,
+                                                                  rete,                                                                 
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();
@@ -795,7 +788,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 0,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink = new MockObjectSink();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectTypeNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectTypeNodeTest.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ObjectTypeNodeTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -48,7 +48,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   objectType,
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         assertEquals( 1,
@@ -85,7 +84,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         final MockObjectSink sink = new MockObjectSink();
@@ -123,7 +121,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   new Rete( (InternalRuleBase) ruleBase),
-                                                                  true,
                                                                   3 );
 
         final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( objectTypeNode );
@@ -138,7 +135,6 @@
         ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                             new ClassObjectType( String.class ),
                                                             source,
-                                                            true,
                                                             3 );
 
         assertFalse( objectTypeNode.matches( new Object() ) );
@@ -148,7 +144,6 @@
         objectTypeNode = new ObjectTypeNode( 1,
                                              new ClassObjectType( Object.class ),
                                              source,
-                                             true,
                                              3 );
 
         assertTrue( objectTypeNode.matches( new Object() ) );
@@ -172,7 +167,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         final MockObjectSink sink = new MockObjectSink();
@@ -225,7 +219,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( String.class ),
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         final MockObjectSink sink1 = new MockObjectSink();
@@ -297,7 +290,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( Cheese.class  ),
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         final MockObjectSink sink = new MockObjectSink();
@@ -344,7 +336,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( Person.class ),
                                                                   source,
-                                                                  true,
                                                                   3 );
 
         final MockObjectSink sink = new MockObjectSink();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/PropertyChangeListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/PropertyChangeListenerTest.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/PropertyChangeListenerTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -19,7 +19,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( State.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
 
         objectTypeNode.attach();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -50,7 +50,6 @@
         final ObjectTypeNode queryObjectTypeNode = new ObjectTypeNode( 1,
                                                                        queryObjectType,
                                                                        rete,
-                                                                       true,
                                                                        3 );
         queryObjectTypeNode.attach();
 
@@ -80,7 +79,6 @@
         final ObjectTypeNode cheeseObjectTypeNode = new ObjectTypeNode( 4,
                                                                         cheeseObjectType,
                                                                         rete,
-                                                                        true,
                                                                         3 );
         cheeseObjectTypeNode.attach();
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java	2007-06-27 04:50:44 UTC (rev 12881)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteTest.java	2007-06-27 05:06:06 UTC (rev 12882)
@@ -1,4 +1,4 @@
-package org.drools.reteoo;
+ package org.drools.reteoo;
 
 /*
  * Copyright 2005 JBoss Inc
@@ -55,14 +55,12 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( Object.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
 
         final ObjectTypeNode stringTypeNode = new ObjectTypeNode( 2,
                                                                   new ClassObjectType( String.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         stringTypeNode.attach();
 
@@ -93,7 +91,6 @@
         ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                             new ClassObjectType( List.class ),
                                                             rete,
-                                                            true,
                                                             3 );
         objectTypeNode.attach();
         MockObjectSink sink = new MockObjectSink();
@@ -102,7 +99,6 @@
         objectTypeNode = new ObjectTypeNode( 1,
                                              new ClassObjectType( Collection.class ),
                                              rete,
-                                             true,
                                              3 );
         objectTypeNode.attach();
         sink = new MockObjectSink();
@@ -111,7 +107,6 @@
         objectTypeNode = new ObjectTypeNode( 1,
                                              new ClassObjectType( ArrayList.class ),
                                              rete,
-                                             true,
                                              3 );
         objectTypeNode.attach();
         sink = new MockObjectSink();
@@ -162,7 +157,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( List.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink1 = new MockObjectSink();
@@ -216,7 +210,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( List.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink1 = new MockObjectSink();
@@ -274,7 +267,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( Cheese.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink1 = new MockObjectSink();
@@ -313,7 +305,6 @@
         final ObjectTypeNode objectTypeNode = new ObjectTypeNode( 1,
                                                                   new ClassObjectType( Cheese.class ),
                                                                   rete,
-                                                                  true,
                                                                   3 );
         objectTypeNode.attach();
         final MockObjectSink sink1 = new MockObjectSink();




More information about the jboss-svn-commits mailing list