[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