[jboss-svn-commits] JBL Code SVN: r36551 - in labs/jbossrules/soa_branches/BRMS-5.1.x: drools-compiler/src/test/resources/org/drools/integrationtests and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 19 15:25:03 EST 2011


Author: tsurdilovic
Date: 2011-01-19 15:25:02 -0500 (Wed, 19 Jan 2011)
New Revision: 36551

Added:
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists_JBRULES_2810.drl
Modified:
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
Log:
BRMS-519 : NullPointer in retractLeftTuple()

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -1,5 +1,10 @@
 package org.drools.integrationtests;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify; 
+
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
@@ -33,6 +38,7 @@
 import org.drools.StatefulSession;
 import org.drools.StockTick;
 import org.drools.WorkingMemory;
+import org.drools.audit.WorkingMemoryConsoleLogger;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
@@ -49,7 +55,6 @@
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.conf.ClockTypeOption;
 import org.drools.time.SessionPseudoClock;
-import static org.mockito.Mockito.*;
 
 public class FirstOrderLogicTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
@@ -447,6 +452,23 @@
                       list.size() );
     }
 
+    public void testExists3() throws Exception {
+        final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_Exists_JBRULES_2810.drl",
+                    FirstOrderLogicTest.class ),
+                    ResourceType.DRL );
+        
+        assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
+
+        final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        WorkingMemoryConsoleLogger logger = new WorkingMemoryConsoleLogger( ksession );
+        ksession.fireAllRules();
+        ksession.dispose();
+    }
+
     public void testForall() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Forall.drl" ) ) );

Added: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists_JBRULES_2810.drl
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists_JBRULES_2810.drl	                        (rev 0)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists_JBRULES_2810.drl	2011-01-19 20:25:02 UTC (rev 36551)
@@ -0,0 +1,48 @@
+package org.drools;
+
+declare A
+    id : int
+end
+
+declare B
+    id : int
+end
+
+declare C
+    id : int
+end
+
+rule "Setup"
+    salience 100
+then
+    insert( new A(1) );
+    insert( new A(1) );
+    insert( new B(1) );
+    insert( new C(1) );
+    insert( new B(2) );
+    insert( new C(4) );
+end
+
+rule "Trigger"
+    salience 50
+    no-loop
+when
+    $a : A()
+    $c1 : C( id == 1 )
+    $c4 : C( id == 4 )
+then
+    modify( $a ) {}
+    modify( $c1 ) { }
+    modify( $c4 ) { setId( 5 ) }
+end
+
+rule "Offending"
+when
+  A( $id : id )
+  B( )
+  C( id == $id )
+  exists( B(  ) and
+          C( id == 4 ) )
+then
+  // do something
+end

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -188,5 +188,11 @@
     public void setOriginOffset(int originOffset) {
         this.originOffset = originOffset;
     }
+    
+    @Override
+    public String toString() {
+        return "PropagationContextImpl [activeActivations=" + activeActivations + ", dormantActivations=" + dormantActivations + ", entryPoint=" + entryPoint + ", factHandle=" + factHandle + ", leftTuple=" + leftTuple + ", originOffset="
+                + originOffset + ", propagationNumber=" + propagationNumber + ", rule=" + rule + ", type=" + type + "]";
+    }
 
 }

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -29,6 +29,7 @@
 import org.drools.reteoo.EntryPointNode;
 import org.drools.reteoo.EvalConditionNode;
 import org.drools.reteoo.ExistsNode;
+import org.drools.reteoo.ForallNotNode;
 import org.drools.reteoo.FromNode;
 import org.drools.reteoo.JoinNode;
 import org.drools.reteoo.LeftInputAdapterNode;
@@ -88,6 +89,8 @@
                            BetaNodeVisitor.INSTANCE );
         this.visitors.put( NotNode.class,
                            BetaNodeVisitor.INSTANCE );
+        this.visitors.put( ForallNotNode.class,
+                           BetaNodeVisitor.INSTANCE ); 
         this.visitors.put( ExistsNode.class,
                            BetaNodeVisitor.INSTANCE );
         this.visitors.put( AccumulateNode.class,
@@ -133,7 +136,7 @@
                                nodeStack,
                                info );
             } else {
-                throw new RuntimeException( "No visitor found for node: " + parent );
+                throw new RuntimeException( "No visitor found for node class: " + parent.getClass()+" node: "+parent );
             }
             visitChildren( parent,
                            nodeStack,

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -276,11 +276,15 @@
         // iterate to find all child tuples for the shared node
         while ( childLeftTuple != null && childLeftTuple.getRightParent() == parentRightTuple ) {
             // this will iterate for each child node when the
-            // the current node is shared      
+            // the current node is shared
+            
+            // preserve the current LeftTuple, as we need to iterate to the next before re-adding
+            LeftTuple temp = childLeftTuple;      
             childLeftTuple.getLeftTupleSink().modifyLeftTuple( childLeftTuple,
                                                                context,
                                                                workingMemory );
             childLeftTuple = childLeftTuple.getLeftParentNext();
+            temp.reAddRight();
         }
         return childLeftTuple;
     }
