[jboss-svn-commits] JBL Code SVN: r19232 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Mar 25 22:58:06 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-03-25 22:58:05 -0400 (Tue, 25 Mar 2008)
New Revision: 19232

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
Log:
JBRULES-1520 RightTuple merge for asynchronous Rete propagations
-Fixed FromNode

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -278,7 +278,6 @@
 
                 proxy.setShadowedObject( fact );
             } catch ( final Exception e ) {
-                System.out.println( "shadow: " + proxy.getClass() + ":" + fact.getClass() );
                 throw new RuntimeDroolsException( "Error creating shadow fact for object: " + fact,
                                                   e );
             }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -66,6 +66,22 @@
         }
         leftTuple.setBetaChildren( null );
     }
+    
+    public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
+                                          final PropagationContext context,
+                                          final InternalWorkingMemory workingMemory) {
+        LeftTuple child = leftTuple.getBetaChildren();
+        while ( child != null ) {
+            LeftTuple temp = child.getLeftParentNext();
+            child.getSink().retractLeftTuple( child,
+                                          context,
+                                          workingMemory );
+            workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
+            child.unlinkFromRightParent();            
+            child = temp;
+        }
+        leftTuple.setBetaChildren( null );
+    }    
 
     public void propagateRetractRightTuple(final RightTuple rightTuple,
                                            final PropagationContext context,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -89,7 +89,8 @@
         final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
 
         memory.betaMemory.getLeftTupleMemory().add( leftTuple );
-        final LinkedList list = new LinkedList();
+        //final LinkedList list = new LinkedList();
+        
         this.betaConstraints.updateFromTuple( memory.betaMemory.getContext(),
                                               workingMemory,
                                               leftTuple );
@@ -103,6 +104,8 @@
             final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object,
                                                                                                   false,
                                                                                                   workingMemory );
+            
+            RightTuple rightTuple = new RightTuple( handle );
 
             boolean isAllowed = true;
             if ( this.alphaConstraints != null ) {
@@ -120,10 +123,10 @@
 
             if ( isAllowed && this.betaConstraints.isAllowedCachedLeft( memory.betaMemory.getContext(),
                                                                         handle ) ) {
-                list.add( new LinkedListEntry( handle ) );
+                //list.add( new LinkedListEntry( handle ) );
 
                 this.sink.propagateAssertLeftTuple( leftTuple,
-                                                    handle,
+                                                    rightTuple,
                                                     context,
                                                     workingMemory );
             } else {
@@ -132,12 +135,6 @@
         }
 
         this.betaConstraints.resetTuple( memory.betaMemory.getContext() );
-
-        if ( !list.isEmpty() ) {
-            memory.betaMemory.getCreatedHandles().put( leftTuple,
-                                                       list );
-        }
-
     }
 
     public void retractLeftTuple(final LeftTuple leftTuple,
@@ -145,24 +142,9 @@
                                  final InternalWorkingMemory workingMemory) {
 
         final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
-        final LeftTuple tuple = memory.betaMemory.getLeftTupleMemory().remove( leftTuple );
-
-        if ( tuple == null ) {
-            return;
-        }
-
-        final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
-        // if tuple was propagated
-        if ( list != null ) {
-            for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
-                final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
-                this.sink.propagateRetractLeftTuple( leftTuple,
-                                                     handle,
-                                                     context,
-                                                     workingMemory );
-                workingMemory.getFactHandleFactory().destroyFactHandle( handle );
-            }
-        }
+        memory.betaMemory.getLeftTupleMemory().remove( leftTuple );
+        
+        this.sink.propagateRetractLeftTupleDestroyRightTuple( leftTuple, context, workingMemory );
     }
 
     public void attach() {
@@ -216,21 +198,22 @@
                            final InternalWorkingMemory workingMemory) {
 
         final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
-
-        final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
-        for ( LeftTuple tuple = (LeftTuple) tupleIter.next(); tuple != null; tuple = (LeftTuple) tupleIter.next() ) {
-            final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
-            if ( list == null ) {
-                continue;
-            }
-            for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
-                final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
-                this.sink.propagateAssertLeftTuple( tuple,
-                                                    handle,
-                                                    context,
-                                                    workingMemory );
-            }
-        }
+        // @TODO
+//
+//        final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
+//        for ( LeftTuple tuple = (LeftTuple) tupleIter.next(); tuple != null; tuple = (LeftTuple) tupleIter.next() ) {
+//            final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
+//            if ( list == null ) {
+//                continue;
+//            }
+//            for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
+//                final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+//                this.sink.propagateAssertLeftTuple( tuple,
+//                                                    handle,
+//                                                    context,
+//                                                    workingMemory );
+//            }
+//        }
     }
 
     public Object createMemory(final RuleBaseConfiguration config) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -21,6 +21,10 @@
     public void propagateRetractLeftTuple(LeftTuple tuple,
                                           PropagationContext context,
                                           InternalWorkingMemory workingMemory);
+    
+    public void propagateRetractLeftTupleDestroyRightTuple(LeftTuple tuple,
+                                                           PropagationContext context,
+                                                           InternalWorkingMemory workingMemory);
 
     public void propagateRetractRightTuple(RightTuple tuple,
                                            PropagationContext context,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -69,14 +69,15 @@
     // ------------------------------------------------------------
     // Instance methods
     // ------------------------------------------------------------
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        super.readExternal(in);
-        sink    = (LeftTupleSinkPropagator)in.readObject();
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        super.readExternal( in );
+        sink = (LeftTupleSinkPropagator) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal(out);
-        out.writeObject(sink);
+        super.writeExternal( out );
+        out.writeObject( sink );
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-03-26 02:58:05 UTC (rev 19232)
@@ -74,6 +74,22 @@
         }
         leftTuple.setBetaChildren( null );
     }
+    
+    public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
+                                          final PropagationContext context,
+                                          final InternalWorkingMemory workingMemory) {
+        LeftTuple child = leftTuple.getBetaChildren();
+        while ( child != null ) {
+            LeftTuple temp = child.getLeftParentNext();
+            child.getSink().retractLeftTuple( child,
+                                              context,
+                                              workingMemory );
+            workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
+            child.unlinkFromRightParent();
+            child = temp;
+        }
+        leftTuple.setBetaChildren( null );
+    }    
 
     public void propagateRetractRightTuple(final RightTuple rightTuple,
                                            final PropagationContext context,




More information about the jboss-svn-commits mailing list