From: <jbo...@li...> - 2006-06-06 10:47:04
|
Author: mar...@jb... Date: 2006-06-06 06:46:47 -0400 (Tue, 06 Jun 2006) New Revision: 4639 Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ConflictResolver.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsRule.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsWorkingMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/CompositeConflictResolver.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/LoadOrderConflictResolver.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleComplexityConflictResolver.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleSalienceConflictResolver.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/util/TokenStack.java Log: JBRULES-285 WorkingMemory is not serializable -Updated leaps to be serializable Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -1688,13 +1688,8 @@ } - public void testSerializable() throws Exception { -// PrimitiveLongMap longMap = new PrimitiveLongMap(8, 32); -// -// final byte[] map = serializeOut( longMap ); -// longMap = (PrimitiveLongMap) serializeIn( map ); + public void testSerializable() throws Exception { - final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) ); final PackageBuilder builder = new PackageBuilder(); @@ -1727,7 +1722,7 @@ workingMemory.setGlobal( "list", new ArrayList() ); - workingMemory.assertObject( new Integer(5) ); + workingMemory.assertObject( new Integer(5) ); final byte[] wm = serializeOut( workingMemory ); @@ -1747,8 +1742,7 @@ assertEquals( 2, workingMemory.getObjects().size() ); assertEquals( new Integer( 5 ) , workingMemory.getObjects().get(0) ); - assertEquals( "help" , workingMemory.getObjects().get(1) ); - + assertEquals( "help" , workingMemory.getObjects().get(1) ); } public void testLogicalAssertions() throws Exception { @@ -2270,7 +2264,7 @@ assertTrue( list.contains( "fired3" ) ); } - private Object serializeIn(final byte[] bytes) throws IOException, + protected Object serializeIn(final byte[] bytes) throws IOException, ClassNotFoundException { final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) ); final Object obj = in.readObject(); @@ -2278,7 +2272,7 @@ return obj; } - private byte[] serializeOut(final Object obj) throws IOException { + protected byte[] serializeOut(final Object obj) throws IOException { // Serialize to a byte array final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final ObjectOutput out = new ObjectOutputStream( bos ); Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,7 +16,9 @@ * limitations under the License. */ +import java.io.ByteArrayInputStream; import java.io.InputStreamReader; +import java.io.Reader; import java.util.ArrayList; import java.util.List; @@ -28,6 +30,7 @@ import org.drools.WorkingMemory; import org.drools.compiler.PackageBuilder; import org.drools.rule.Package; +import org.drools.rule.Rule; /** * This runs the integration test cases with the leaps implementation. @@ -229,6 +232,61 @@ leapsRuleBase.removePackage( "org.drools.test" ); assertEquals( 0, workingMemory.getAgenda( ).getActivations( ).length ); + } + + public void testSerializable() throws Exception { + + final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) ); + final PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( reader ); + final Package pkg = builder.getPackage(); + + assertEquals( 0, + builder.getErrors().length ); + + RuleBase ruleBase = getRuleBase();//RuleBaseFactory.newRuleBase(); + + ruleBase.addPackage( pkg ); + + final byte[] ast = serializeOut( ruleBase ); + ruleBase = (RuleBase) serializeIn( ast ); + final Rule[] rules = ruleBase.getPackages()[0].getRules(); + assertEquals( 4, + rules.length ); + + assertEquals( "match Person 1", + rules[0].getName() ); + assertEquals( "match Person 2", + rules[1].getName() ); + assertEquals( "match Person 3", + rules[2].getName() ); + assertEquals( "match Integer", + rules[3].getName() ); + + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + workingMemory.setGlobal( "list", new ArrayList() ); + + workingMemory.assertObject( new Integer(5) ); + + final byte[] wm = serializeOut( workingMemory ); + + workingMemory = ruleBase.newWorkingMemory( new ByteArrayInputStream( wm ) ); + + assertEquals( 1, workingMemory.getObjects().size() ); + assertEquals( new Integer( 5 ) , workingMemory.getObjects().get(0) ); + + workingMemory.fireAllRules(); + + List list = ( List ) workingMemory.getGlobal( "list" ); + + assertEquals( 1, list.size() ); + assertEquals( new Integer( 4 ), list.get( 0 ) ); + + assertEquals( 2, workingMemory.getObjects().size() ); + assertEquals( new Integer( 5 ) , workingMemory.getObjects().get(0) ); + assertEquals( "help" , workingMemory.getObjects().get(1) ); } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ColumnConstraints.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.List; import org.drools.WorkingMemory; @@ -32,7 +33,7 @@ * @author Alexander Bagerman * */ -public class ColumnConstraints { +public class ColumnConstraints implements Serializable { private Class classType; private final FieldConstraint[] alphaConstraints; Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ConflictResolver.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ConflictResolver.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/ConflictResolver.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.Comparator; /** @@ -25,7 +26,7 @@ * @author Alexander Bagerman * */ -public interface ConflictResolver { +public interface ConflictResolver extends Serializable { public Comparator getFactConflictResolver(); public Comparator getRuleConflictResolver(); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsRule.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsRule.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsRule.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.ArrayList; import org.drools.common.AgendaGroupImpl; @@ -29,7 +30,7 @@ * @author Alexander Bagerman * */ -class LeapsRule { +class LeapsRule implements Serializable { Rule rule; final ColumnConstraints[] columnConstraints; Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsWorkingMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsWorkingMemory.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsWorkingMemory.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -17,6 +17,7 @@ */ import java.beans.PropertyChangeListener; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -808,65 +809,66 @@ /** * to store facts to cursor over it */ - private final Map factTables = new Map( ) { - private LinkedList tables = new LinkedList( ); + private final Map factTables = new FactTables(); + + class FactTables implements Map, Serializable { + private LinkedList tables = new LinkedList( ); - private HashMap map = new HashMap( ); + private HashMap map = new HashMap( ); - public int size() { - return this.tables.size( ); - } + public int size() { + return this.tables.size( ); + } - public void clear() { - this.tables.clear( ); - this.map.clear( ); - } + public void clear() { + this.tables.clear( ); + this.map.clear( ); + } - public boolean isEmpty() { - return this.tables.isEmpty( ); - } + public boolean isEmpty() { + return this.tables.isEmpty( ); + } - public boolean containsKey( Object key ) { - return this.map.containsKey( key ); - } + public boolean containsKey( Object key ) { + return this.map.containsKey( key ); + } - public boolean containsValue( Object value ) { - return this.map.containsValue( value ); - } + public boolean containsValue( Object value ) { + return this.map.containsValue( value ); + } - public Collection values() { - return this.tables; - } + public Collection values() { + return this.tables; + } - public void putAll( Map t ) { - this.tables.addAll( t.values( ) ); - this.map.putAll( t ); - } + public void putAll( Map t ) { + this.tables.addAll( t.values( ) ); + this.map.putAll( t ); + } - public Set entrySet() { - return this.map.entrySet( ); - } + public Set entrySet() { + return this.map.entrySet( ); + } - public Set keySet() { - return this.map.keySet( ); - } + public Set keySet() { + return this.map.keySet( ); + } - public Object get( Object key ) { - return this.map.get( key ); + public Object get( Object key ) { + return this.map.get( key ); - } + } - public Object remove( Object key ) { - Object ret = this.map.remove( key ); - this.tables.remove( ret ); - return ret; - } + public Object remove( Object key ) { + Object ret = this.map.remove( key ); + this.tables.remove( ret ); + return ret; + } - public Object put( Object key, Object value ) { - this.tables.add( value ); - this.map.put( key, value ); - return value; - } - }; - + public Object put( Object key, Object value ) { + this.tables.add( value ); + this.map.put( key, value ); + return value; + } + } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/CompositeConflictResolver.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/CompositeConflictResolver.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/CompositeConflictResolver.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.Comparator; /** @@ -46,34 +47,39 @@ } public final Comparator getFactConflictResolver() { - return new Comparator() { - public int compare(final Object o1, - final Object o2) { - int ret = 0; - if ( o1 != o2 ) { - for ( int i = 0, length = CompositeConflictResolver.this.factResolvers.length; ret == 0 && i < length; ++i ) { - ret = CompositeConflictResolver.this.factResolvers[i].compare( o1, - o2 ); - } + return new FactConflictResolver(); + } + + class FactConflictResolver implements Comparator, Serializable { + public int compare(final Object o1, + final Object o2) { + int ret = 0; + if ( o1 != o2 ) { + for ( int i = 0, length = CompositeConflictResolver.this.factResolvers.length; ret == 0 && i < length; ++i ) { + ret = CompositeConflictResolver.this.factResolvers[i].compare( o1, + o2 ); } - return ret; } - }; + return ret; + } } public final Comparator getRuleConflictResolver() { - return new Comparator() { - public int compare(final Object o1, - final Object o2) { - int ret = 0; - if ( o1 != o2 ) { - for ( int i = 0, length = CompositeConflictResolver.this.ruleResolvers.length; ret == 0 && i < length; ++i ) { - ret = CompositeConflictResolver.this.ruleResolvers[i].compare( o1, - o2 ); - } + return new RuleConflictResolver(); + } + + class RuleConflictResolver implements Comparator, Serializable { + public int compare(final Object o1, + final Object o2) { + int ret = 0; + if ( o1 != o2 ) { + for ( int i = 0, length = CompositeConflictResolver.this.factResolvers.length; ret == 0 && i < length; ++i ) { + ret = CompositeConflictResolver.this.factResolvers[i].compare( o1, + o2 ); } - return ret; } - }; + return ret; + } } + } \ No newline at end of file Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/LoadOrderConflictResolver.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/LoadOrderConflictResolver.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/LoadOrderConflictResolver.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.Comparator; import org.drools.common.DefaultFactHandle; @@ -32,7 +33,8 @@ */ public class LoadOrderConflictResolver implements - Comparator { + Comparator, + Serializable { /** Singleton instance. */ private static final LoadOrderConflictResolver INSTANCE = new LoadOrderConflictResolver(); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleComplexityConflictResolver.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleComplexityConflictResolver.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleComplexityConflictResolver.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.Comparator; import org.drools.leaps.LeapsRuleHandle; @@ -31,7 +32,8 @@ */ class RuleComplexityConflictResolver implements - Comparator { + Comparator, + Serializable { /** Singleton instance. */ private static final RuleComplexityConflictResolver INSTANCE = new RuleComplexityConflictResolver(); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleSalienceConflictResolver.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleSalienceConflictResolver.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/conflict/RuleSalienceConflictResolver.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.Comparator; import org.drools.leaps.LeapsRuleHandle; @@ -32,7 +33,8 @@ */ class RuleSalienceConflictResolver implements - Comparator { + Comparator, + Serializable { /** Singleton instance. */ private static final RuleSalienceConflictResolver INSTANCE = new RuleSalienceConflictResolver(); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/util/TokenStack.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/util/TokenStack.java 2006-06-06 09:59:25 UTC (rev 4638) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/util/TokenStack.java 2006-06-06 10:46:47 UTC (rev 4639) @@ -16,6 +16,7 @@ * limitations under the License. */ +import java.io.Serializable; import java.util.EmptyStackException; import java.util.Iterator; @@ -30,7 +31,7 @@ * */ -public class TokenStack { +public class TokenStack implements Serializable { protected TableRecord tailRecord = null; |