[jboss-svn-commits] JBL Code SVN: r26517 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 13 18:26:14 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-05-13 18:26:14 -0400 (Wed, 13 May 2009)
New Revision: 26517

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
JBRULES-2048  object references are not shared when deserialized
-unable to fix this, but added failing test for now.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2009-05-13 21:18:49 UTC (rev 26516)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2009-05-13 22:26:14 UTC (rev 26517)
@@ -7,8 +7,10 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.ArrayList;
@@ -41,6 +43,8 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
 import org.drools.common.BaseNode;
+import org.drools.common.DroolsObjectInputStream;
+import org.drools.common.DroolsObjectOutputStream;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.compiler.PackageBuilder;
@@ -51,6 +55,8 @@
 import org.drools.io.ResourceFactory;
 import org.drools.marshalling.Marshaller;
 import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
 import org.drools.marshalling.impl.DefaultMarshaller;
 import org.drools.marshalling.impl.RuleBaseNodes;
 import org.drools.reteoo.ObjectTypeNode;
@@ -64,7 +70,7 @@
 import org.drools.util.DroolsStreamUtils;
 
 public class MarshallingTest extends TestCase {
-    
+
     public void testSerializable() throws Exception {
 
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
@@ -509,9 +515,10 @@
 
         // serialize session and rulebase out
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
 
         GlobalResolver resolver = session.getGlobalResolver();
@@ -520,10 +527,12 @@
 
         // now deserialize the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
-        
+
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         session.setGlobalResolver( resolver );
 
         // dynamically add a new package
@@ -543,23 +552,21 @@
         results = (List) session.getGlobal( "results" );
         assertEquals( 4,
                       results.size() );
-        
+
         assertEquals( stilton2.getObject(),
                       results.get( 1 ) );
-        
 
         assertEquals( mark.getObject(),
                       results.get( 2 ) );
-        
+
         assertEquals( bob.getObject(),
                       results.get( 3 ) );
 
-
         serializedRulebase = null;
 
         session = SerializationHelper.getSerialisedStatefulSession( session,
                                                                     ruleBase );
-        
+
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
         // dispose session
@@ -596,14 +603,15 @@
         session.fireAllRules();
 
         GlobalResolver resolver = session.getGlobalResolver();
-        
+
         // serialize session and rulebase out
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
-        
+
         byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
         session.dispose();
@@ -616,8 +624,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         session.setGlobalResolver( resolver );
 
         results = (List) session.getGlobal( "results" );
@@ -636,15 +646,15 @@
         session.fireAllRules();
         assertEquals( 5,
                       results.size() );
-        
+
         assertEquals( stilton2.getObject(),
                       results.get( 1 ) );
-   
+
         assertEquals( brie3.getObject(),
                       results.get( 2 ) );
         assertEquals( brie2.getObject(),
                       results.get( 3 ) );
-        
+
         assertEquals( brie1.getObject(),
                       results.get( 4 ) );
 
@@ -678,13 +688,14 @@
         InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
                                                                                     10 ) );
         session.fireAllRules();
-        
+
         GlobalResolver resolver = session.getGlobalResolver();
-        
+
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
@@ -698,8 +709,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         session.setGlobalResolver( resolver );
         results = (List) session.getGlobal( "results" );
 
@@ -732,9 +745,10 @@
 
         resolver = session.getGlobalResolver();
         baos = new ByteArrayOutputStream();
-        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
@@ -743,8 +757,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         session.setGlobalResolver( resolver );
         results = (List) session.getGlobal( "results" );
 
@@ -783,9 +799,10 @@
 
         resolver = session.getGlobalResolver();
         baos = new ByteArrayOutputStream();
-        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
         session.dispose();
@@ -793,8 +810,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         session.setGlobalResolver( resolver );
         results = (List) session.getGlobal( "results" );
 
@@ -864,11 +883,12 @@
         session.fireAllRules();
 
         GlobalResolver resolver = session.getGlobalResolver();
-        
+
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
@@ -882,8 +902,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         results.clear();
         session.setGlobal( "results",
                            results );
