[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