[jboss-svn-commits] JBL Code SVN: r19220 - in labs/jbossrules/branches/4.0.x: drools-compiler/src/test/java/org/drools/integrationtests/waltz and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Mar 24 15:14:33 EDT 2008


Author: tirelli
Date: 2008-03-24 15:14:33 -0400 (Mon, 24 Mar 2008)
New Revision: 19220

Added:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableCollectAccumulate.drl
Modified:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Waltz.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
Log:
JBRULES-1522: adding tests and fixes for collect and accumulate serialization

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2008-03-24 13:40:47 UTC (rev 19219)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2008-03-24 19:14:33 UTC (rev 19220)
@@ -101,6 +101,75 @@
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
     }
 
+    public void testSerializableCollectAccumulate() throws Exception {
+
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_SerializableCollectAccumulate.drl" ) );
+
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( reader );
+        final Package pkg = serialisePackage( builder.getPackage() );
+
+        assertEquals( builder.getErrors().toString(),
+                      0,
+                      builder.getErrors().getErrors().length );
+
+        RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+        ruleBase.addPackage( pkg );
+
+        Map map = new HashMap();
+        map.put( "x",
+                 ruleBase );
+        final byte[] ast = serializeOut( map );
+        map = (Map) serializeIn( ast );
+        ruleBase = (RuleBase) map.get( "x" );
+        final Rule[] rules = ruleBase.getPackages()[0].getRules();
+        assertEquals( 2,
+                      rules.length );
+
+        assertEquals( "collect",
+                      rules[0].getName() );
+        assertEquals( "accumulate",
+                      rules[1].getName() );
+
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        workingMemory.setGlobal( "list",
+                                 new ArrayList() );
+
+        final Person bob = new Person( "bob", "stilton" );
+        final Cheese c1 = new Cheese( "stilton", 10 );
+        final Cheese c2 = new Cheese( "brie", 8 );
+        final Cheese c3 = new Cheese( "stilton", 5 );
+        workingMemory.insert( bob );
+        workingMemory.insert( c1 );
+        workingMemory.insert( c2 );
+        workingMemory.insert( c3 );
+
+        final byte[] wm = serializeOut( workingMemory );
+
+        workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+        assertEquals( 4,
+                      IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+
+        assertEquals( 2,
+                      workingMemory.getAgenda().agendaSize() );
+
+        workingMemory.fireAllRules();
+
+        final List list = (List) workingMemory.getGlobal( "list" );
+
+        assertEquals( 2,
+                      list.size() );
+        // because of agenda-groups
+        assertEquals( 2,
+                      ((List) list.get( 0 )).size() );
+        assertEquals( 15,
+                      ((Number) list.get( 1 )).intValue() );
+
+    }
+
     public void testSerializeWorkingMemoryAndRuleBase1() throws Exception {
         // has the first newStatefulSession before the ruleBase is serialised
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
@@ -869,7 +938,32 @@
         serializedRulebase = serializeOut( ruleBase );
         
         session.dispose();
+        
+        ruleBase = (RuleBase) serializeIn( serializedRulebase );
+        session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );    //  throws java.lang.ClassNotFoundException Exception
+        results = (List) session.getGlobal( "results" );
+             
+        InternalFactHandle stilton5 = (InternalFactHandle) session.insert( new Cheese( "stilton", 30 ) );
+        InternalFactHandle brie5 = (InternalFactHandle) session.insert( new Cheese( "brie", 30 ) );
+        InternalFactHandle bob7 = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
+        InternalFactHandle bob8 = (InternalFactHandle) session.insert( new Person( "bob", 40 ) );
+        session.fireAllRules();
+ 
+        assertEquals( 8,
+                      results.size() );
+        assertEquals( bob7.getObject(),
+                      results.get( 6 ) );
+        assertEquals( bob8.getObject(),
+                      results.get( 7 ) );
        
+        serializedSession = null;
+        serializedRulebase = null;
+       
+        serializedSession = serializeOut( session );
+        serializedRulebase = serializeOut( ruleBase );
+       
+        session.dispose();        
+       
     }
     
     protected RuleBase getRuleBase() throws Exception {

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Waltz.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Waltz.java	2008-03-24 13:40:47 UTC (rev 19219)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Waltz.java	2008-03-24 19:14:33 UTC (rev 19220)
@@ -28,6 +28,7 @@
 import org.drools.PackageIntegrationException;
 import org.drools.RuleBase;
 import org.drools.RuleIntegrationException;
+import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
@@ -48,31 +49,24 @@
 
             //load up the rulebase
             final RuleBase ruleBase = readRule();
-            final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
-            workingMemory.setGlobal( "sysout",
-                                     System.out );
-
-            //            DebugWorkingMemoryEventListener wmListener = new DebugWorkingMemoryEventListener();
-            //            DebugAgendaEventListener agendaListener = new DebugAgendaEventListener();
-            //            workingMemory.addEventListener( wmListener );
-            //            workingMemory.addEventListener( agendaListener );
-
-            //go !     
-            this.loadLines( workingMemory,
-                            "waltz50.dat" );
-
-            //final Stage stage = new Stage( Stage.START );
-            //workingMemory.assertObject( stage );
-
-            final long start = System.currentTimeMillis();
-
-            final Stage stage = new Stage( Stage.DUPLICATE );
-            workingMemory.insert( stage );
-            workingMemory.fireAllRules();
-
-            final long end = System.currentTimeMillis();
-            System.out.println( end - start );
+            long total = 0;
+            for ( int i = 0; i < 5; i++ ) {
+                final StatefulSession workingMemory = ruleBase.newStatefulSession();
+                workingMemory.setGlobal( "sysout",
+                                         System.out );
+                //go !     
+                this.loadLines( workingMemory,
+                                "waltz50.dat" );
+                final long start = System.currentTimeMillis();
+                final Stage stage = new Stage( Stage.DUPLICATE );
+                workingMemory.insert( stage );
+                workingMemory.fireAllRules();
+                workingMemory.dispose();
+                final long end = System.currentTimeMillis();
+                total += end - start;
+                System.out.print( end - start + ", ");
+            }
+            System.out.println("Average: "+total/5+" ms");
         } catch ( final Throwable t ) {
             t.printStackTrace();
             fail( t.getMessage() );

Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableCollectAccumulate.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableCollectAccumulate.drl	                        (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableCollectAccumulate.drl	2008-03-24 19:14:33 UTC (rev 19220)
@@ -0,0 +1,24 @@
+package org.drools;
+
+import java.util.List
+import java.util.ArrayList
+
+global List list
+
+rule "collect"
+	salience 10
+    when
+        $p : Person( $likes : likes )
+        $c : ArrayList() from collect( Cheese( type == $likes ) )
+    then
+		list.add( $c );
+end    
+
+rule "accumulate"
+    when
+        $p : Person( $likes : likes )
+        $t : Number() from accumulate( Cheese( type == $likes, $price : price ),
+                                       sum( $price ) )
+    then
+		list.add( $t );
+end   

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java	2008-03-24 13:40:47 UTC (rev 19219)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java	2008-03-24 19:14:33 UTC (rev 19220)
@@ -17,7 +17,9 @@
  */
 package org.drools.base.accumulators;
 
+import java.io.Serializable;
 
+
 /**
  * An implementation of an accumulator capable of calculating sum of values
  * 
@@ -26,7 +28,10 @@
  */
 public class SumAccumulateFunction implements AccumulateFunction {
 
-    protected static class SumData {
+    private static final long serialVersionUID = 6022115234191211516L;
+
+    protected static class SumData implements Serializable {
+        private static final long serialVersionUID = 7364124958409617473L;
         public double total = 0;
     }
 

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-03-24 13:40:47 UTC (rev 19219)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-03-24 19:14:33 UTC (rev 19220)
@@ -16,6 +16,7 @@
 
 package org.drools.reteoo;
 
+import java.io.Serializable;
 import java.util.Arrays;
 
 import org.drools.RuleBaseConfiguration;
@@ -480,7 +481,7 @@
         return memory;
     }
 
-    public static class AccumulateMemory {
+    public static class AccumulateMemory implements Serializable {
         private static final long serialVersionUID = 400L;
         
         public Object workingMemoryContext;
@@ -489,7 +490,9 @@
         public ContextEntry[] alphaContexts;
     }
 
-    private static class AccumulateResult {
+    private static class AccumulateResult implements Serializable {
+
+        private static final long serialVersionUID = -7715967986163072228L;
         // keeping attributes public just for performance
         public InternalFactHandle handle;
         public Object             context;

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-03-24 13:40:47 UTC (rev 19219)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-03-24 19:14:33 UTC (rev 19220)
@@ -16,6 +16,7 @@
 
 package org.drools.reteoo;
 
+import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collection;
 
@@ -408,14 +409,16 @@
         return memory;
     }
 
-    public static class CollectMemory {
+    public static class CollectMemory implements Serializable {
         private static final long serialVersionUID = 400L;
         public BetaMemory         betaMemory;
         public ContextEntry[]     resultsContext;
         public ContextEntry[]     alphaContexts;
     }
 
-    private static class CollectResult {
+    private static class CollectResult implements Serializable {
+
+        private static final long serialVersionUID = -3553891852449175844L;
         // keeping attributes public just for performance
         public InternalFactHandle handle;
         public boolean            propagated;




More information about the jboss-svn-commits mailing list