[jboss-svn-commits] JBL Code SVN: r27314 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jun 29 18:34:51 EDT 2009


Author: tirelli
Date: 2009-06-29 18:34:51 -0400 (Mon, 29 Jun 2009)
New Revision: 27314

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableAccumulate.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java
Log:
JBRULES-2149: fixing CCE

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-06-29 22:12:15 UTC (rev 27313)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2009-06-29 22:34:51 UTC (rev 27314)
@@ -1,16 +1,13 @@
 package org.drools.integrationtests;
 
+import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulKnowledgeSession;
 import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulSession;
-import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulKnowledgeSession;
 
 import java.io.ByteArrayInputStream;
 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;
@@ -57,7 +54,6 @@
 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;
 import org.drools.reteoo.ReteooStatefulSession;
@@ -2183,9 +2179,10 @@
                                      20 ) );
         ksession.insert( new Person( "Bob",
                                      "brie" ) );
-        
-        ksession = getSerialisedStatefulKnowledgeSession( ksession, true );
 
+        ksession = getSerialisedStatefulKnowledgeSession( ksession,
+                                                          true );
+
         ksession.fireAllRules();
 
         assertEquals( 1,
@@ -2246,9 +2243,72 @@
                     session.getObjects().iterator().next() );
         in.close();
     }
-    
-    
 
+    public void testAccumulateSerialization() {
+        try {
+            KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+            knowledgeBuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_SerializableAccumulate.drl" ),
+                                  ResourceType.DRL );
+
+            if( knowledgeBuilder.hasErrors() ) {
+                fail( knowledgeBuilder.getErrors().toString() );
+            }
+            
+            KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
+            knowledgeBase.addKnowledgePackages( knowledgeBuilder.getKnowledgePackages() );
+            StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
+            ksession.setGlobal( "results",
+                                new ArrayList() );
+
+            Cheese t1 = new Cheese( "brie",
+                                    10 );
+            Cheese t2 = new Cheese( "brie",
+                                    15 );
+            Cheese t3 = new Cheese( "stilton",
+                                    20 );
+            Cheese t4 = new Cheese( "brie",
+                                    30 );
+
+            ksession.insert( t1 );
+            ksession.insert( t2 );
+            ksession.insert( t3 );
+            ksession.insert( t4 );
+            
+            //ksession.fireAllRules();
+            Marshaller marshaller = createSerializableMarshaller( knowledgeBase );
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            ObjectOutputStream out = new DroolsObjectOutputStream( baos );
+            out.writeObject( knowledgeBase );
+            marshaller.marshall( out,
+                                 ksession );
+            out.flush();
+            out.close();
+
+            ObjectInputStream in = new DroolsObjectInputStream( new ByteArrayInputStream( baos.toByteArray() ) );
+            knowledgeBase = (KnowledgeBase) in.readObject();
+            marshaller = createSerializableMarshaller( knowledgeBase );
+            ksession = marshaller.unmarshall( in );
+            in.close();
+
+            // setting the global again, since it is not serialized with the session
+            List<List> results = (List<List>) new ArrayList<List>();
+            ksession.setGlobal( "results", results );
+            assertNotNull( results );
+            
+            ksession.fireAllRules();
+            ksession.dispose();
+
+            assertEquals( 1,
+                          results.size() );
+            assertEquals( 3,
+                          results.get( 0 ).size() );
+
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            fail(e.getMessage());
+        }
+    }
+
     private Marshaller createSerializableMarshaller(KnowledgeBase knowledgeBase) {
         ObjectMarshallingStrategyAcceptor acceptor = MarshallerFactory.newClassFilterAcceptor( new String[]{"*.*"} );
         ObjectMarshallingStrategy strategy = MarshallerFactory.newSerializeMarshallingStrategy( acceptor );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableAccumulate.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableAccumulate.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_SerializableAccumulate.drl	2009-06-29 22:34:51 UTC (rev 27314)
@@ -0,0 +1,17 @@
+package org.drools
+
+import java.util.List
+
+global List results
+
+rule "test accumulate serialization"
+when
+    $total : List() from accumulate( 
+         $c : Cheese( type == "brie" ),
+         init( java.util.ArrayList s = new java.util.ArrayList(); ),
+         action( s.add($c); ),
+         reverse( s.remove($c); ),
+         result( s ) )
+then
+    results.add( $total );
+end

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java	2009-06-29 22:12:15 UTC (rev 27313)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java	2009-06-29 22:34:51 UTC (rev 27314)
@@ -6,6 +6,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -68,4 +69,15 @@
         this.marshalProcessInstances = marshalProcessInstances;
         this.marshalWorkItems = marshalWorkItems;
     }
+    
+    @Override
+    protected Class< ? > resolveClass(ObjectStreamClass desc) throws IOException,
+                                                             ClassNotFoundException {
+        String name = desc.getName();
+        try {
+            return Class.forName(name, false, this.ruleBase.getRootClassLoader());
+        } catch (ClassNotFoundException ex) {
+            return super.resolveClass( desc );
+        }        
+    }
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list