[jboss-svn-commits] JBL Code SVN: r25514 - 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
Thu Mar 5 23:11:38 EST 2009


Author: KrisVerlaenen
Date: 2009-03-05 23:11:37 -0500 (Thu, 05 Mar 2009)
New Revision: 25514

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
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
Log:
 - fixed issue whit active mode when activations were added during execution of queue

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-03-06 03:33:16 UTC (rev 25513)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2009-03-06 04:11:37 UTC (rev 25514)
@@ -975,6 +975,40 @@
                       list.size() );
     }
 
+    public void testRuleFlowGroupInActiveMode() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflowgroup.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+        final StatefulSession workingMemory = ruleBase.newStatefulSession();
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "list",
+                                 list );
+        
+        new Thread(new Runnable() {
+			public void run() {
+				workingMemory.fireUntilHalt();
+			}
+        }).start();
+
+        workingMemory.insert( "Test" );
+        assertEquals( 0,
+                      list.size() );
+
+        workingMemory.getAgenda().activateRuleFlowGroup( "Group1" );
+
+        Thread.sleep(1000);
+        
+        assertEquals( 1,
+                      list.size() );
+        
+        workingMemory.halt();
+    }
+
     public void testRuleFlow() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );

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-03-06 03:33:16 UTC (rev 25513)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-03-06 04:11:37 UTC (rev 25514)
@@ -1059,6 +1059,7 @@
         this.halt.set( false );
         while ( continueFiring( -1 ) ) {
         	boolean fired = fireNextItem( agendaFilter );
+        	fired = fired || !((AbstractWorkingMemory) this.workingMemory).getActionQueue().isEmpty();
         	this.workingMemory.executeQueuedActions();
             if ( !fired ) {
                 try {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java	2009-03-06 03:33:16 UTC (rev 25513)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
@@ -167,6 +167,8 @@
             final Activation activation = node.getActivation();
             ((InternalAgendaGroup) activation.getAgendaGroup()).add( activation );
         }
+        // making sure we re-evaluate agenda in case we are waiting for activations
+        ((InternalAgenda) workingMemory.getAgenda()).notifyHalt();
     }
 
     public void clear() {




More information about the jboss-svn-commits mailing list