@@ -916,9 +938,10 @@
         serializedRulebase = null;
 
         baos = new ByteArrayOutputStream();
-        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
@@ -927,8 +950,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         results.clear();
         session.setGlobal( "results",
                            results );
@@ -957,8 +982,10 @@
         // now recreate the rulebase, deserialize the session and test it
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         results.clear();
         session.setGlobal( "results",
                            results );
@@ -986,9 +1013,10 @@
         byte[] serializedSession = null;
         serializedRulebase = null;
         baos = new ByteArrayOutputStream();
-        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+        ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
         marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-        marshaller.marshall( baos, ksession );
+        marshaller.marshall( baos,
+                             ksession );
         baos.close();
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
@@ -996,8 +1024,10 @@
         // Deserialize the rulebase and the session 
         ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
         marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
-        ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
-        session =  (ReteooStatefulSession ) ksession.session;
+        ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+                                                                         KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+                                                                         EnvironmentFactory.newEnvironment() );
+        session = (ReteooStatefulSession) ksession.session;
         results.clear();
         session.setGlobal( "results",
                            results );
@@ -1024,7 +1054,7 @@
 
         session = SerializationHelper.getSerialisedStatefulSession( session,
                                                                     ruleBase );
-        
+
         serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
 
         session.dispose();
@@ -1472,63 +1502,83 @@
         rule1 += "end\n";
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
-        
+        kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1).getBytes() ),
+                      ResourceType.DRL );
+
         if ( kbuilder.hasErrors() ) {
             fail( kbuilder.getErrors().toString() );
         }
-        
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
 
-
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List list = new ArrayList();
         ksession.setGlobal( "list",
-                           list );
+                            list );
 
         // add a person, no cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Person bobba = new Person( "bobba fet",
                                    50 );
         ksession.insert( bobba );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 1,
                       list.size() );
 
         // add another person, no cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Person darth = new Person( "darth vadar",
                                    200 );
         ksession.insert( darth );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 2,
                       list.size() );
 
         // add cheese 
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Cheese stilton = new Cheese( "stilton",
                                      5 );
         ksession.insert( stilton );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 2,
                       list.size() );
 
         // remove cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.retract( ksession.getFactHandle( stilton ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         // put 2 cheeses back in
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.insert( stilton );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Cheese brie = new Cheese( "brie",
                                   18 );
         ksession.insert( brie );
