[jboss-svn-commits] JBL Code SVN: r19322 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: util and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Mar 30 00:30:01 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-03-30 00:30:01 -0400 (Sun, 30 Mar 2008)
New Revision: 19322

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.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/LeftTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java
Log:
JBRULES-1520 RightTuple merge for asymmetrical Rete propagations
-Lots of fixes, mostly missing read/write external methods and default constructors.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -447,12 +447,15 @@
 
         final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
         for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
-            RightTuple rightTuple = leftTuple.getBetaChildren().getRightParent();
-            sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                                 rightTuple,
-                                                 sink ),
-                                  context,
-                                  workingMemory );
+            LeftTuple childLeftTuple = leftTuple.getBetaChildren();
+            if ( childLeftTuple != null ) {
+                RightTuple rightTuple = childLeftTuple.getRightParent();
+                sink.assertLeftTuple( new LeftTuple( leftTuple,
+                                                     rightTuple,
+                                                     sink ),
+                                      context,
+                                      workingMemory );
+            }
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -350,12 +350,15 @@
 
         final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
         for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
-            RightTuple rightTuple = leftTuple.getBetaChildren().getRightParent();
-            sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                                 rightTuple,
-                                                 sink ),
-                                  context,
-                                  workingMemory );
+            LeftTuple childLeftTuple = leftTuple.getBetaChildren();
+            if ( childLeftTuple != null ) {
+                RightTuple rightTuple = childLeftTuple.getRightParent();
+                sink.assertLeftTuple( new LeftTuple( leftTuple,
+                                                     rightTuple,
+                                                     sink ),
+                                      context,
+                                      workingMemory );
+            }
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -18,7 +18,8 @@
         return instance;
     }
 
