[jboss-svn-commits] JBL Code SVN: r17405 - in labs/jbossrules/branches/serialization: drools-compiler/src/test/java/org/drools/compiler and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 26 06:18:20 EST 2007


Author: haruki_zaemon
Date: 2007-12-26 06:18:20 -0500 (Wed, 26 Dec 2007)
New Revision: 17405

Removed:
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java
Modified:
   labs/jbossrules/branches/serialization/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java
   labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
   labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java
   labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryInMemoryLogger.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassObjectType.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/SalienceInteger.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ValueType.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsSerializable.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Declaration.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/GroupElement.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/ImportDeclaration.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Package.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Pattern.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Rule.java
   labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
   labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/FileScannerTest.java
   labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/rule/LogicTransformerTest.java
   labs/jbossrules/branches/serialization/drools-core/src/test/resources/correct_transform1.dat
   labs/jbossrules/branches/serialization/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java
Log:
Fix some more tests (and some busted code in the process)

Modified: labs/jbossrules/branches/serialization/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -1,12 +1,12 @@
 /*
  * Copyright 2006 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -25,6 +25,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.RuntimeDroolsException;
+import org.drools.common.DroolsObjectOutputStream;
 import org.drools.brms.client.modeldriven.brl.RuleModel;
 import org.drools.brms.server.util.BRDRLPersistence;
 import org.drools.brms.server.util.BRXMLPersistence;
@@ -43,7 +44,7 @@
 
 /**
  * An ant task to allow rulebase compilation and serialization during a build.
- * 
+ *
  * @author etirelli
  */
 public class DroolsCompilerAntTask extends MatchingTask {
@@ -58,10 +59,10 @@
 	private File toFile;
 	private Path classpath;
 
-	
+
 	/**
 	 * Source directory to read DRL files from
-	 * 
+	 *
 	 * @param directory
 	 */
 	public void setSrcDir(File directory) {
@@ -70,7 +71,7 @@
 
 	/**
 	 * File to serialize the rulebase to
-	 * 
+	 *
 	 * @param toFile
 	 */
 	public void setToFile(File toFile) {
@@ -79,7 +80,7 @@
 
 	/**
 	 * The classpath to use when compiling the rulebase
-	 * 
+	 *
 	 * @param classpath
 	 */
 	public void setClasspath(Path classpath) {
@@ -88,7 +89,7 @@
 
 	/**
 	 * Classpath to use, by reference, when compiling the rulebase
-	 * 
+	 *
 	 * @param r
 	 *            a reference to an existing classpath
 	 */
@@ -98,7 +99,7 @@
 
 	/**
 	 * Adds a path to the classpath.
-	 * 
+	 *
 	 * @return created classpath
 	 */
 	public Path createClasspath() {
@@ -175,10 +176,10 @@
 	 */
 	private void serializeRulebase(RuleBase ruleBase)
 			throws FileNotFoundException, IOException {
-		ObjectOutputStream outstream = null;
+		DroolsObjectOutputStream outstream = null;
 		try {
 			FileOutputStream fout = new FileOutputStream(toFile);
-			outstream = new ObjectOutputStream(fout);
+			outstream = new DroolsObjectOutputStream(fout);
 			outstream.writeObject(ruleBase);
 		} finally {
 			if (outstream != null) {
@@ -218,7 +219,7 @@
 			} else {
 				instream = new InputStreamReader(new FileInputStream(file));
 			}
-            
+
             if (fileName.endsWith(DroolsCompilerAntTask.RULEFLOWFILEEXTENSION)) {
 				builder.addRuleFlow(instream);
 			} else if (fileName.endsWith(DroolsCompilerAntTask.XMLFILEEXTENSION)) {
@@ -355,7 +356,7 @@
 
 	/**
 	 * Returns the list of files to be added into the rulebase
-	 * 
+	 *
 	 * @return
 	 */
 	private String[] getFileList() {

Modified: labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -22,9 +22,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
-import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
 import java.io.StringReader;
 import java.lang.reflect.Field;
 import java.util.HashMap;
@@ -46,6 +44,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.LogicalDependency;
 import org.drools.common.RuleFlowGroupNode;
+import org.drools.common.DroolsObjectOutputStream;
 import org.drools.commons.jci.compilers.EclipseJavaCompiler;
 import org.drools.commons.jci.compilers.JaninoJavaCompiler;
 import org.drools.commons.jci.compilers.JavaCompiler;
@@ -279,7 +278,7 @@
     private byte[] serializeOut(final Object obj) throws IOException {
         // Serialize to a byte array
         final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new ObjectOutputStream( bos );
+        final ObjectOutput out = new DroolsObjectOutputStream( bos );
         out.writeObject( obj );
         out.close();
 
@@ -1210,7 +1209,7 @@
 
         //now serialization
         ByteArrayOutputStream data = new ByteArrayOutputStream();
-        ObjectOutputStream out = new ObjectOutputStream( data );
+        DroolsObjectOutputStream out = new DroolsObjectOutputStream( data );
         out.writeObject( pkg );
 
         DroolsObjectInputStream objIn = new DroolsObjectInputStream( new ByteArrayInputStream( data.toByteArray() ) );

Modified: labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -5,9 +5,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
-import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
 import java.io.Reader;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -28,6 +26,8 @@
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.rule.Package;
@@ -110,7 +110,7 @@
         ruleBase.addPackage( pkg3 );
 
         // Package 3 has a rule working on Person instances.
-        // As we added person instance in advance, rule should fire now       
+        // As we added person instance in advance, rule should fire now
 
         Assert.assertEquals( "Rule from package 3 should have been fired",
                              "match Person ok",
@@ -196,7 +196,7 @@
                                    "like cheese" );
 
         //        reteooRuleBase.removeRule( "org.drools.test",
-        //                                   "like cheese2" );        
+        //                                   "like cheese2" );
 
         final Cheese muzzarela = new Cheese( "muzzarela",
                                              5 );
@@ -257,7 +257,7 @@
     public void testDynamicFunction() throws Exception {
         PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction1.drl" ) ) );
-        
+
         //FIXME JBRULES-1258 serialising a package breaks function removal -- left the serialisation commented out for now
         //final Package pkg = serialisePackage( builder.getPackage() );
         final Package pkg = builder.getPackage();
@@ -527,7 +527,7 @@
             return c;
         }
     }
-    
+
     protected Package serialisePackage(Package pkg) {
         try {
         byte[] bytes = serializeOut( pkg );
@@ -539,7 +539,7 @@
 
     protected Object serializeIn(final byte[] bytes) throws IOException,
                                                     ClassNotFoundException {
-        final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
         final Object obj = in.readObject();
         in.close();
         return obj;
@@ -548,7 +548,7 @@
     protected byte[] serializeOut(final Object obj) throws IOException {
         // Serialize to a byte array
         final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new ObjectOutputStream( bos );
+        final ObjectOutput out = new DroolsObjectOutputStream( bos );
         out.writeObject( obj );
         out.close();
 

Modified: labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBase.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -4,12 +4,12 @@
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.StringReader;
 
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
@@ -80,7 +80,7 @@
 			f.delete();
 
 		time = System.currentTimeMillis();
-		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
+		DroolsObjectOutputStream out = new DroolsObjectOutputStream(new FileOutputStream(f));
 		out.writeObject(rb);
 		out.flush();
 		out.close();
@@ -88,7 +88,7 @@
 				+ (System.currentTimeMillis() - time));
 
 		time = System.currentTimeMillis();
-		ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
+		DroolsObjectInputStream in = new DroolsObjectInputStream(new FileInputStream(f));
 		RuleBase rb_ = (RuleBase) in.readObject();
 		System.err.println("Time taken de-serializing rulebase: "
 				+ (System.currentTimeMillis() - time));

Modified: labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -21,9 +21,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
-import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.math.BigDecimal;
@@ -80,6 +78,8 @@
 import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.base.ClassObjectFilter;
 import org.drools.common.AbstractWorkingMemory;
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;
@@ -1813,7 +1813,7 @@
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
     }
-    
+
     public void testSerializeWorkingMemoryAndRuleBase1() throws Exception {
         // has the first newStatefulSession before the ruleBase is serialised
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
@@ -1827,8 +1827,8 @@
 
         RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
 
-        WorkingMemory workingMemory = ruleBase.newStatefulSession();        
-        
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
         Map map = new HashMap();
         map.put( "x", ruleBase );
         final byte[] ast = serializeOut( map );
@@ -1837,25 +1837,25 @@
 
 
 
-        
+
         final byte[] wm = serializeOut( workingMemory );
 
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
         ruleBase.addPackage( pkg );
 
-        workingMemory.setGlobal( "list", 
+        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 );
 
@@ -1868,8 +1868,8 @@
         assertEquals( "match Integer",
                       rules[3].getName() );
 
-        
 
+
         assertEquals( 1,
                       IteratorToList.convert( workingMemory.iterateObjects() ).size() );
         assertEquals( bob,
@@ -1893,7 +1893,7 @@
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
         assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
 
-    }    
+    }
 
     public void testSerializeWorkingMemoryAndRuleBase2() throws Exception {
         // has the first newStatefulSession after the ruleBase is serialised
@@ -1906,34 +1906,34 @@
         assertEquals( 0,
                       builder.getErrors().getErrors().length );
 
-        RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();   
-        
+        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();    
-        
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
         final byte[] wm = serializeOut( workingMemory );
 
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
         ruleBase.addPackage( pkg );
 
-        workingMemory.setGlobal( "list", 
+        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 );
 
@@ -1946,8 +1946,8 @@
         assertEquals( "match Integer",
                       rules[3].getName() );
 
-        
 
+
         assertEquals( 1,
                       IteratorToList.convert( workingMemory.iterateObjects() ).size() );
         assertEquals( bob,
@@ -1971,10 +1971,10 @@
         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" ) ) );
@@ -2046,7 +2046,7 @@
 
     protected Object serializeIn(final byte[] bytes) throws IOException,
                                                     ClassNotFoundException {
-        final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
         final Object obj = in.readObject();
         in.close();
         return obj;
@@ -2055,7 +2055,7 @@
     protected byte[] serializeOut(final Object obj) throws IOException {
         // Serialize to a byte array
         final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new ObjectOutputStream( bos );
+        final ObjectOutput out = new DroolsObjectOutputStream( bos );
         out.writeObject( obj );
         out.close();
 
@@ -4553,10 +4553,10 @@
     public void testConsequenceBuilderException() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ConsequenceBuilderException.drl" ) ) );
-        
+
         assertTrue( builder.hasErrors() );
     }
-    
+
     public void testRuntimeTypeCoercion() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RuntimeTypeCoercion.drl" ) ) );
@@ -4569,22 +4569,22 @@
         final List list = new ArrayList();
         workingMemory.setGlobal( "results",
                                  list );
-        
+
         final PolymorphicFact fact = new PolymorphicFact( new Integer( 10 ) );
         final FactHandle handle = workingMemory.insert( fact );
-        
+
         workingMemory.fireAllRules();
-        
+
         assertEquals( 1, list.size() );
         assertEquals( fact.getData(), list.get( 0 ) );
-        
+
         fact.setData( "10" );
         workingMemory.update( handle, fact );
         workingMemory.fireAllRules();
-        
+
         assertEquals( 2, list.size() );
         assertEquals( fact.getData(), list.get( 1 ) );
-        
+
         try {
             fact.setData( new Boolean(true) );
             workingMemory.update( handle, fact );
@@ -4592,7 +4592,7 @@
         } catch( ClassCastException cce ) {
             // success, as can't use "<" to compare to a boolean
         }
-        
+
     }
 
     public void testRuntimeTypeCoercion2() throws Exception {
@@ -4607,23 +4607,23 @@
         final List list = new ArrayList();
         workingMemory.setGlobal( "results",
                                  list );
-        
+
         final Primitives fact = new Primitives( );
         fact.setBooleanPrimitive( true );
         fact.setBooleanWrapper( new Boolean(true) );
         fact.setObject( new Boolean(true) );
         fact.setCharPrimitive( 'X' );
         final FactHandle handle = workingMemory.insert( fact );
-        
+
         workingMemory.fireAllRules();
-        
+
         int index = 0;
         assertEquals( list.toString(), 4, list.size() );
         assertEquals( "boolean", list.get( index++ ));
         assertEquals( "boolean wrapper", list.get( index++ ));
         assertEquals( "boolean object", list.get( index++ ));
         assertEquals( "char", list.get( index++ ));
-        
+
         fact.setBooleanPrimitive( false );
         fact.setBooleanWrapper( null );
         fact.setCharPrimitive( '\0' );
@@ -4632,13 +4632,13 @@
         workingMemory.fireAllRules();
         assertEquals( 5, list.size() );
         assertEquals( "char object", list.get( index++ ) );
-        
+
         fact.setObject( null );
         workingMemory.update( handle, fact );
         workingMemory.fireAllRules();
         assertEquals( 6, list.size() );
         assertEquals( "null object", list.get( index++ ) );
-        
+
     }
 
     public void testAlphaEvalWithOrCE() throws Exception {
@@ -4653,7 +4653,7 @@
         final List list = new ArrayList();
         workingMemory.setGlobal( "results",
                                  list );
-        
+
         FactA a = new FactA();
         a.setField1( "a value" );
 
@@ -4663,7 +4663,7 @@
 
         workingMemory.fireAllRules();
 
-        assertEquals( "should not have fired", 
+        assertEquals( "should not have fired",
                       0,
                       list.size() );
     }
@@ -4689,11 +4689,11 @@
 
         workingMemory.fireAllRules( 2 );
 
-        assertEquals( "should have fired only once", 
+        assertEquals( "should have fired only once",
                       1,
                       list.size() );
     }
-    
+
     // this test requires mvel 1.2.19. Leaving it commented until mvel is released.
     public void FIXME_testJavaModifyBlock() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
@@ -4716,11 +4716,11 @@
 
         workingMemory.fireAllRules( 2 );
 
-        assertEquals( "should have fired only once", 
+        assertEquals( "should have fired only once",
                       1,
                       list.size() );
         assertEquals( "full", bob.getStatus() );
         assertEquals( 31, bob.getAge() );
     }
-    
+
 }

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -2,13 +2,13 @@
 
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,12 +24,6 @@
 
 import org.drools.WorkingMemoryEventManager;
 import org.drools.audit.event.LogEvent;
-import org.drools.event.AfterFunctionRemovedEvent;
-import org.drools.event.AfterRuleBaseLockedEvent;
-import org.drools.event.AfterRuleBaseUnlockedEvent;
-import org.drools.event.BeforeFunctionRemovedEvent;
-import org.drools.event.BeforeRuleBaseLockedEvent;
-import org.drools.event.BeforeRuleBaseUnlockedEvent;
 
 import com.thoughtworks.xstream.XStream;
 
@@ -41,12 +35,12 @@
  * the events logged serialized to XML using XStream.
  * Every time a new logger is created, the old event log will
  * be overwritten.
- * 
+ *
  * TODO: make this class more scalable, for example
  *  - logging to several files if log becomes too large
  *  - automatically write updates to file at certain time intervals
  *  - ...
- * 
+ *
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen </a>
  */
 public class WorkingMemoryFileLogger extends WorkingMemoryLogger {
@@ -70,9 +64,9 @@
      * to the file name.
      * The default is an event.log file in the current working directory.
      * This can be a path relative to the current working directory
-     * (e.g. "mydir/subDir/myLogFile"), or an absolute path 
+     * (e.g. "mydir/subDir/myLogFile"), or an absolute path
      * (e.g. "C:/myLogFile").
-     * 
+     *
      * @param fileName The name of the file the events should be logged in.
      */
     public void setFileName(final String fileName) {
@@ -110,7 +104,7 @@
      * Sets the maximum number of log events that are allowed in memory.
      * If this number is reached, all events are written to file.
      * The default is 1000.
-     * 
+     *
      * @param maxEventsInMemory The maximum number of events in memory.
      */
     public void setMaxEventsInMemory(final int maxEventsInMemory) {

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryInMemoryLogger.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryInMemoryLogger.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/audit/WorkingMemoryInMemoryLogger.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -2,13 +2,13 @@
 
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -23,21 +23,13 @@
 
 import org.drools.WorkingMemory;
 import org.drools.audit.event.LogEvent;
-import org.drools.event.AfterPackageAddedEvent;
-import org.drools.event.AfterPackageRemovedEvent;
-import org.drools.event.AfterRuleAddedEvent;
-import org.drools.event.AfterRuleRemovedEvent;
-import org.drools.event.BeforePackageAddedEvent;
-import org.drools.event.BeforePackageRemovedEvent;
-import org.drools.event.BeforeRuleAddedEvent;
-import org.drools.event.BeforeRuleRemovedEvent;
 
 import com.thoughtworks.xstream.XStream;
 
 /**
  * A logger of events generated by a working memory.
  * It stores its information in memory, so it can be retrieved later.
- * 
+ *
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen </a>
  */
 public class WorkingMemoryInMemoryLogger extends WorkingMemoryLogger {

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -39,6 +39,7 @@
     private Operator  operator;
 
     private ValueType type;
+    public static final long serialVersionUID = 400;
 
     public BaseEvaluator(final ValueType type,
                          final Operator operator) {

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -44,6 +44,7 @@
     private String                   fieldName;
     private Class                    clazz;
     private transient FieldExtractor extractor;
+    public static final long serialVersionUID = 400;
 
     public ClassFieldExtractor(final Class clazz,
                                final String fieldName) {

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -41,6 +41,7 @@
     protected ValueType       valueType;
 
     private boolean           isEvent;
+    public static final long serialVersionUID = 400;
 
     // ------------------------------------------------------------
     // Constructors

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/SalienceInteger.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/SalienceInteger.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/SalienceInteger.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -18,6 +18,7 @@
     public static final Salience DEFAULT_SALIENCE = new SalienceInteger(DEFAULT_VALUE);
 
     private int value;
+    public static final long serialVersionUID = 400;
 
     public SalienceInteger(int value) {
         this.value = value;

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ValueType.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ValueType.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/ValueType.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -94,6 +94,7 @@
     private String name;
     private Class classType;
     private int simpleType;
+    public static final long serialVersionUID = 400;
 
     private ValueType(final String name,
                       final Class classType,

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -33,6 +33,7 @@
                                                                                          false );
     public static final Operator               GREATER_OR_EQUAL = addOperatorToRegistry( ">=",
                                                                                          false );
+    public static final long serialVersionUID = 400;
 
     /**
      * Creates a new Operator instance for the given parameters,

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -37,6 +37,7 @@
     private boolean     isBoolean;
     private boolean     isCharacter;
     private boolean     isString;
+    public static final long serialVersionUID = 400;
 
     public ObjectFieldImpl(final Object value) {
         setValue(value);

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -16,14 +16,8 @@
  * limitations under the License.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Externalizable;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashMap;
@@ -45,7 +39,6 @@
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleBaseEventSupport;
-import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.objenesis.Objenesis;
 import org.drools.objenesis.ObjenesisStd;
 import org.drools.rule.CompositePackageClassLoader;
@@ -71,7 +64,7 @@
 abstract public class AbstractRuleBase
     implements
     InternalRuleBase,
-    Externalizable {
+    DroolsSerializable {
     // ------------------------------------------------------------
     // Instance members
     // ------------------------------------------------------------
@@ -119,15 +112,8 @@
 
     private int                                  additionsSinceLock;
     private int                                  removalsSinceLock;
+    public static final long serialVersionUID = 400;
 
-    /**
-     * Default constructor - for Externalizable. This should never be used by a user, as it
-     * will result in an invalid state for the instance.
-     */
-    public AbstractRuleBase() {
-
-    }
-
     public synchronized int nextWorkingMemoryCounter() {
         return this.workingMemoryCounter++;
     }
@@ -173,13 +159,9 @@
      * The Package uses PackageCompilationData to hold a reference to the generated bytecode. The generated bytecode must be restored before any Rules.
      *
      */
-    public void doWriteExternal(final ObjectOutput stream) throws IOException {
-        stream.writeObject( this.pkgs );
+    public void droolsWriteObject(DroolsObjectOutputStream out) throws IOException {
+        out.writeObject( this.pkgs );
 
-        // Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
-        // a byte[]
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new ObjectOutputStream( bos );
         out.writeObject( this.id );
         out.writeObject( this.processes );
         out.writeObject( this.agendaGroupRuleTotals );
@@ -189,8 +171,6 @@
 
         this.eventSupport.removeEventListener( RuleBaseEventListener.class );
         out.writeObject( this.eventSupport );
-
-        stream.writeObject( bos.toByteArray() );
     }
 
     /**
@@ -199,20 +179,13 @@
      * A custom ObjectInputStream, able to resolve classes against the bytecode in the PackageCompilationData, is used to restore the Rules.
      *
      */
-    public void doReadExternal(final ObjectInput stream) throws IOException,
-                                                      ClassNotFoundException {
+    public Object droolsReadObject(DroolsObjectInputStream in) throws IOException, ClassNotFoundException {
         // PackageCompilationData must be restored before Rules as it has the ClassLoader needed to resolve the generated code references in Rules
-        this.pkgs = (Map) stream.readObject();
+        this.pkgs = (Map) in.readObject();
 
-        if ( stream instanceof DroolsObjectInputStream ) {
-            final DroolsObjectInputStream parentStream = (DroolsObjectInputStream) stream;
-            parentStream.setRuleBase( this );
-            this.packageClassLoader = new CompositePackageClassLoader( parentStream.getClassLoader() );
-            this.classLoader = new MapBackedClassLoader( parentStream.getClassLoader() );
-        } else {
-            this.packageClassLoader = new CompositePackageClassLoader( Thread.currentThread().getContextClassLoader() );
-            this.classLoader = new MapBackedClassLoader( Thread.currentThread().getContextClassLoader() );
-        }
+        in.setRuleBase( this );
+        this.packageClassLoader = new CompositePackageClassLoader( in.getClassLoader() );
+        this.classLoader = new MapBackedClassLoader( in.getClassLoader() );
 
         this.packageClassLoader.addClassLoader( this.classLoader );
 		this.objenesis = createObjenesis();
@@ -221,18 +194,19 @@
             this.packageClassLoader.addClassLoader( ((Package) it.next()).getPackageCompilationData().getClassLoader() );
         }
 
-        this.id = (String) stream.readObject();
-        this.processes = (Map) stream.readObject();
-        this.agendaGroupRuleTotals = (Map) stream.readObject();
-        this.factHandleFactory = (FactHandleFactory) stream.readObject();
-        this.globals = (Map) stream.readObject();
+        this.id = (String) in.readObject();
+        this.processes = (Map) in.readObject();
+        this.agendaGroupRuleTotals = (Map) in.readObject();
+        this.factHandleFactory = (FactHandleFactory) in.readObject();
+        this.globals = (Map) in.readObject();
 
-        this.config = (RuleBaseConfiguration) stream.readObject();
+        this.config = (RuleBaseConfiguration) in.readObject();
         this.config.setClassLoader(this.packageClassLoader );
-        this.eventSupport = (RuleBaseEventSupport) stream.readObject();
+        this.eventSupport = (RuleBaseEventSupport) in.readObject();
         this.eventSupport.setRuleBase( this );
 
         this.statefulSessions = new ObjectHashSet();
+        return this;
     }
 
 	/**

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -98,25 +98,25 @@
 
         switch (type) {
             case RT_SERIALIZABLE:
-                object = readSerializable();
+                object = readSerializable(handle);
                 break;
             case RT_EXTERNALIZABLE:
-                object = readExternalizable();
+                object = readExternalizable(handle);
                 break;
             case RT_STRING:
-                object = readString();
+                object = readString(handle);
                 break;
             case RT_MAP:
-                object = readMap();
+                object = readMap(handle);
                 break;
             case RT_COLLECTION:
-                object = readCollection();
+                object = readCollection(handle);
                 break;
             case RT_ARRAY:
-                object = readArray();
+                object = readArray(handle);
                 break;
             case RT_CLASS:
-                object = readClass();
+                object = readClass(handle);
                 break;
             case RT_REFERENCE:
                 return readReference(handle);
@@ -124,15 +124,15 @@
                 throw new StreamCorruptedException("Unsupported object type: " + type);
         }
 
-        registerObject(handle, object);
         return object;
     }
 
-    private Object readArray() throws IOException, ClassNotFoundException {
+    private Object readArray(int handle) throws IOException, ClassNotFoundException {
         Class clazz = (Class) readObject();
         int length = readInt();
         Class componentType = clazz.getComponentType();
         Object array = Array.newInstance(componentType, length);
+        registerObject(handle, array);
         if (componentType.isPrimitive()) {
             readPrimitiveArray(array, length, componentType);
         } else {
@@ -231,39 +231,44 @@
         return Collections.EMPTY_MAP;
     }
 
-    private Object readSerializable() throws ClassNotFoundException, IOException {
+    private Object readSerializable(int handle) throws ClassNotFoundException, IOException {
         Class clazz = (Class) readObject();
         ObjectInstantiator instantiator = OBJENESIS.getInstantiatorOf(clazz);
         DroolsSerializable serializable = (DroolsSerializable) instantiator.newInstance();
-        return serializable.droolsReadObject(this);
+        registerObject(handle, serializable);
+        Object replacement = serializable.droolsReadObject(this);
+        if (replacement != null) {
+            serializable = (DroolsSerializable) replacement;
+            registerObject(handle, serializable);
+        }
+        return serializable;
     }
 
-    private Object readExternalizable() throws ClassNotFoundException, IOException {
+    private Object readExternalizable(int handle) throws ClassNotFoundException, IOException {
         Class clazz = (Class) readObject();
         Externalizable externalizable;
         try {
             externalizable = (Externalizable) clazz.newInstance();
         } catch (InstantiationException e) {
-            InvalidClassException exception = new InvalidClassException(clazz.getName());
-            exception.initCause(e);
-            throw exception;
+            throw newInvalidClassException(clazz, e);
         } catch (IllegalAccessException e) {
-            InvalidClassException exception = new InvalidClassException(clazz.getName());
-            exception.initCause(e);
-            throw exception;
+            throw newInvalidClassException(clazz, e);
         }
+        registerObject(handle, externalizable);
         externalizable.readExternal(this);
         return externalizable;
     }
 
-    private String readString() throws IOException {
-        return readUTF();
+    private String readString(int handle) throws IOException {
+        String string = readUTF();
+        registerObject(handle, string);
+        return string;
     }
 
-    private Map readMap() throws IOException, ClassNotFoundException {
+    private Map readMap(int handle) throws IOException, ClassNotFoundException {
         Class clazz = (Class) readObject();
         int size = readInt();
-        Map map = (Map) createCollection(clazz, size);
+        Map map = (Map) newCollection(handle, clazz, size);
         for (int i = 0; i < size; ++i) {
             Object key = readObject();
             Object value = readObject();
@@ -272,38 +277,43 @@
         return map;
     }
 
-    private Collection readCollection() throws IOException, ClassNotFoundException {
+    private Collection readCollection(int handle) throws IOException, ClassNotFoundException {
         Class clazz = (Class) readObject();
         int size = readInt();
-        Collection collection = (Collection) createCollection(clazz, size);
+        Collection collection = (Collection) newCollection(handle, clazz, size);
         for (int i = 0; i < size; ++i) {
             collection.add(readObject());
         }
         return collection;
     }
 
-    private Object createCollection(Class clazz, int size) throws ClassNotFoundException, IOException {
+    private Object newCollection(int handle, Class clazz, int size) throws ClassNotFoundException, IOException {
+        Object collection;
         try {
             Constructor constructor = clazz.getConstructor(Integer.TYPE);
-            return constructor.newInstance(size);
+            collection = constructor.newInstance(size);
         } catch (InstantiationException e) {
-            throw new IllegalStateException(e);
+            throw newInvalidClassException(clazz, e);
         } catch (IllegalAccessException e) {
-            throw new IllegalStateException(e);
+            throw newInvalidClassException(clazz, e);
         } catch (InvocationTargetException e) {
-            throw new IllegalStateException(e);
+            throw newInvalidClassException(clazz, e);
         } catch (NoSuchMethodException e) {
-            throw new IllegalStateException(e);
+            throw newInvalidClassException(clazz, e);
         }
+        registerObject(handle, collection);
+        return collection;
     }
 
     private int readHandle() throws IOException {
         return readInt();
     }
 
-    private Class readClass() throws IOException, ClassNotFoundException {
+    private Class readClass(int handle) throws IOException, ClassNotFoundException {
         String className = (String) readObject();
-        return this.classLoader.loadClass(className);
+        Class clazz = classLoader.loadClass(className);
+        registerObject(handle, clazz);
+        return clazz;
     }
 
     private byte readRecordType() throws IOException {
@@ -323,4 +333,10 @@
     private void registerObject(int handle, Object object) {
         objectsByHandle.put(handle, object);
     }
+
+    private InvalidClassException newInvalidClassException(Class clazz, Throwable cause) {
+        InvalidClassException exception = new InvalidClassException(clazz.getName());
+        exception.initCause(cause);
+        return exception;
+    }
 }

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsObjectOutputStream.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -20,7 +20,6 @@
     private static final Class EMPTY_LIST_CLASS = Collections.EMPTY_LIST.getClass();
 
     private final Map handlesByObject = new IdentityHashMap();
-    private int handleCount = 0;
 
     public DroolsObjectOutputStream(OutputStream stream) throws IOException {
         super(stream);
@@ -273,7 +272,7 @@
     private int registerObject(Object object) {
         Integer handle = (Integer) handlesByObject.get(object);
         if (handle == null) {
-            handle = ++handleCount;
+            handle = handlesByObject.size() + 1;
             handlesByObject.put(object, handle);
             handle = -handle;
         }

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsSerializable.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsSerializable.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/DroolsSerializable.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -1,8 +1,9 @@
 package org.drools.common;
 
 import java.io.IOException;
+import java.io.Serializable;
 
-public interface DroolsSerializable {
+public interface DroolsSerializable extends Serializable {
     void droolsWriteObject(DroolsObjectOutputStream out) throws IOException;
 
     Object droolsReadObject(DroolsObjectInputStream in) throws IOException, ClassNotFoundException;

Deleted: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/common/Resolvable.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -1,7 +0,0 @@
-package org.drools.common;
-
-import java.io.Externalizable;
-
-public interface Resolvable extends Externalizable {
-    public Object readResolve();
-}

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -2,13 +2,13 @@
 
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,8 +17,6 @@
  */
 
 import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Iterator;
 
@@ -34,6 +32,7 @@
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.concurrent.CommandExecutor;
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.RuleBaseEventListener;
@@ -47,39 +46,25 @@
 
 /**
  * Implementation of <code>RuleBase</code>.
- * 
+ *
  * @author <a href="mailto:bob at werken.com">bob mcwhirter</a>
- * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a> 
- * 
+ * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
+ *
  * @version $Id: RuleBaseImpl.java,v 1.5 2005/08/14 22:44:12 mproctor Exp $
  */
 public class ReteooRuleBase extends AbstractRuleBase {
-    /**
-     * DO NOT CHANGE BELLOW SERIAL_VERSION_ID UNLESS YOU ARE CHANGING DROOLS VERSION
-     * SERIAL_VERSION_ID=320 stands for version 3.2.0 
-     */
-    private static final long serialVersionUID = 400L;
-
     /** The root Rete-OO for this <code>RuleBase</code>. */
     private transient Rete              rete;
 
     private ReteooBuilder     reteooBuilder;
-    
+
     // ------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------
 
     /**
-     * Default constructor - for Externalizable. This should never be used by a user, as it 
-     * will result in an invalid state for the instance.
-     */
-    public ReteooRuleBase() {
-
-    }
-
-    /**
      * Construct.
-     * 
+     *
      * @param rete
      *            The rete network.
      */
@@ -117,7 +102,7 @@
 
     /**
      * Construct.
-     * 
+     *
      * @param rete
      *            The rete network.
      */
@@ -132,34 +117,27 @@
     }
 
     /**
-     * Handles the write serialization of the Package. Patterns in Rules may reference generated data which cannot be serialized by default methods.
-     * The Package uses PackageCompilationData to hold a reference to the generated bytecode. The generated bytecode must be restored before any Rules.
-     * 
-     */
-    public void writeExternal(final ObjectOutput stream) throws IOException {
-        doWriteExternal( stream );
-    }
-
-    /**
      * Handles the read serialization of the Package. Patterns in Rules may reference generated data which cannot be serialized by default methods.
      * The Package uses PackageCompilationData to hold a reference to the generated bytecode; which must be restored before any Rules.
      * A custom ObjectInputStream, able to resolve classes against the bytecode in the PackageCompilationData, is used to restore the Rules.
-     * 
+     *
      */
-    public void readExternal(final ObjectInput stream) throws IOException,
+    public Object droolsReadObject(DroolsObjectInputStream in) throws IOException,
                                                       ClassNotFoundException {
-        doReadExternal( stream );
-        
+        super.droolsReadObject( in );
+
         // rebuild the Rete network from the pkg information
         this.reteooBuilder = new ReteooBuilder( this );
-        this.rete = new Rete( this );        
-        synchronized ( this.pkgs ) {            
+        this.rete = new Rete( this );
+        synchronized ( this.pkgs ) {
             for (Package pkg : this.pkgs.values() ) {
                 for ( Rule rule : pkg.getRules() ) {
                     addRule( rule );
                 }
             }
         }
+
+        return this;
     }
 
     // ------------------------------------------------------------
@@ -168,27 +146,27 @@
 
     /**
      * Retrieve the Rete-OO network for this <code>RuleBase</code>.
-     * 
+     *
      * @return The RETE-OO network.
      */
     public Rete getRete() {
         return this.rete;
     }
-    
+
     public ReteooBuilder getReteooBuilder() {
         return this.reteooBuilder;
     }
 
     /**
      * Assert a fact object.
-     * 
+     *
      * @param handle
      *            The handle.
      * @param object
      *            The fact.
      * @param workingMemory
      *            The working-memory.
-     * 
+     *
      * @throws FactException
      *             If an error occurs while performing the assertion.
      */
@@ -203,12 +181,12 @@
 
     /**
      * Retract a fact object.
-     * 
+     *
      * @param handle
      *            The handle.
      * @param workingMemory
      *            The working-memory.
-     * 
+     *
      * @throws FactException
      *             If an error occurs while performing the retraction.
      */
@@ -223,15 +201,15 @@
     public synchronized StatefulSession newStatefulSession( final boolean keepReference ) {
         return newStatefulSession( keepReference, null );
     }
-    
+
     public synchronized TemporalSession newTemporalSession( final ClockType clockType ) {
         return (TemporalSession) newStatefulSession( true, clockType);
     }
-    
+
     public synchronized TemporalSession newTemporalSession( final boolean keepReference, final ClockType clockType ) {
         return (TemporalSession) newStatefulSession( keepReference, clockType );
     }
-    
+
     /**
      * @see RuleBase
      */
@@ -259,7 +237,7 @@
             if ( keepReference ) {
                 super.addStatefulSession( session );
                 for( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
-                    addEventListener( (RuleBaseEventListener) it.next() ); 
+                    addEventListener( (RuleBaseEventListener) it.next() );
                 }
             }
 
@@ -271,10 +249,10 @@
                                                                                  null,
                                                                                  null ) );
         }
-        
+
         return session;
     }
-    
+
     public StatelessSession newStatelessSession() {
 
         //orders the rules
@@ -301,5 +279,5 @@
         Serializable {
         private static final long serialVersionUID = 400L;
     }
-    
+
 }

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Declaration.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Declaration.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Declaration.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -92,6 +92,7 @@
     private Pattern           pattern;
 
     private boolean     internalFact;
+    public static final long serialVersionUID = 400;
 
     // ------------------------------------------------------------
     // Constructors

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/GroupElement.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/GroupElement.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/GroupElement.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -30,7 +30,6 @@
 import org.drools.common.DroolsObjectInputStream;
 
 public class GroupElement extends ConditionalElement implements DroolsSerializable {
-
     public static final Type  AND              = new AndType();
     public static final Type  OR               = new OrType();
     public static final Type  EXISTS           = new ExistsType();
@@ -38,6 +37,7 @@
 
     private Type              type;
     private List              children;
+    public static final long serialVersionUID = 400;
 
     public GroupElement() {
         this( AND );
@@ -353,7 +353,8 @@
     private static abstract class AbstractType
         implements
         Type,
-            DroolsSerializable {
+        DroolsSerializable {
+        private static final long serialVersionUID = 400;
 
         /**
          * @inheritDoc
@@ -403,6 +404,7 @@
      * An AND CE type
      */
     private static class AndType extends AbstractType {
+        private static final long serialVersionUID = 400;
 
         AndType() {
         }
@@ -447,6 +449,7 @@
      * An OR CE type
      */
     private static class OrType extends AbstractType {
+        private static final long serialVersionUID = 400;
 
         OrType() {
         }
@@ -491,6 +494,7 @@
      * A NOT CE type
      */
     private static class NotType extends AbstractType {
+        private static final long serialVersionUID = 400;
 
         NotType() {
         }
@@ -542,6 +546,7 @@
      * An EXISTS CE type
      */
     private static class ExistsType extends AbstractType {
+        private static final long serialVersionUID = 400;
 
         ExistsType() {
         }

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/ImportDeclaration.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/ImportDeclaration.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/ImportDeclaration.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -33,6 +33,7 @@
 public class ImportDeclaration implements DroolsSerializable {
     private String target;
     private boolean isEvent;
+    public static final long serialVersionUID = 400;
 
     /**
      * Creates an import declaration for the given target.

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -36,6 +36,7 @@
     private FieldExtractor     extractor;
 
     private LiteralRestriction restriction;
+    public static final long serialVersionUID = 400;
 
     public LiteralConstraint(final FieldExtractor extractor,
                              final Evaluator evaluator,

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -42,6 +42,7 @@
     private Evaluator            evaluator;
 
     private LiteralContextEntry  contextEntry;
+    public static final long serialVersionUID = 400;
 
     public LiteralRestriction(final FieldValue field,
                               final Evaluator evaluator,
@@ -152,6 +153,7 @@
         public FieldExtractor     extractor;
         public Object             object;
         public ContextEntry       next;
+        public static final long serialVersionUID = 400;
 
         public LiteralContextEntry(final FieldExtractor extractor) {
             this.extractor = extractor;

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Package.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Package.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Package.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -79,6 +79,7 @@
 
     /** This will keep a summary error message as to why this package is not valid */
     private String                         errorSummary;
+    public static final long serialVersionUID = 400;
 
     // ------------------------------------------------------------
     // Constructors

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -63,6 +63,7 @@
     private transient ClassLoader         parentClassLoader;
 
     private boolean                       dirty;
+    public static final long serialVersionUID = 400;
 
     static {
         PROTECTION_DOMAIN = (ProtectionDomain) AccessController.doPrivileged( new PrivilegedAction() {

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Pattern.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Pattern.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Pattern.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -47,6 +47,7 @@
     // this is the offset of the related fact inside a tuple. i.e:
     // the position of the related fact inside the tuple;
     private int               offset;
+    public static final long serialVersionUID = 400;
 
     public Pattern(final int index,
                    final ObjectType objectType) {
@@ -277,6 +278,7 @@
         out.writeObject(declarations);
         out.writeInt(index);
         out.writeObject(source);
+        out.writeInt(offset);
     }
 
     public Object droolsReadObject(DroolsObjectInputStream in) throws IOException, ClassNotFoundException {
@@ -286,6 +288,7 @@
         declarations = (Map) in.readObject();
         index = in.readInt();
         source = (PatternSource) in.readObject();
+        offset = in.readInt();
         return this;
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Rule.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/rule/Rule.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -102,6 +102,7 @@
     private Calendar          dateExpires;
 
     private boolean           enabled;
+    public static final long serialVersionUID = 400;
 
     // ------------------------------------------------------------
     // Constructors

Modified: labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -36,6 +36,7 @@
     DroolsSerializable {
 
     private ObjectType        objectType;
+    public static final long serialVersionUID = 400;
 
     public PatternExtractor(final ObjectType objectType) {
         this.objectType = objectType;

Modified: labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/FileScannerTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/FileScannerTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/agent/FileScannerTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -1,10 +1,6 @@
 package org.drools.agent;
 
 import java.io.File;
-import java.io.FileOutputStream;
-import java.io.ObjectOutputStream;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -19,7 +15,7 @@
 
     public void testHasChanged() {
         Map lastMod = new HashMap();
-        
+
         FileScanner scan = new FileScanner();
         assertTrue(scan.hasChanged( "/goo/ber", lastMod, 42 ));
 
@@ -29,33 +25,33 @@
         assertFalse(scan.hasChanged( "/goo/baaaa", lastMod, 42 ));
         assertFalse(scan.hasChanged( "/goo/ber", lastMod, 42 ));
 
-        
+
         assertTrue(scan.hasChanged( "/goo/ber", lastMod, 400 ));
         assertFalse(scan.hasChanged( "/goo/baaaa", lastMod, 42 ));
         assertTrue(scan.hasChanged( "/goo/baaaa", lastMod, 69 ));
     }
-    
+
     public void testScanAndLoad() throws Exception {
         Package p1 = new Package("p1");
         Package p2 = new Package("p2");
-        
+
         File dir = RuleBaseAssemblerTest.getTempDirectory();
         File p1f = new File(dir, "p1.pkg");
         File p2f = new File(dir, "p2.pkg");
-        
+
         RuleBaseAssemblerTest.writePackage( p1, p1f );
         RuleBaseAssemblerTest.writePackage( p2, p2f);
-        
+
         FileScanner scan = new FileScanner();
         Properties props = new Properties();
         props.setProperty( RuleAgent.FILES, p1f.getPath() + " " + p2f.getPath() );
         scan.configure( props );
-        
+
         RuleBase rb = RuleBaseFactory.newRuleBase();
         PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
-        
-        
-        
+
+
+
         assertEquals(2, rb.getPackages().length);
         assertTrue("p1".equals(rb.getPackages()[0].getName()) || "p1".equals(rb.getPackages()[1].getName()));
         assertTrue("p2".equals(rb.getPackages()[0].getName()) || "p2".equals(rb.getPackages()[1].getName()));
@@ -72,32 +68,32 @@
         assertEquals(2, rb.getPackages().length);
         assertTrue("p1".equals(rb.getPackages()[0].getName()) || "p1".equals(rb.getPackages()[1].getName()));
         assertTrue("p2".equals(rb.getPackages()[0].getName()) || "p2".equals(rb.getPackages()[1].getName()));
-        
+
     }
-    
+
     public void testEmptyList() throws Exception {
         FileScanner scan = new FileScanner();
         RuleBase rb = RuleBaseFactory.newRuleBase();
-        
+
         PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
 
         assertEquals(0, rb.getPackages().length);
     }
-    
+
     public void testFileChanges() throws Exception {
         File dir = RuleBaseAssemblerTest.getTempDirectory();
         File t = new File(dir, "x.bar");
-        
+
         Package x = new Package("x");
         RuleBaseAssemblerTest.writePackage( x, t );
-        
+
         FileScanner scan = new FileScanner();
         Map updates = new HashMap();
         assertTrue(scan.hasChanged( "x", updates, t.lastModified() ));
         assertFalse(scan.hasChanged( "x", updates, t.lastModified() ));
-        
+
     }
 
-    
-    
+
+
 }

Modified: labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/rule/LogicTransformerTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/rule/LogicTransformerTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-core/src/test/java/org/drools/rule/LogicTransformerTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -2,13 +2,13 @@
 
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,33 +20,36 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
+import java.net.URL;
+import java.net.URISyntaxException;
 
 import org.drools.DroolsTestCase;
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.base.ClassObjectType;
 import org.drools.spi.ObjectType;
 
 public class LogicTransformerTest extends DroolsTestCase {
     /**
      * (a||b)&&c
-     * 
+     *
      * <pre>
      *               and
      *               / \
-     *              or  c 
+     *              or  c
      *             /  \
      *            a    b
      * </pre>
-     * 
+     *
      * Should become (a&&c)||(b&&c)
-     * 
+     *
      * <pre>
-     *                 
+     *
      *               or
-     *              /  \  
-     *             /    \ 
-     *            /      \ 
-     *             and      and     
+     *              /  \
+     *             /    \
+     *            /      \
+     *             and      and
      *          / \      / \
      *         a   c    b   c
      * </pre>
@@ -99,19 +102,19 @@
 
     /**
      * (a||b)&&c
-     * 
+     *
      * <pre>
      *                   And
      *                  /|\ \__
      *                _/ | \_  \_
-     *               /   |   \   \  
+     *               /   |   \   \
      *              or   |   or   not
      *             /   \ |  / \    |
      *            a    b c d   e   f
      * </pre>
-     * 
+     *
      * Should become (a&&c)||(b&&c)
-     * 
+     *
      * <pre>
      *                           /\
      *                         _/  \_
@@ -237,28 +240,28 @@
 
     /**
      * This data structure is now valid
-     * 
+     *
      * (Not (OR (A B) ) )
-     * 
+     *
      * <pre>
      *             Not
-     *              | 
-     *             or   
+     *              |
+     *             or
      *            /  \
      *           a    b
      * </pre>
-     * 
+     *
      * Should become:
-     * 
+     *
      * <pre>
      *             And
-     *             / \ 
-     *           Not Not   
+     *             / \
+     *           Not Not
      *            |   |
      *            a   b
      * </pre>
-     * 
-     * 
+     *
+     *
      */
     public void testNotOrTransformation() throws InvalidPatternException {
         final ObjectType type = new ClassObjectType( String.class );
@@ -301,21 +304,21 @@
 
     /**
      * This data structure is now valid (Exists (OR (A B) ) )
-     * 
+     *
      * <pre>
      *             Exists
-     *              | 
-     *             or   
+     *              |
+     *             or
      *            /  \
      *           a    b
      * </pre>
-     * 
+     *
      * Should become:
-     * 
+     *
      * <pre>
      *              Or
-     *             /  \ 
-     *        Exists  Exists   
+     *             /  \
+     *        Exists  Exists
      *            |    |
      *            a    b
      * </pre>
@@ -410,25 +413,25 @@
      * <pre>
      *                         _/|\_
      *                      __/  |  \__
-     *                     /     |     \ 
+     *                     /     |     \
      *                  __/      |      \__
      *                 /         |         \
      *                And       and        Not
      *               / | \      / \         |
      *             a  And d    e  Or        i
-     *                / \        /  \      
-     *               b  Not     h  Exists    
-     *                   |           |      
-     *                  Not          g   
-     *                   |           
-     *                   c         
+     *                / \        /  \
+     *               b  Not     h  Exists
+     *                   |           |
+     *                  Not          g
+     *                   |
+     *                   c
      * </pre>
-     * 
+     *
      *   It is important to ensure that the order of
      *   the elements is not changed after transformation
-     * 
+     *
      * <pre>
-     *                            Or 
+     *                            Or
      *                           _/ \__
      *                        __/      \___
      *                       /             \__
@@ -444,12 +447,12 @@
      *                |                             |
      *                c                             c
      * </pre>
-     * 
+     *
      * @throws IOException
      * @throws ClassNotFoundException
-     * 
-     * 
-     * 
+     *
+     *
+     *
      */
     public void testProcessTree() throws IOException,
                                  ClassNotFoundException,
@@ -523,7 +526,7 @@
         // result
 //        writeTree( result,
 //                   "correct_processTree1.dat" );
-        final ObjectInputStream ois = new ObjectInputStream( this.getClass().getResourceAsStream( "/correct_processTree1.dat" ) );
+        final DroolsObjectInputStream ois = new DroolsObjectInputStream( this.getClass().getResourceAsStream( "/correct_processTree1.dat" ) );
 
         final GroupElement[] correctResultRoot = (GroupElement[]) ois.readObject();
 
@@ -590,51 +593,51 @@
     }
 
     /**
-     * 
-     * 
+     *
+     *
      * /**
-     * 
+     *
      * <pre>
      *                         _/|\_
      *                      __/  |  \__
-     *                     /     |     \ 
+     *                     /     |     \
      *                  __/      |      \__
      *                 /         |         \
      *                And       or         And
      *               /  \       / \        /  \
      *             a    Or     d   e      Not OR
-     *                 / \                |  / | 
+     *                 / \                |  / |
      *               b    c               f g Not
      *                                         |
      *                                         h
-     *                  
-     *                   
-     *                  
+     *
+     *
+     *
      * </pre>
-     * 
+     *
      * Each And is a Rete sub rule
-     * 
+     *
      * <pre>
-     *     
-     *    
-     *       And___     And___      And___      And___        And__    And___       And___    And___     
-     *      ||| |  \   ||| |  \     ||| |  \   ||| |  \     ||| |  \  ||| |  \     ||| |  \  ||| |  \ 
+     *
+     *
+     *       And___     And___      And___      And___        And__    And___       And___    And___
+     *      ||| |  \   ||| |  \     ||| |  \   ||| |  \     ||| |  \  ||| |  \     ||| |  \  ||| |  \
      *      abd Not g  abd Not Not  abe Not g  abe Not Not  acd Not g acd Not Not  ace Not g ace Not Not
-     *           |          |   |        |          |   |        |        |    |       |          |   |   
+     *           |          |   |        |          |   |        |        |    |       |          |   |
      *           f          f   h        f          f   h        f        f    h       f          f   h
-     *                        
-     *                        
+     *
+     *
      * </pre>
-     * 
+     *
      * @throws IOException
      * @throws ClassNotFoundException
-     * 
-     * 
-     * 
-     * 
+     *
+     *
+     *
+     *
      * @throws IOException
      * @throws ClassNotFoundException
-     * 
+     *
      */
     public void testTransform() throws IOException,
                                ClassNotFoundException,
@@ -705,7 +708,8 @@
 
         // Get known correct tree
         // The binary stream was created from a handchecked correct output
-        final ObjectInputStream ois = new ObjectInputStream( this.getClass().getResourceAsStream( "/correct_transform1.dat" ) );
+        final DroolsObjectInputStream ois = new DroolsObjectInputStream( this.getClass().getResourceAsStream( "/correct_transform1.dat" ) );
+
         final GroupElement[] correctResultAnds = (GroupElement[]) ois.readObject();
 
         for ( int j = 0; j < ands.length; j++ ) {
@@ -716,14 +720,18 @@
 
     private void writeTree(final Object object,
                            final String fileName) throws IOException {
-        final String className = this.getClass().getName();
 
-        File file = new File( this.getClass().getResource( className.substring( className.lastIndexOf( '.' ) + 1 ) + ".class" ).getFile() );
+        URL resource = this.getClass().getResource("/correct_transform1.dat");
+        String path;
+        try {
+            path = resource.toURI().getRawPath();
+        } catch (URISyntaxException e) {
+            throw new IOException(e.getMessage());
+        }
 
-        file = new File( file.getParent(),
-                         fileName );
-
-        new ObjectOutputStream( new FileOutputStream( file ) ).writeObject( object );
+        DroolsObjectOutputStream out = new DroolsObjectOutputStream(new FileOutputStream(path));
+        out.writeObject( object );
+        out.close();
     }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/serialization/drools-core/src/test/resources/correct_transform1.dat
===================================================================
(Binary files differ)

Modified: labs/jbossrules/branches/serialization/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -19,7 +19,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
 import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -74,6 +73,7 @@
 import org.drools.common.AbstractRuleBase;
 import org.drools.common.DroolsObjectInputStream;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.DroolsObjectOutputStream;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -853,7 +853,7 @@
         } else {
             try {
                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
-                ObjectOutputStream out = new ObjectOutputStream(bout);
+                DroolsObjectOutputStream out = new DroolsObjectOutputStream(bout);
                 out.writeObject( asm.getBinaryPackage() );
 
                 item.updateCompiledPackage( new ByteArrayInputStream( bout.toByteArray()) );

Modified: labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java
===================================================================
--- labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java	2007-12-26 11:05:31 UTC (rev 17404)
+++ labs/jbossrules/branches/serialization/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java	2007-12-26 11:18:20 UTC (rev 17405)
@@ -18,7 +18,6 @@
 
 
 import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
 import java.util.Calendar;
 
 import javax.jcr.Node;
@@ -33,6 +32,7 @@
 import org.drools.repository.RulesRepository;
 import org.drools.repository.VersionableItem;
 import org.drools.rule.Package;
+import org.drools.common.DroolsObjectInputStream;
 
 /**
  * A playground for performance analysing.
@@ -130,7 +130,7 @@
         assertNotNull(binPackage);
 
         ByteArrayInputStream bin = new ByteArrayInputStream(binPackage);
-        ObjectInputStream in = new ObjectInputStream(bin);
+        DroolsObjectInputStream in = new DroolsObjectInputStream(bin);
         Package binPkg = (Package) in.readObject();
 
         assertNotNull(binPkg);




More information about the jboss-svn-commits mailing list