@@ -1538,21 +1588,27 @@
 
         // now remove a cheese, should be no change
         ksession.retract( ksession.getFactHandle( stilton ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         // now remove a person, should be no change
         ksession.retract( ksession.getFactHandle( bobba ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         //removal remaining cheese, should increase by one, as one person left
         ksession.retract( ksession.getFactHandle( brie ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 5,
                       list.size() );
@@ -1575,63 +1631,83 @@
         rule1 += "end\n";
 
         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
-        
+        kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1).getBytes() ),
+                      ResourceType.DRL );
+
         if ( kbuilder.hasErrors() ) {
             fail( kbuilder.getErrors().toString() );
         }
-        
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
 
-
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List list = new ArrayList();
         ksession.setGlobal( "list",
-                           list );
+                            list );
 
         // add a person, no cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Person bobba = new Person( "bobba fet",
                                    50 );
         ksession.insert( bobba );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 0,
                       list.size() );
 
         // add another person, no cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Person darth = new Person( "darth vadar",
                                    200 );
         ksession.insert( darth );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 0,
                       list.size() );
 
         // add cheese 
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Cheese stilton = new Cheese( "stilton",
                                      5 );
         ksession.insert( stilton );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 2,
                       list.size() );
 
         // remove cheese
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.retract( ksession.getFactHandle( stilton ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 2,
                       list.size() );
 
         // put 2 cheeses back in
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.insert( stilton );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         Cheese brie = new Cheese( "brie",
                                   18 );
         ksession.insert( brie );
@@ -1641,27 +1717,35 @@
 
         // now remove a cheese, should be no change
         ksession.retract( ksession.getFactHandle( stilton ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         // now remove a person, should be no change
         ksession.retract( ksession.getFactHandle( bobba ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         //removal remaining cheese, no
         ksession.retract( ksession.getFactHandle( brie ) );
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.fireAllRules();
         assertEquals( 4,
                       list.size() );
 
         // put one cheese back in, with one person should increase by one
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          MarshallerFactory.newIdentityMarshallingStrategy(),
+                                                          true );
         ksession.insert( stilton );
         ksession.fireAllRules();
         assertEquals( 5,
@@ -2074,6 +2158,69 @@
                       session.getAgenda().getActivations().length );
     }
 
+    /**
+     * test that creates a new knowledge base, new stateful session, inserts new
+     * fact, serializes the knowledge base and session and fact using one output
+     * stream then deserializes and verifies that fact in the session is the
+     * same as fact that was deserialized,
+     * 
+     * from the ObjectOutputStream API: "Multiple references to a single object
+     * are encoded using a reference sharing mechanism so that graphs of objects
+     * can be restored to the same shape as when the original was written."
+     * 
+     * @see JBRULES-2048
+     * 
+     * @throws Exception
+     */
+    public void FIXME_testDroolsObjectOutputInputStream() throws Exception {
+        Person bob = new Person();
+
+        KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        knowledgeBuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_Serializable.drl" ),
+                              ResourceType.DRL );
+
+        KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
+        knowledgeBase.addKnowledgePackages( knowledgeBuilder.getKnowledgePackages() );
+
+        StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession();
+        session.insert( bob );
+
+        assertSame( "these two object references should be same",
+                    bob,
+                    session.getObjects().iterator().next() );
+
+        Marshaller marshaller = createSerializableMarshaller( knowledgeBase );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new DroolsObjectOutputStream( baos );
+        out.writeObject( bob );
+        out.writeObject( knowledgeBase );
+        marshaller.marshall( out,
+                             session );
+        out.flush();
+        out.close();
+
+        ObjectInputStream in = new DroolsObjectInputStream( new ByteArrayInputStream( baos.toByteArray() ) );
+        Person deserializedBob = (Person) in.readObject();
+        knowledgeBase = (KnowledgeBase) in.readObject();
+        marshaller = createSerializableMarshaller( knowledgeBase );
+        session = marshaller.unmarshall( in );
+        assertSame( "these two object references should be same",
+                    deserializedBob,
+                    session.getObjects().iterator().next() );
+        in.close();
+    }
+    
+    
+
+    private Marshaller createSerializableMarshaller(KnowledgeBase knowledgeBase) {
+        ObjectMarshallingStrategyAcceptor acceptor = MarshallerFactory.newClassFilterAcceptor( new String[]{"*.*"} );
+        ObjectMarshallingStrategy strategy = MarshallerFactory.newSerializeMarshallingStrategy( acceptor );
+        Marshaller marshaller = MarshallerFactory.newMarshaller( knowledgeBase,
+                                                                 new ObjectMarshallingStrategy[]{strategy} );
+        return marshaller;
+    }
+
     protected RuleBase getRuleBase() throws Exception {
 
         return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,

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	2009-05-13 21:18:49 UTC (rev 26516)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-05-13 22:26:14 UTC (rev 26517)
@@ -1944,17 +1944,23 @@
 
         RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        ruleBase = SerializationHelper.serializeObject( ruleBase );
+        
+        //ruleBase = SerializationHelper.serializeObject( ruleBase );
         StatefulSession session = ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stinky",
                                            5 );
         session.insert( stilton );
-        session = SerializationHelper.getSerialisedStatefulSession( session,
-                                                                    ruleBase );
-        final QueryResults results = session.getQueryResults( "simple query" );
-        assertEquals( 1,
-                      results.size() );
+//        session = SerializationHelper.getSerialisedStatefulSession( session,
+//                                                                    ruleBase );
+        for ( int i = 0; i < 10000; i++) {
+	        final QueryResults results = session.getQueryResults( "simple query" );
+	        assertEquals( 1,
+	                      results.size() );
+	        System.gc();
+	        Thread.sleep( 200 );
+        }
+        
     }
 
     public void testEval() throws Exception {




More information about the jboss-svn-commits mailing list