-    private EmptyLeftTupleSinkAdapter() {
+    public EmptyLeftTupleSinkAdapter() {
+        // constructor needed for serialisation
     }
 
     public void propagateAssertLeftTuple(final LeftTuple leftTuple,

Modified: 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	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -15,6 +15,10 @@
     private LeftInputAdapterNode node;
     private InternalFactHandle   handle;
     private PropagationContext   context;
+    
+    public LIANodePropagation() {
+        // constructor needed for serialisation
+    }
 
     public LIANodePropagation(final LeftInputAdapterNode node,
                               final InternalFactHandle handle,

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	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -139,8 +139,7 @@
                                                          context,
                                                          workingMemory );
         } else {
-            // @todo
-            //workingMemory.addLIANodePropagation( new LIANodePropagation(this, rightTuple, context) );
+            workingMemory.addLIANodePropagation( new LIANodePropagation(this, factHandle, context) );
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -19,45 +19,49 @@
     implements
     Tuple,
     Entry {
-    private static final long        serialVersionUID = 400L;
+    private static final long  serialVersionUID = 400L;
 
-    private int                      index;
+    private int                index;
 
-    private final InternalFactHandle handle;
+    private InternalFactHandle handle;
 
-    private LeftTuple                parent;
+    private LeftTuple          parent;
 
-    private Activation               activation;
+    private Activation         activation;
 
-    private long                     recency;
+    private long               recency;
 
-    private int                      hashCode;
+    private int                hashCode;
 
-    private RightTuple               blocker;
+    private RightTuple         blocker;
 
-    private LeftTuple                blockedPrevious;
+    private LeftTuple          blockedPrevious;
 
-    private LeftTuple                blockedNext;
+    private LeftTuple          blockedNext;
 
     // left and right tuples in parent
-    private LeftTuple                leftParent;
-    private LeftTuple                leftParentPrevious;
-    private LeftTuple                leftParentNext;
+    private LeftTuple          leftParent;
+    private LeftTuple          leftParentPrevious;
+    private LeftTuple          leftParentNext;
 
-    private RightTuple               rightParent;
-    private LeftTuple                rightParentPrevious;
-    private LeftTuple                rightParentNext;
+    private RightTuple         rightParent;
+    private LeftTuple          rightParentPrevious;
+    private LeftTuple          rightParentNext;
 
     // node memory
-    private LeftTupleList           memory;
-    private Entry                    next;
-    private Entry                    previous;
+    private LeftTupleList      memory;
+    private Entry              next;
+    private Entry              previous;
 
     // children
-    private LeftTuple                children;
+    private LeftTuple          children;
 
-    private final LeftTupleSink      sink;
+    private LeftTupleSink      sink;
 
+    public LeftTuple() {
+        // constructor needed for serialisation
+    }
+
     // ------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------
@@ -435,10 +439,52 @@
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        // @todo        
+        index = in.readInt();
+        handle = (InternalFactHandle) in.readObject();
+        parent = (LeftTuple) in.readObject();
+        activation = (Activation) in.readObject();
+        recency = in.readLong();
+        hashCode = in.readInt();
+        blocker = (RightTuple) in.readObject();
+        blockedPrevious = (LeftTuple) in.readObject();
+        blockedNext = (LeftTuple) in.readObject();
+        leftParent = (LeftTuple) in.readObject();
+        leftParentPrevious = (LeftTuple) in.readObject();
+        leftParentNext = (LeftTuple) in.readObject();
+        rightParent = (RightTuple) in.readObject();
+        rightParentPrevious = (LeftTuple) in.readObject();
+        rightParentNext = (LeftTuple) in.readObject();
+        memory = (LeftTupleList) in.readObject();
+        next = (Entry) in.readObject();
+        previous = (Entry) in.readObject();
+        children = (LeftTuple) in.readObject();
+
+        // @todo should not serialise out part of the rete network
+        sink = (LeftTupleSink) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        // @todo        
+        out.writeInt( index );
+        out.writeObject( handle );
+        out.writeObject( parent );
+        out.writeObject( activation );
+        out.writeLong( recency );
+        out.writeInt( hashCode );
+        out.writeObject( blocker );
+        out.writeObject( blockedPrevious );
+        out.writeObject( blockedNext );
+        out.writeObject( leftParent );
+        out.writeObject( leftParentPrevious );
+        out.writeObject( leftParentNext );
+        out.writeObject( rightParent );
+        out.writeObject( rightParentPrevious );
+        out.writeObject( rightParentNext );
+        out.writeObject( memory );
+        out.writeObject( next );
+        out.writeObject( previous );
+        out.writeObject( children );
+
+        // @todo should not serialise in part of the rete network
+        out.writeObject( sink );
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTuple.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -11,7 +11,7 @@
 public class RightTuple
     implements
     Entry {
-    private final InternalFactHandle handle;
+    private InternalFactHandle handle;
 
     private RightTuple               handlePrevious;
     private RightTuple               handleNext;
@@ -28,6 +28,10 @@
     private RightTupleSink           sink;
 
     private int                      hashCode;
+    
+    public RightTuple() {
+        
+    }
 
     public RightTuple(InternalFactHandle handle,
                       RightTupleSink sink) {
@@ -178,13 +182,29 @@
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        // TODO Auto-generated method stub
-
+        this.handle = ( InternalFactHandle ) in.readObject();
+        this.handlePrevious = ( RightTuple ) in.readObject();
+        this.handleNext = ( RightTuple ) in.readObject();
+        this.memory = ( RightTupleList ) in.readObject();
+        this.previous = ( RightTuple ) in.readObject();
+        this.next = ( RightTuple ) in.readObject();
+        this.betaChildren = ( LeftTuple) in.readObject();
+        this.blocked = ( LeftTuple) in.readObject();
+        this.sink = ( RightTupleSink ) in.readObject();
+        this.hashCode = in.readInt();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        // TODO Auto-generated method stub
-
+        out.writeObject( this.handle );
+        out.writeObject( this.handlePrevious );
+        out.writeObject( this.handleNext );
+        out.writeObject( this.memory );
+        out.writeObject( this.previous );
+        out.writeObject( this.next );
+        out.writeObject( this.betaChildren );
+        out.writeObject( this.blocked );
+        out.writeObject( this.sink );
+        out.writeInt( this.hashCode );        
     }
 
 }

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	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -124,7 +124,7 @@
         subrule = (GroupElement) in.readObject();
         tupleSource = (LeftTupleSource) in.readObject();
         previousTupleSinkNode = (LeftTupleSinkNode) in.readObject();
-        nextTupleSinkNode = (LeftTupleSinkNode) in.readObject();
+        nextTupleSinkNode = (LeftTupleSinkNode) in.readObject();       
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
@@ -390,6 +390,12 @@
         memory.getTupleMemory().remove( leftTuple );
 
         final Activation activation = leftTuple.getActivation();
+        
+        // activation can be null if the LeftTuple previous propagated into a no-loop
+        if ( activation == null ) {
+            return;
+        }
+        
         if ( activation.getLogicalDependencies() != null && !activation.getLogicalDependencies().isEmpty() ) {
             context.addRetractedTuple( this.rule,
                                        activation );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -7,6 +7,8 @@
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleMemory;
 import org.drools.reteoo.RightTuple;
+import org.drools.util.AbstractHashTable.HashTableIterator;
+import org.drools.util.AbstractHashTable.ObjectComparator;
 
 import java.io.ObjectOutput;
 import java.io.ObjectInput;
@@ -23,11 +25,15 @@
 
     private int                             startResult;
 
-    private FieldIndexHashTableFullIterator tupleValueFullIterator;
+    private transient FieldIndexHashTableFullIterator tupleValueFullIterator;
 
     private int                             factSize;
 
     private Index                           index;
+    
+    public LeftTupleIndexHashTable() {
+        // constructor for serialisation
+    }
 
     public LeftTupleIndexHashTable(final FieldIndex[] index) {
         this( 128,
@@ -65,7 +71,21 @@
                 throw new IllegalArgumentException( "FieldIndexHashTable cannot use an index[] of length  great than 3" );
         }
     }
+    
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal( in );
+        startResult = in.readInt();
+        factSize = in.readInt();
+        index = ( Index ) in.readObject();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal( out );
+        out.writeInt( startResult );
+        out.writeInt( factSize );
+        out.writeObject( index );
+    }    
+
     public Iterator iterator() {
         if ( this.tupleValueFullIterator == null ) {
             this.tupleValueFullIterator = new FieldIndexHashTableFullIterator( this );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LeftTupleList.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -24,8 +24,8 @@
 
     public LeftTuple               first;
 
-    private final int              hashCode;
-    private final Index            index;
+    private int                    hashCode;
+    private Index                  index;
 
     private TupleHashTableIterator iterator;
 
@@ -38,7 +38,7 @@
     }
 
     public LeftTupleList(final Index index,
-                          final int hashCode) {
+                         final int hashCode) {
         this.index = index;
         this.hashCode = hashCode;
     }
@@ -203,11 +203,16 @@
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        // @todo
-        
+        next = (LeftTuple) in.readObject();
+        first = (LeftTuple) in.readObject();
+        hashCode = in.readInt();
+        index = (Index) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        // @todo        
+        out.writeObject( next );
+        out.writeObject( first );
+        out.writeInt( hashCode );
+        out.writeObject( index );
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -7,6 +7,9 @@
 import org.drools.reteoo.RightTuple;
 import org.drools.reteoo.RightTupleMemory;
 import org.drools.reteoo.LeftTuple;
+import org.drools.util.AbstractHashTable.HashTableIterator;
+import org.drools.util.AbstractHashTable.Index;
+import org.drools.util.AbstractHashTable.ObjectComparator;
 
 import java.io.ObjectInput;
 import java.io.IOException;
@@ -26,6 +29,10 @@
     private int               factSize;
 
     private Index             index;      
+    
+    public RightTupleIndexHashTable() {
+        
+    }
 
     public RightTupleIndexHashTable(final FieldIndex[] index) {
         this( 128,
@@ -63,7 +70,21 @@
                 throw new IllegalArgumentException( "FieldIndexHashTable cannot use an index[] of length  great than 3" );
         }
     }
+    
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal( in );
+        startResult = in.readInt();
+        factSize = in.readInt();
+        index = ( Index ) in.readObject();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal( out );
+        out.writeInt( startResult );
+        out.writeInt( factSize );
+        out.writeObject( index );
+    }    
+
     public RightTuple getFirst(LeftTuple leftTuple) {
         RightTupleList bucket = get( leftTuple );
         if ( bucket != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java	2008-03-30 04:29:51 UTC (rev 19321)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/RightTupleList.java	2008-03-30 04:30:01 UTC (rev 19322)
@@ -24,8 +24,8 @@
         public RightTuple        first;
         public RightTuple        last;
         
-        private final int         hashCode;
-        private final Index       index;
+        private int         hashCode;
+        private Index       index;
         
         public RightTupleList() {
             // this is not an index bucket
@@ -179,12 +179,20 @@
 
         public void readExternal(ObjectInput in) throws IOException,
                                                 ClassNotFoundException {
-            // TODO Auto-generated method stub
-            
+            previous = ( RightTuple ) in.readObject();
+            next =  ( RightTuple ) in.readObject();            
+            first =  ( RightTuple ) in.readObject();
+            last =  ( RightTuple ) in.readObject();            
+            hashCode = in.readInt();
+            index = ( Index ) in.readObject();
         }
 
         public void writeExternal(ObjectOutput out) throws IOException {
-            // TODO Auto-generated method stub
-            
+            out.writeObject( previous );
+            out.writeObject( next );            
+            out.writeObject( first );
+            out.writeObject( last );            
+            out.writeInt( hashCode );
+            out.writeObject( index );
         }    
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list