[jboss-svn-commits] JBL Code SVN: r13422 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 12 15:41:15 EDT 2007


Author: tirelli
Date: 2007-07-12 15:41:14 -0400 (Thu, 12 Jul 2007)
New Revision: 13422

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OutOfMemory.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PropagationContext.java
Log:
JBRULES-847: Fixing out of memory problem

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -3315,7 +3315,7 @@
         }
     }
 
-    public void FIXME_testOutOfMemory() throws Exception {
+    public void testOutOfMemory() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OutOfMemory.drl" ) ) );
         final Package pkg = builder.getPackage();
@@ -3326,7 +3326,7 @@
 
         workingMemory.insert( new Cheese( "stilton", 1 ) );
 
-        workingMemory.fireAllRules(2907000);
+        workingMemory.fireAllRules(3000000);
         
         // just for profiling
         //Thread.currentThread().wait();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -13,6 +13,7 @@
 import org.drools.base.DefaultKnowledgeHelper;
 import org.drools.common.AgendaItem;
 import org.drools.common.InternalFactHandle;
+import org.drools.common.PropagationContextImpl;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -78,7 +79,7 @@
         final AgendaItem item = new AgendaItem( 0,
                                                 tuple,
                                                 10,
-                                                null,
+                                                new PropagationContextImpl(1, 1, null, null),
                                                 context.getRule(),
                                                 null );
         final DefaultKnowledgeHelper kbHelper = new DefaultKnowledgeHelper( wm );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OutOfMemory.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OutOfMemory.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OutOfMemory.drl	2007-07-12 19:41:14 UTC (rev 13422)
@@ -0,0 +1,21 @@
+package org.drools;
+
+rule "Rule 1"
+        when
+                c: Cheese( type == "stilton" )
+        then
+                c.setPrice( c.getPrice() + 1 );
+                c.setType( "brie" );
+                update( c );
+end
+ 
+rule "Rule 2"
+        when
+                c: Cheese( type == "brie" )
+        then
+                c.setPrice( c.getPrice() + 1 );
+                c.setType( "stilton" );
+                update( c );
+end
+
+

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -23,7 +23,6 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -857,6 +856,10 @@
                         Object object,
                         Rule rule,
                         Activation activation) {
+        if( activation != null ) {
+            // release resources so that they can be GC'ed
+            activation.getPropagationContext().releaseResources();
+        }
         final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
                                                                                   PropagationContext.ASSERTION,
                                                                                   rule,
@@ -964,6 +967,10 @@
             }
             removePropertyChangeListener( handle );
 
+            if( activation != null ) {
+                // release resources so that they can be GC'ed
+                activation.getPropagationContext().releaseResources();
+            }
             final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
                                                                                       PropagationContext.RETRACTION,
                                                                                       rule,
@@ -1055,6 +1062,10 @@
             return;
         }
 
+        if( activation != null ) {
+            // release resources so that they can be GC'ed
+            activation.getPropagationContext().releaseResources();
+        }
         // Nowretract any trace  of the original fact
         final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
                                                                                   PropagationContext.MODIFICATION,
@@ -1112,6 +1123,10 @@
 
             this.handleFactory.increaseFactHandleRecency( handle );
 
+            if( activation != null ) {
+                // release resources so that they can be GC'ed
+                activation.getPropagationContext().releaseResources();
+            }
             // Nowretract any trace  of the original fact
             final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
                                                                                       PropagationContext.MODIFICATION,
@@ -1174,6 +1189,10 @@
                 return;
             }
 
+            if( activation != null ) {
+                // release resources so that they can be GC'ed
+                activation.getPropagationContext().releaseResources();
+            }
             // Nowretract any trace  of the original fact
             final PropagationContext propagationContext = new PropagationContextImpl( this.propagationIdCounter++,
                                                                                       PropagationContext.MODIFICATION,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PropagationContextImpl.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -28,9 +28,9 @@
     PropagationContext {
     private final int        type;
 
-    private final Rule       rule;
+    private Rule       rule;
 
-    private final Activation activation;
+    private Activation activation;
 
     private final long       propagationNumber;
 
@@ -139,4 +139,10 @@
     public void clearRetractedTuples() {
         this.retracted = null;
     }
+
+    public void releaseResources() {
+        this.activation = null;
+        this.retracted = null;
+        this.rule = null;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -98,4 +98,5 @@
     public RuleFlowGroupNode getRuleFlowGroupNode();
 
     public void setRuleFlowGroupNode(RuleFlowGroupNode ruleFlowGroupNode);
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PropagationContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PropagationContext.java	2007-07-12 19:40:17 UTC (rev 13421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PropagationContext.java	2007-07-12 19:41:14 UTC (rev 13422)
@@ -49,5 +49,7 @@
                                            ReteTuple tuple);
 
     public void clearRetractedTuples();
+    
+    public void releaseResources();
 
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list