@@ -293,11 +297,15 @@
         // iterate to find all child tuples for the shared node
         while ( childLeftTuple != null && childLeftTuple.getLeftParent() == parentLeftTuple ) {
             // this will iterate for each child node when the
-            // the current node is shared      
+            // the current node is shared  
+            
+            // preserve the current LeftTuple, as we need to iterate to the next before re-adding
+            LeftTuple temp = childLeftTuple; 
             childLeftTuple.getLeftTupleSink().modifyLeftTuple( childLeftTuple,
                                                                context,
                                                                workingMemory );
             childLeftTuple = childLeftTuple.getRightParentNext();
+            temp.reAddLeft();
         }
         return childLeftTuple;
     }

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -241,15 +241,11 @@
                                                                 workingMemory,
                                                                 true );
                         } else {
-                            // preserve the current LeftTuple, as we need to iterate to the next before re-adding
-                            LeftTuple temp = childLeftTuple;
                             childLeftTuple = this.sink.propagateModifyChildLeftTuple( childLeftTuple,
                                                                                       leftTuple,
                                                                                       context,
                                                                                       workingMemory,
                                                                                       true );
-                            // we must re-add this to ensure deterministic iteration
-                            temp.reAddLeft();
                         }
                     } else if ( childLeftTuple != null && childLeftTuple.getLeftParent() == leftTuple ) {
                         childLeftTuple = this.sink.propagateRetractChildLeftTuple( childLeftTuple,
@@ -329,15 +325,11 @@
                                                                 workingMemory,
                                                                 true );
                         } else {
-                            // preserve the current LeftTuple, as we need to iterate to the next before re-adding
-                            LeftTuple temp = childLeftTuple;
                             childLeftTuple = this.sink.propagateModifyChildLeftTuple( childLeftTuple,
                                                                                       rightTuple,
                                                                                       context,
                                                                                       workingMemory,
                                                                                       true );
-                            // we must re-add this to ensure deterministic iteration
-                            temp.reAddRight();
                         }
                     } else if ( childLeftTuple != null && childLeftTuple.getRightParent() == rightTuple ) {
                         childLeftTuple = this.sink.propagateRetractChildLeftTuple( childLeftTuple,

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -117,7 +117,6 @@
     public void assertLeftTuple(final LeftTuple tuple,
                                 final PropagationContext context,
                                 final InternalWorkingMemory workingMemory) {
-
         // creating a dummy fact handle to wrap the tuple
         final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( tuple,
                                                                                               workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( context.getEntryPoint(),
@@ -147,7 +146,6 @@
                                  final InternalWorkingMemory workingMemory) {
 
         final ObjectHashMap memory = (ObjectHashMap) workingMemory.getNodeMemory( this );
-
         // retrieve handle from memory
         final InternalFactHandle factHandle = (InternalFactHandle) memory.remove( tuple );
 
@@ -332,4 +330,9 @@
         return this.tupleMemoryEnabled == other.tupleMemoryEnabled && this.tupleSource.equals( other.tupleSource );
     }
 
+    @Override
+    public String toString() {
+        return "RightInputAdapterNode(" + id + ")[ tupleMemoryEnabled=" + tupleMemoryEnabled + ", tupleSource=" + tupleSource + ", source="
+            + source + ", associations=" + associations.keySet() + ", partitionId=" + partitionId + "]";
+    } 
 }

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2011-01-19 19:12:29 UTC (rev 36550)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2011-01-19 20:25:02 UTC (rev 36551)
@@ -239,6 +239,8 @@
         childLeftTuple.getLeftTupleSink().modifyLeftTuple( childLeftTuple,
                                                            context,
                                                            workingMemory );
+        // re-order right to keep order consistency
+        childLeftTuple.reAddRight(); 
         return childLeftTuple.getLeftParentNext();
     }
 
@@ -250,6 +252,8 @@
         childLeftTuple.getLeftTupleSink().modifyLeftTuple( childLeftTuple,
                                                            context,
                                                            workingMemory );
+        // re-order right to keep order consistency
+        childLeftTuple.reAddLeft(); 
         return childLeftTuple.getRightParentNext();
     }
 



More information about the jboss-svn-commits mailing list