[jboss-svn-commits] JBL Code SVN: r16398 - in labs/jbossrules/branches/4.0.x: drools-core/src/main/java/org/drools/reteoo and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Nov 6 23:08:55 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-11-06 23:08:55 -0500 (Tue, 06 Nov 2007)
New Revision: 16398

Modified:
   labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
Log:
JBRULES-1316 Serialising Both the RuleBase and WorkingMemory throws null pointer

Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-11-07 03:55:25 UTC (rev 16397)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-11-07 04:08:55 UTC (rev 16398)
@@ -1809,7 +1809,86 @@
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
     }
+    
+    public void testSerializeWorkingMemoryAndRuleBase() 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().getErrors().length );
+
+        RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+        
+        Map map = new HashMap();
+        map.put( "x", ruleBase );
+        final byte[] ast = serializeOut( map );
+        map = (Map) serializeIn( ast );
+        ruleBase = (RuleBase) map.get( "x" );
+
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        
+        final byte[] wm = serializeOut( workingMemory );
+
+        workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+        ruleBase.addPackage( pkg );
+
+        workingMemory.setGlobal( "list", 
+                new ArrayList() );
+        
+
+        final Person bob = new Person( "bob" );
+        workingMemory.insert( bob );
+
+
+        
+        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() );
+
+        
+
+        assertEquals( 1,
+                      IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+        assertEquals( bob,
+                      IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+        assertEquals( 2,
+                      workingMemory.getAgenda().agendaSize() );
+
+        workingMemory.fireAllRules();
+
+        final List list = (List) workingMemory.getGlobal( "list" );
+
+        assertEquals( 3,
+                      list.size() );
+        // because of agenda-groups
+        assertEquals( new Integer( 4 ),
+                      list.get( 0 ) );
+
+        assertEquals( 2,
+                      IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+        assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
+        assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
+
+    }    
+
     public void testEmptyRule() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyRule.drl" ) ) );

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2007-11-07 03:55:25 UTC (rev 16397)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2007-11-07 04:08:55 UTC (rev 16398)
@@ -95,6 +95,7 @@
                                                      ClassNotFoundException {
         stream.defaultReadObject();
         this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
+        this.ruleBuilder = new ReteooRuleBuilder();        
     }
 
     // ------------------------------------------------------------




More information about the jboss-svn-commits mailing list