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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jan 18 14:22:05 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-01-18 14:22:05 -0500 (Sun, 18 Jan 2009)
New Revision: 24763

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
Log:
JBRULES-1921 lock-on-active behaviour for root MAIN is inconsistent
-behaviour corrected with unit tests

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2009-01-18 18:58:52 UTC (rev 24762)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2009-01-18 19:22:05 UTC (rev 24763)
@@ -314,6 +314,82 @@
         assertEquals( 1,
                       group2.size() );
     }
+    
+    public void testLockOnActiveForMain() {
+        String str = "";
+        str += "package org.drools \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    lock-on-active true \n";
+        str += "when \n";
+        str += "    $str : String() \n";
+        str += "then \n";
+        str += "    list.add( $str ); \n";
+        str += "end \n";
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+        
+        assertFalse( kbuilder.hasErrors() );
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        List list = new ArrayList();
+        ksession.setGlobal( "list", list );
+        ksession.insert( "hello1" );
+        ksession.insert( "hello2" );
+        ksession.insert( "hello3" );
+        
+        ksession.fireAllRules();
+        assertEquals( 3, list.size() );
+        
+        ksession.insert( "hello4" );
+        ksession.insert( "hello5" );
+        ksession.insert( "hello6" );
+        
+        ksession.fireAllRules();
+        assertEquals( 6, list.size() );                
+    }
+    
+    public void testLockOnActiveForMainWithHalt() {
+        String str = "";
+        str += "package org.drools \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    lock-on-active true \n";
+        str += "when \n";
+        str += "    $str : String() \n";
+        str += "then \n";
+        str += "    list.add( $str ); \n";
+        str += "    if ( list.size() == 2 ) drools.halt();\n";
+        str += "end \n";
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+        
+        assertFalse( kbuilder.hasErrors() );
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        List list = new ArrayList();
+        ksession.setGlobal( "list", list );
+        ksession.insert( "hello1" );
+        ksession.insert( "hello2" );
+        ksession.insert( "hello3" );
+        
+        ksession.fireAllRules();
+        assertEquals( 2, list.size() );
+        
+        // because we have halted, the next 3 will be ignored, but it will still fire the remaing 3rd activation from previous asserts
+        ksession.insert( "hello4" );
+        ksession.insert( "hello5" );
+        ksession.insert( "hello6" );
+        
+        ksession.fireAllRules();
+        assertEquals( 3, list.size() );                
+    }    
 
     public void testLockOnActiveWithModify() throws Exception {
         final PackageBuilder builder = new PackageBuilder();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-01-18 18:58:52 UTC (rev 24762)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-01-18 19:22:05 UTC (rev 24763)
@@ -1052,6 +1052,10 @@
             fireLimit = updateFireLimit( fireLimit );
             this.workingMemory.executeQueuedActions();
         }
+        if ( this.focusStack.size() == 1 && this.main.isEmpty() ) {
+            // the root MAIN agenda group is empty, reset active to false, so it can receive more activations.
+            this.main.setActive( false );
+        }
         return fireCount;
     }
 




More information about the jboss-svn-commits mailing list