[jboss-svn-commits] JBL Code SVN: r18902 - in labs/jbossrules/branches/ming-serialization/drools-compiler/src: main/java/org/drools/brms/client/modeldriven/brl and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 12 17:22:08 EDT 2008


Author: mingjin
Date: 2008-03-12 17:22:07 -0400 (Wed, 12 Mar 2008)
New Revision: 18902

Added:
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
Modified:
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionFieldValue.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionInsertFact.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionRetractFact.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionSetField.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFactPattern.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFieldConstraint.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/DSLSentence.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/FactPattern.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ISingleFieldConstraint.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/PortableObject.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleModel.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ActionCol.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ConditionCol.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FieldData.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyField.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheese.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/CheeseEqual.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheesery.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/OrderItem.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Person.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Primitives.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/brms/server/util/BRLPersitenceTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Stage.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockFactHandle.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
   labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
Log:
serialization on rulebase is mostly working: except AccumulateTest and FirstOrderLogicTest

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -4,6 +4,9 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 
 import org.drools.brms.client.modeldriven.brl.ActionFieldList;
 import org.drools.brms.client.modeldriven.brl.ActionFieldValue;
@@ -103,6 +106,26 @@
     public DSLSentence[]          conditionDSLSentences  = new DSLSentence[0];
     public DSLSentence[]          actionDSLSentences     = new DSLSentence[0];
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        factTypes   = (String[])in.readObject();
+        fieldsForType   = (Map)in.readObject();
+        fieldTypes   = (Map)in.readObject();
+        globalTypes   = (Map)in.readObject();
+        dataEnumLists   = (Map)in.readObject();
+        conditionDSLSentences   = (DSLSentence[])in.readObject();
+        actionDSLSentences   = (DSLSentence[])in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(factTypes);
+        out.writeObject(fieldsForType);
+        out.writeObject(fieldTypes);
+        out.writeObject(globalTypes);
+        out.writeObject(dataEnumLists);
+        out.writeObject(conditionDSLSentences);
+        out.writeObject(actionDSLSentences);
+    }
+
     /**
      * This is used to calculate what fields an enum list may depend on. Optional.
      */

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionFieldValue.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionFieldValue.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionFieldValue.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,8 +1,12 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
+
 /**
  * Holds field and value for "action" parts of the rule.
- * 
+ *
  * @author Michael Neale
  */
 public class ActionFieldValue
@@ -11,7 +15,7 @@
 
     public String field;
     public String value;
-    
+
     /**
      * This is the datatype archectype (eg String, Numeric etc).
      */
@@ -28,13 +32,25 @@
     public ActionFieldValue() {
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        field   = (String)in.readObject();
+        value   = (String)in.readObject();
+        type    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(field);
+        out.writeObject(value);
+        out.writeObject(type);
+    }
+
     /**
-     * This will return true if the value is really a "formula" - in 
+     * This will return true if the value is really a "formula" - in
      * the sense of like an excel spreadsheet.
-     * 
-     *  If it IS a formula, then the value should never be turned into a 
+     *
+     *  If it IS a formula, then the value should never be turned into a
      *  string, always left as-is.
-     * 
+     *
      */
     public boolean isFormula() {
         if ( this.value == null ) {

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionInsertFact.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionInsertFact.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionInsertFact.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+
 /**
  * This is used when asserting a new fact.
  * @author Michael Neale
@@ -17,4 +21,11 @@
     public ActionInsertFact() {
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        factType    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(factType);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionRetractFact.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionRetractFact.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionRetractFact.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 /**
  * This is used to specify that the bound fact should be retracted
  * when the rule fires.
@@ -19,4 +23,11 @@
 
     public String variableName;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        variableName    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(variableName);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionSetField.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionSetField.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ActionSetField.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,10 +1,14 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 /**
  * For setting a field on a bound LHS variable or a global.
- * If setting a field on a fact bound variable, this will 
+ * If setting a field on a fact bound variable, this will
  * NOT notify the engine of any changes (unless done outside of the engine).
- * 
+ *
  * @author Michael Neale
  */
 public class ActionSetField extends ActionFieldList {
@@ -19,4 +23,11 @@
 
     public String variable;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        variable    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(variable);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFactPattern.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFactPattern.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFactPattern.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,8 +1,12 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+
 /**
  * Represents first order logic like Or, Not, Exists.
- * 
+ *
  * @author Michael Neale
  */
 public class CompositeFactPattern
@@ -16,13 +20,24 @@
      * this will one of: [Not, Exist, Or]
      */
     public String              type;
-    
+
     /**
      * The patterns.
      */
     public FactPattern[]       patterns;
 
-    
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        type    = (String)in.readObject();
+        patterns    = (FactPattern[])in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(type);
+        out.writeObject(patterns);
+    }
+
+
     /**
      * This type should be from the contants in this class of course.
      */

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFieldConstraint.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/CompositeFieldConstraint.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+
 /**
  * This is a field constraint that may span multiple fields.
  *
@@ -35,6 +39,15 @@
      */
     public FieldConstraint[] constraints = null;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        compositeJunctionType   = (String)in.readObject();
+        constraints   = (FieldConstraint[])in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(compositeJunctionType);
+        out.writeObject(constraints);
+    }
     //Note this is a bit ugly, GWT had some early limitations which required this to kind of work this way.
     //when generics are available, could probably switch to it, but remember this is persistent stuff
     //so don't want to break backwards compat (as XStream is used)

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/DSLSentence.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/DSLSentence.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/DSLSentence.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+
 /**
  * This represents a DSL sentence.
  * @author Michael Neale
@@ -11,6 +15,13 @@
 
     public String sentence;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        sentence    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(sentence);
+    }
     /**
      * This will strip off any residual "{" stuff...
      */

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/FactPattern.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/FactPattern.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/FactPattern.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,9 +1,13 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+
 /**
  * A fact pattern is a declaration of a fact type, and its constraint,
  * and perhaps a variable that is it bound to
- * It is the equivalent of a "pattern" in drools terms. 
+ * It is the equivalent of a "pattern" in drools terms.
  * @author Michael Neale
  *
  */
@@ -24,8 +28,19 @@
         //this.constraints = new CompositeFieldConstraint();
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        constraintList  = (CompositeFieldConstraint)in.readObject();
+        factType  = (String)in.readObject();
+        boundName  = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(constraintList);
+        out.writeObject(factType);
+        out.writeObject(boundName);
+    }
     /**
-     * This will add a top level constraint.  
+     * This will add a top level constraint.
      */
     public void addConstraint(final FieldConstraint constraint) {
         if (constraintList == null) constraintList = new CompositeFieldConstraint();
@@ -46,12 +61,12 @@
             return false;
         }
     }
-    
+
     /**
      * This will return the list of field constraints that are in the root
      * CompositeFieldConstraint object.
      * If there is no root, then an empty array will be returned.
-     * 
+     *
      * @return an empty array, or the list of constraints (which may be composites).
      */
     public FieldConstraint[] getFieldConstraints() {

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ISingleFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ISingleFieldConstraint.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/ISingleFieldConstraint.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+
 /**
  * Represents a constraint, which may be part of a direct field constraint or a connective.
  * @author Michael Neale
@@ -10,13 +14,13 @@
     PortableObject {
 
     /**
-     * This is used only when constraint is first created. 
+     * This is used only when constraint is first created.
      * This means that there is no value yet for the constraint.
      */
     public static final int TYPE_UNDEFINED = 0;
 
     /**
-     * This may be string, or number, anything really. 
+     * This may be string, or number, anything really.
      */
     public static final int TYPE_LITERAL   = 1;
 
@@ -37,11 +41,20 @@
     public static final int TYPE_ENUM      = 4;
 
     /**
-     * The fieldName and fieldBinding is not used in the case of a predicate. 
+     * The fieldName and fieldBinding is not used in the case of a predicate.
      */
     public static final int TYPE_PREDICATE = 5;
 
     public String           value;
     public int              constraintValueType;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        value   = (String)in.readObject();
+        constraintValueType = in.readInt();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(value);
+        out.writeInt(constraintValueType);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/PortableObject.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/PortableObject.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/PortableObject.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -5,7 +5,7 @@
 /**
  * This is the marker interface for portable Ajaxy type objects.
  * This is replaced in the BRMS with a GWT specific one, and only used here so the RuleModel
- * can compile. It does nothing, and is strictly a marker interface only. 
+ * can compile. It does nothing, and is strictly a marker interface only.
  * @author Michael Neale
  *
  */

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleAttribute.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.brl;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 /**
  * This holds values for rule attributes (eg salience, agenda-group etc).
  * @author Michael Neale
@@ -23,6 +27,16 @@
     public RuleAttribute() {
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        attributeName   = (String)in.readObject();
+        value   = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(attributeName);
+        out.writeObject(value);
+    }
+
     public String toString() {
         StringBuffer ret = new StringBuffer();
         ret.append( this.attributeName );

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleModel.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleModel.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/brl/RuleModel.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,6 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 public class RuleModel
     implements
@@ -19,6 +22,21 @@
     public IPattern[]      lhs          = new IPattern[0];
     public IAction[]       rhs          = new IAction[0];
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        name    = (String)in.readObject();
+        modelVersion    = (String)in.readObject();
+        attributes    = (RuleAttribute[])in.readObject();
+        lhs    = (IPattern[])in.readObject();
+        rhs    = (IAction[])in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(name);
+        out.writeObject(modelVersion);
+        out.writeObject(attributes);
+        out.writeObject(lhs);
+        out.writeObject(rhs);
+    }
     /**
      * This will return the fact pattern that a variable is bound to.
      *

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ActionCol.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ActionCol.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ActionCol.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,7 +2,19 @@
 
 import org.drools.brms.client.modeldriven.brl.PortableObject;
 
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+
 public class ActionCol implements PortableObject {
 
-	public String header;
+    public String header;
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        header  = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(header);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ConditionCol.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ConditionCol.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/ConditionCol.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,8 +2,19 @@
 
 import org.drools.brms.client.modeldriven.brl.PortableObject;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 public class ConditionCol implements PortableObject {
 
-	public String header;
+    public String header;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        header  = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(header);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/dt/GuidedDecisionTable.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,6 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 import org.drools.brms.client.modeldriven.brl.PortableObject;
 
@@ -20,4 +23,15 @@
 
 	public GuidedDecisionTable() {}
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        conditionCols   = (List)in.readObject();
+        actionCols   = (List)in.readObject();
+        data   = (String[][])in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(conditionCols);
+        out.writeObject(actionCols);
+        out.writeObject(data);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/ExecutionTrace.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,6 +1,9 @@
 package org.drools.brms.client.modeldriven.testing;
 
 import java.io.Serializable;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -35,5 +38,16 @@
 
 	public ExecutionTrace() {}
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        scenarioSimulatedDate   = (Date)in.readObject();
+        executionTimeResult     = in.readLong();
+        numberOfRulesFired      = in.readLong();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(scenarioSimulatedDate);
+        out.writeLong(executionTimeResult);
+        out.writeLong(numberOfRulesFired);
+    }
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FactData.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,39 +2,55 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 
 public class FactData implements Fixture {
 
-	/**
-	 * The type (class)
-	 */
-	public String type;
+    /**
+     * The type (class)
+     */
+    public String type;
 
-	/**
-	 * The name of the "variable"
-	 */
-	public String name;
+    /**
+     * The name of the "variable"
+     */
+    public String name;
 
-	/**
-	 * @gwt.typeArgs <org.drools.brms.client.modeldriven.testing.FactData>
-	 */
-	public List fieldData = new ArrayList();
+    /**
+     * @gwt.typeArgs <org.drools.brms.client.modeldriven.testing.FactData>
+     */
+    public List fieldData = new ArrayList();
 
-	/**
-	 * If its a modify, obviously we are modifying existing data in working memory.
-	 */
-	public boolean isModify;
+    /**
+     * If its a modify, obviously we are modifying existing data in working memory.
+     */
+    public boolean isModify;
 
-	public FactData() {}
-	public FactData(String type, String name, List fieldData, boolean modify) {
+    public FactData() {}
+    public FactData(String type, String name, List fieldData, boolean modify) {
 
-		this.type = type;
-		this.name = name;
-		this.fieldData = fieldData;
-		this.isModify = modify;
+        this.type = type;
+        this.name = name;
+        this.fieldData = fieldData;
+        this.isModify = modify;
 
-	}
+    }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        type    = (String)in.readObject();
+        name    = (String)in.readObject();
+        fieldData   = (List)in.readObject();
+        isModify    = in.readBoolean();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(type);
+        out.writeObject(name);
+        out.writeObject(fieldData);
+        out.writeBoolean(isModify);
+    }
 
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FieldData.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FieldData.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/FieldData.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,23 +2,36 @@
 
 import org.drools.brms.client.modeldriven.brl.PortableObject;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 public class FieldData implements PortableObject {
 
-	/** the name of the field */
-	public String name;
+    /** the name of the field */
+    public String name;
 
-	/** The value of the field to be set to.
-	 * This will either be a literal value (which will be coerced by MVEL).
-	 * Or if it starts with an "=" then it is an EL that will be evaluated to yield a value.
-	 */
-	public String value;
+    /** The value of the field to be set to.
+     * This will either be a literal value (which will be coerced by MVEL).
+     * Or if it starts with an "=" then it is an EL that will be evaluated to yield a value.
+     */
+    public String value;
 
 
-	public FieldData() {}
-	public FieldData(String name, String value) {
-		this.name = name;
-		this.value = value;
-	}
+    public FieldData() {}
+    public FieldData(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        name    = (String)in.readObject();
+        value   = (String)in.readObject();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(name);
+        out.writeObject(value);
+    }
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/RetractFact.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools.brms.client.modeldriven.testing;
 
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+
 /**
  * Retract a named fact.
  * @author Michael Neale
@@ -7,11 +11,18 @@
  */
 public class RetractFact implements Fixture {
 
-	public RetractFact() {}
-	public RetractFact(String s) {
-		this.name = s;
-	}
+    public RetractFact() {}
+    public RetractFact(String s) {
+        this.name = s;
+    }
 
-	public String name;
+    public String name;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        name    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(name);
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/Scenario.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,6 +1,9 @@
 package org.drools.brms.client.modeldriven.testing;
 
 import java.io.Serializable;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -55,7 +58,23 @@
 	public boolean inclusive = false;
 
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        maxRuleFirings  = in.readInt();
+        globals         = (List)in.readObject();
+        fixtures        = (List)in.readObject();
+        lastRunResult   = (Date)in.readObject();
+        rules           = (List)in.readObject();
 
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(maxRuleFirings);
+        out.writeObject(globals);
+        out.writeObject(fixtures);
+        out.writeObject(lastRunResult);
+        out.writeObject(rules);
+    }
+
 	/**
 	 * Returns true if this was a totally successful scenario, based on the results contained.
 	 */

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyFact.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,6 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
 
 /**
  * This is for making assertions over a specific facts value/state AFTER execution.
@@ -10,29 +13,40 @@
  */
 public class VerifyFact implements Expectation {
 
-	/**
-	 * @gwt.typeArgs <org.drools.brms.client.modeldriven.testing.VerifyField>
-	 */
-	public List fieldValues = new ArrayList();
-	public String name;
-	public String description;
+    /**
+     * @gwt.typeArgs <org.drools.brms.client.modeldriven.testing.VerifyField>
+     */
+    public List fieldValues = new ArrayList();
+    public String name;
+    public String description;
 
 
-	public VerifyFact() {}
-	public VerifyFact(String factName, List fieldValues) {
-		this.name = factName;
-		this.fieldValues = fieldValues;
-	}
+    public VerifyFact() {}
+    public VerifyFact(String factName, List fieldValues) {
+        this.name = factName;
+        this.fieldValues = fieldValues;
+    }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        fieldValues = (List)in.readObject();
+        name = (String)in.readObject();
+        description = (String)in.readObject();
+    }
 
-	public boolean wasSuccessful() {
-		for (int i = 0; i < fieldValues.size(); i++) {
-			VerifyField vf = (VerifyField) fieldValues.get(i);
-			if (! vf.successResult.booleanValue()) {
-				return false;
-			}
-		}
-		return true;
-	}
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(fieldValues);
+        out.writeObject(name);
+        out.writeObject(description);
+    }
 
+    public boolean wasSuccessful() {
+        for (int i = 0; i < fieldValues.size(); i++) {
+            VerifyField vf = (VerifyField) fieldValues.get(i);
+            if (! vf.successResult.booleanValue()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyField.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyField.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyField.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,31 +2,48 @@
 
 import org.drools.brms.client.modeldriven.brl.PortableObject;
 
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
 public class VerifyField implements PortableObject {
 
-	public String fieldName;
-	public String expected;
+    public String fieldName;
+    public String expected;
 
-	public String actualResult;
-	public Boolean successResult;
+    public String actualResult;
+    public Boolean successResult;
 
-	/**
-	 * This is a natural language explanation of the outcome for reporting purposes.
-	 */
-	public String explanation;
+    /**
+     * This is a natural language explanation of the outcome for reporting purposes.
+     */
+    public String explanation;
 
-	/**
-	 * Operator is generally "==" or "!="  - an MVEL operator.
-	 */
-	public String operator = "==";
+    /**
+     * Operator is generally "==" or "!="  - an MVEL operator.
+     */
+    public String operator = "==";
 
-	public VerifyField() {}
+    public VerifyField() {}
 
-	public VerifyField(String fieldName, String expected, String operator) {
-		this.fieldName = fieldName;
-		this.expected = expected;
-		this.operator = operator;
-	}
+    public VerifyField(String fieldName, String expected, String operator) {
+        this.fieldName = fieldName;
+        this.expected = expected;
+        this.operator = operator;
+    }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        fieldName   = (String)in.readObject();
+        expected   = (String)in.readObject();
+        actualResult   = (String)in.readObject();
+        successResult   = in.readBoolean();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(fieldName);
+        out.writeObject(expected);
+        out.writeObject(actualResult);
+        out.writeBoolean(successResult);
+    }
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/brms/client/modeldriven/testing/VerifyRuleFired.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,37 +1,57 @@
 package org.drools.brms.client.modeldriven.testing;
 
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+
 public class VerifyRuleFired implements Expectation {
 
-	public String ruleName;
-	public Integer expectedCount;
+    public String ruleName;
+    public Integer expectedCount;
 
-	/**
-	 * This is a natural language explanation of this verification.
-	 * For reporting purposes.
-	 */
-	public String explanation;
+    /**
+     * This is a natural language explanation of this verification.
+     * For reporting purposes.
+     */
+    public String explanation;
 
-	/**
-	 * If this is true, then we expect it to fire at least once.
-	 * False means it should not fire at all (this is an alternative
-	 * to specifying an expected count).
-	 */
-	public Boolean expectedFire;
+    /**
+     * If this is true, then we expect it to fire at least once.
+     * False means it should not fire at all (this is an alternative
+     * to specifying an expected count).
+     */
+    public Boolean expectedFire;
 
+    public Boolean successResult;
+    public Integer actualResult;
 
-	public VerifyRuleFired() {}
-	public VerifyRuleFired(String ruleName, Integer expectedCount, Boolean expectedFire) {
-		this.ruleName = ruleName;
-		this.expectedCount = expectedCount;
-		this.expectedFire = expectedFire;
-	}
+    public VerifyRuleFired() {}
+    public VerifyRuleFired(String ruleName, Integer expectedCount, Boolean expectedFire) {
+        this.ruleName = ruleName;
+        this.expectedCount = expectedCount;
+        this.expectedFire = expectedFire;
+    }
 
-	public Boolean successResult;
-	public Integer actualResult;
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        ruleName    = (String)in.readObject();
+        expectedCount   = in.readInt();
+        explanation    = (String)in.readObject();
+        expectedFire    = in.readBoolean();
+        successResult   = in.readBoolean();
+        actualResult    = in.readInt();
+    }
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(ruleName);
+        out.writeInt(expectedCount);
+        out.writeObject(explanation);
+        out.writeBoolean(expectedFire);
+        out.writeBoolean(successResult);
+        out.writeInt(actualResult);
+    }
+    
+    public boolean wasSuccessful() {
+        return successResult.booleanValue();
+    }
 
-	public boolean wasSuccessful() {
-		return successResult.booleanValue();
-	}
-
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,12 +1,12 @@
 /*
  * 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.
@@ -18,6 +18,9 @@
 
 import java.util.Collections;
 import java.util.List;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 
 /**
  * A descr class for accumulate node
@@ -40,6 +43,34 @@
     private boolean           externalFunction = false;
     private String            functionIdentifier;
     private String            expression;
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        input           = (BaseDescr)in.readObject();
+        initCode        = (String)in.readObject();
+        actionCode      = (String)in.readObject();
+        reverseCode     = (String)in.readObject();
+        resultCode      = (String)in.readObject();
+        declarations    = (String[])in.readObject();
+        className       = (String)in.readObject();
+        externalFunction    = in.readBoolean();
+        functionIdentifier  = (String)in.readObject();
+        expression          = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+        out.writeObject(input);
+        out.writeObject(initCode);
+        out.writeObject(actionCode);
+        out.writeObject(reverseCode);
+        out.writeObject(resultCode);
+        out.writeObject(declarations);
+        out.writeObject(className);
+        out.writeBoolean(externalFunction);
+        out.writeObject(functionIdentifier);
+        out.writeObject(expression);
+    }
     
     public int getLine() {
         return this.input.getLine();
@@ -92,8 +123,8 @@
     public void addDescr(final BaseDescr patternDescr) {
         throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
-    
-    public void insertBeforeLast(final Class clazz ,final BaseDescr baseDescr ) { 
+
+    public void insertBeforeLast(final Class clazz ,final BaseDescr baseDescr ) {
         throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
 
@@ -154,19 +185,19 @@
     }
 
     public void setInput(BaseDescr input) {
-        this.input = input; 
+        this.input = input;
     }
-    
+
     public boolean isSinglePattern() {
-        return this.input instanceof PatternDescr; 
+        return this.input instanceof PatternDescr;
     }
 
     public boolean isMultiPattern() {
-        return ! ( this.input instanceof PatternDescr ); 
+        return ! ( this.input instanceof PatternDescr );
     }
 
     public boolean hasValidInput() {
-        // TODO: need to check that there are no OR occurences 
+        // TODO: need to check that there are no OR occurences
         return this.input != null;
     }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -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.
@@ -16,14 +16,17 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 /**
  * This is the super type for all pattern AST nodes.
  */
 public class BaseDescr
     implements
-    Serializable {
+    Externalizable {
 
     private static final long serialVersionUID = 400L;
     private int               startCharacter   = -1;
@@ -34,6 +37,26 @@
     private int               endColumn        = -1;
     private String            text             = "";
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        startCharacter  = in.readInt();
+        endCharacter  = in.readInt();
+        line        = in.readInt();
+        column      = in.readInt();
+        endLine     = in.readInt();
+        endColumn   = in.readInt();
+        text        = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(startCharacter);
+        out.writeInt(endCharacter);
+        out.writeInt(line);
+        out.writeInt(column);
+        out.writeInt(endLine);
+        out.writeInt(endColumn);
+        out.writeObject(text);
+    }
+
     public String getText() {
         return text;
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/PackageDescr.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -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,14 +20,17 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
 
 public class PackageDescr extends BaseDescr {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 400L;
-    private final String      name;
-    private final String      documentation;
+    private String      name;
+    private String      documentation;
 
     private List              imports          = Collections.EMPTY_LIST;
     private List              functionImports  = Collections.EMPTY_LIST;
@@ -37,6 +40,9 @@
     private List              functions        = Collections.EMPTY_LIST;
     private List              rules            = Collections.EMPTY_LIST;
 
+    public PackageDescr() {
+    }
+
     public PackageDescr(final String name) {
         this( name,
               "" );
@@ -48,6 +54,32 @@
         this.documentation = documentation;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        name    = (String)in.readObject();
+        documentation   = (String)in.readObject();
+        imports    = (List)in.readObject();
+        functionImports    = (List)in.readObject();
+        attributes    = (List)in.readObject();
+        globals    = (List)in.readObject();
+        factTemplates    = (List)in.readObject();
+        functions    = (List)in.readObject();
+        rules    = (List)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+        out.writeObject(name);
+        out.writeObject(documentation);
+        out.writeObject(imports);
+        out.writeObject(functionImports);
+        out.writeObject(attributes);
+        out.writeObject(globals);
+        out.writeObject(factTemplates);
+        out.writeObject(functions);
+        out.writeObject(rules);
+    }
+
     public String getName() {
         return this.name;
     }
@@ -138,7 +170,7 @@
             }
             if (!overridden) {
                 rule.addAttribute( at );
-            }            
+            }
         }
         this.rules.add( rule );
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -19,6 +19,9 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
 
 import org.drools.compiler.Dialect;
 import org.drools.rule.Dialectable;
@@ -41,6 +44,9 @@
     private String            className;
 
 
+    public RuleDescr() {
+    }
+
     public RuleDescr(final String name) {
         this( name,
               "" );
@@ -53,14 +59,44 @@
         this.documentation = documentation;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        name    = (String)in.readObject();
+        dialect    = (String)in.readObject();
+        documentation    = (String)in.readObject();
+        consequence    = in.readObject();
+        lhs    = (AndDescr)in.readObject();
+        consequenceLine    = in.readInt();
+        consequencePattern    = in.readInt();
+        offset    = in.readInt();
+        attributes    = (List)in.readObject();
+        salience    = (String)in.readObject();
+        className    = (String)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+        out.writeObject(name);
+        out.writeObject(dialect);
+        out.writeObject(documentation);
+        out.writeObject(consequence);
+        out.writeObject(lhs);
+        out.writeInt(consequenceLine);
+        out.writeInt(consequencePattern);
+        out.writeInt(offset);
+        out.writeObject(attributes);
+        out.writeObject(salience);
+        out.writeObject(className);
+    }
+
     public String getName() {
         return this.name;
     }
-    
+
     public String getDialect() {
         return this.dialect;
     }
-    
+
     public void setDialect(String dialect) {
         this.dialect = dialect;
     }
@@ -94,12 +130,12 @@
             if ( this.attributes == Collections.EMPTY_LIST ) {
                 this.attributes = new ArrayList();
             }
-            
+
             if ( "dialect".equals( attribute.getName() ) ) {
                 // set dialect specifically as its to drive the build process.
                 this.dialect = attribute.getValue();
             }
-            
+
             this.attributes.add( attribute );
         }
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/main/java/org/drools/testframework/TestingEventListener.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -4,6 +4,9 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
 
 import org.drools.RuleBase;
 import org.drools.WorkingMemory;
@@ -161,5 +164,12 @@
 
 	public void evaluate(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory) throws Exception {
 	}
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+    }
 }
 

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheese.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheese.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,8 @@
 package org.drools;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -37,12 +40,12 @@
     public Cheese() {
 
     }
-    
+
     public Cheese(final String type) {
         super();
         this.type = type;
         this.price = 0;
-    }    
+    }
 
     public Cheese(final String type,
                   final int price) {

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/CheeseEqual.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/CheeseEqual.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/CheeseEqual.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,16 +1,19 @@
 package org.drools;
 
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 /*
  * 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,9 +23,9 @@
 
 public class CheeseEqual
     implements
-    Serializable {
+    Externalizable {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 400L;
     protected String          type;
@@ -39,6 +42,16 @@
         this.price = price;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        type    = (String)in.readObject();
+        price   = in.readInt();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(type);
+        out.writeInt(price);
+    }
+
     public int getPrice() {
         return this.price;
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheesery.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheesery.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Cheesery.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -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.
@@ -16,27 +16,44 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 public class Cheesery
     implements
-    Serializable {
+    Externalizable {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 400L;
     public final static int   MAKING_CHEESE    = 0;
     public final static int   SELLING_CHEESE   = 1;
 
-    private final List        cheeses          = new ArrayList();
+    private List        cheeses          = new ArrayList();
 
     private int               status;
     private int               totalAmount;
     private Maturity          maturity;
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        cheeses = (List)in.readObject();
+        status  = in.readInt();
+        totalAmount = in.readInt();
+        maturity    = (Maturity)in.readObject();
+
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(cheeses);
+        out.writeInt(status);
+        out.writeInt(totalAmount);
+        out.writeObject(maturity);
+    }
     public List getCheeses() {
         return this.cheeses;
     }
@@ -78,16 +95,27 @@
         this.totalAmount = totalAmount;
     }
 
-    public static class Maturity {
+    public static class Maturity implements Externalizable {
         public static final Maturity YOUNG = new Maturity( "young" );
         public static final Maturity OLD   = new Maturity( "old" );
 
         private String               age;
 
+        public Maturity() {
+        }
+
         public Maturity(final String age) {
             this.age = age;
         }
 
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            age = (String)in.readObject();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeObject(age);
+
+        }
         public String toString() {
             return "[Maturity age='" + this.age + "']";
         }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/OrderItem.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/OrderItem.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/OrderItem.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -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.
@@ -16,16 +16,21 @@
 
 package org.drools;
 
+import java.io.Externalizable;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+
 /**
  * @author etirelli
  *
  */
-public class OrderItem implements java.io.Serializable {
+public class OrderItem implements Externalizable {
     private static final long serialVersionUID = -7287814895557751224L;
-    
+
     public static final int TYPE_BOOK = 1;
     public static final int TYPE_CD = 2;
-    
+
     private String name;
     private int type;
     private int price;
@@ -52,6 +57,22 @@
         this.price = price;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        name    = (String)in.readObject();
+        type    = in.readInt();
+        price   = in.readInt();
+        seq     = in.readInt();
+        order   = (Order)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(name);
+        out.writeInt(type);
+        out.writeInt(price);
+        out.writeInt(seq);
+        out.writeObject(order);
+    }
+
     public String getName() {
         return name;
     }
@@ -59,11 +80,11 @@
     public void setName(String name) {
         this.name = name;
     }
-    
+
     public int getType() {
         return type;
     }
-    
+
     public void setType(int type) {
         this.type = type;
     }
@@ -141,7 +162,7 @@
         }
         return true;
     }
-    
+
     public String toString() {
         return "OrderItem( order="+this.getOrder()+" seq="+this.getSeq()+")";
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Person.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Person.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Person.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,5 +1,9 @@
 package org.drools;
 
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -11,7 +15,7 @@
     Serializable,
     PersonInterface {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 400L;
     private String            name;
@@ -30,7 +34,34 @@
     private Cheese            cheese;
 
     private List              addresses = new ArrayList();
-    
+
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        name    = (String)in.readObject();
+        likes    = (String)in.readObject();
+        age     = in.readInt();
+        bigDecimal    = (BigDecimal)in.readObject();
+        bigInteger    = (BigInteger)in.readObject();
+        hair    = (String)in.readObject();
+        sex     = in.readChar();
+        alive   = in.readBoolean();
+        status    = (String)in.readObject();
+        cheese    = (Cheese)in.readObject();
+        addresses    = (List)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(name);
+        out.writeObject(likes);
+        out.writeObject(bigDecimal);
+        out.writeObject(bigInteger);
+        out.writeObject(hair);
+        out.writeChar(sex);
+        out.writeBoolean(alive);
+        out.writeObject(status);
+        out.writeObject(cheese);
+        out.writeObject(addresses);
+    }
+
     public List getAddresses() {
         return addresses;
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Primitives.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Primitives.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/Primitives.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,16 +1,20 @@
 package org.drools;
 
 import java.util.Arrays;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.Serializable;
 
 /*
  * 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.
@@ -18,7 +22,7 @@
  * limitations under the License.
  */
 
-public class Primitives implements java.io.Serializable {
+public class Primitives implements Serializable {
 
     private static final long serialVersionUID = -3006488134941876318L;
 
@@ -37,9 +41,9 @@
     private Object[] arrayAttribute;
     private int[]    primitiveArrayAttribute;
     private String[] stringArray;
-    
+
     private Boolean  booleanWrapper;
-    
+
     private Object   object;
 
     public boolean isBooleanPrimitive() {
@@ -209,7 +213,7 @@
         } else if ( !stringAttribute.equals( other.stringAttribute ) ) return false;
         return true;
     }
-    
-    
 
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,18 +1,26 @@
 package org.drools.bpel.instance;
 
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
 
 import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.ProcessInstanceFactory;
 
-public class BPELProcessInstanceFactory implements ProcessInstanceFactory, Serializable {
+public class BPELProcessInstanceFactory implements ProcessInstanceFactory, Externalizable {
 
     private static final long serialVersionUID = 400L;
 
     public ProcessInstance createProcessInstance() {
         return new BPELProcessInstance();
     }
-    
-    
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+    }
+
+
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/brms/server/util/BRLPersitenceTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/brms/server/util/BRLPersitenceTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/brms/server/util/BRLPersitenceTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -90,21 +90,21 @@
                       newXML );
 
     }
-    
+
     public void testCompositeConstraintsRoundTrip() throws Exception {
         RuleModel m = new RuleModel();
         m.name = "with composite";
-    
+
         FactPattern p1 = new FactPattern("Person");
         p1.boundName = "p1";
         m.addLhsItem( p1 );
-        
+
         FactPattern p = new FactPattern("Goober");
         m.addLhsItem( p );
         CompositeFieldConstraint comp = new CompositeFieldConstraint();
         comp.compositeJunctionType = CompositeFieldConstraint.COMPOSITE_TYPE_OR;
         p.addConstraint( comp );
-        
+
         final SingleFieldConstraint X = new SingleFieldConstraint();
         X.fieldName = "goo";
         X.constraintValueType = SingleFieldConstraint.TYPE_LITERAL;
@@ -116,7 +116,7 @@
         X.connectives[0].operator = "|| ==";
         X.connectives[0].value = "bar";
         comp.addConstraint( X );
-        
+
         final SingleFieldConstraint Y = new SingleFieldConstraint();
         Y.fieldName = "goo2";
         Y.constraintValueType = SingleFieldConstraint.TYPE_LITERAL;
@@ -131,47 +131,47 @@
         Q1.operator = "==";
         Q1.value = "whee";
         Q1.constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
-        
+
         comp2.addConstraint( Q1 );
-        
+
         final SingleFieldConstraint Q2 = new SingleFieldConstraint();
         Q2.fieldName = "gabba";
         Q2.operator = "==";
         Q2.value = "whee";
         Q2.constraintValueType = ISingleFieldConstraint.TYPE_LITERAL;
-        
+
         comp2.addConstraint( Q2 );
-        
+
         //now nest it
         comp.addConstraint( comp2 );
-        
-        
-        
+
+
+
         final SingleFieldConstraint Z = new SingleFieldConstraint();
         Z.fieldName = "goo3";
         Z.constraintValueType = SingleFieldConstraint.TYPE_LITERAL;
         Z.value = "foo";
         Z.operator = "==";
-        
+
         p.addConstraint( Z );
-        
+
         ActionInsertFact ass = new ActionInsertFact("Whee");
         m.addRhsItem( ass );
 
-        
+
         String xml = BRXMLPersistence.getInstance().marshal( m );
         //System.err.println(xml);
-        
+
         RuleModel m2 = BRXMLPersistence.getInstance().unmarshal( xml );
         assertNotNull(m2);
         assertEquals("with composite", m2.name);
-        
+
         assertEquals(m2.lhs.length, m.lhs.length);
         assertEquals(m2.rhs.length, m.rhs.length);
-        
-        
-        
-        
+
+
+
+
     }
 
     /**
@@ -180,17 +180,17 @@
      */
     public void testBackwardsCompat() throws Exception {
         RuleModel m2 = BRXMLPersistence.getInstance().unmarshal( loadResource( "existing_brl.xml" ) );
-        
+
         assertNotNull(m2);
         assertEquals(3, m2.rhs.length);
     }
-    
+
     private String loadResource(final String name) throws Exception {
 
         //        System.err.println( getClass().getResource( name ) );
         final InputStream in = getClass().getResourceAsStream( name );
 
-    
+
         final Reader reader = new InputStreamReader( in );
 
         final StringBuffer text = new StringBuffer();
@@ -205,7 +205,7 @@
         }
 
         return text.toString();
-    }    
+    }
 
     private RuleModel getComplexModel() {
         final RuleModel m = new RuleModel();

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -40,6 +40,7 @@
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
+import org.drools.integrationtests.SerializationHelper;
 import org.drools.base.DefaultKnowledgeHelper;
 import org.drools.common.ActivationGroupNode;
 import org.drools.common.DroolsObjectInputStream;
@@ -225,8 +226,7 @@
 
         ruleDescr.setConsequence( "map.put(\"value\", new Integer(1) );" );
         //check that packageDescr is serializable
-        final byte[] ast = serializeOut( packageDescr );
-        final PackageDescr back = (PackageDescr) serializeIn( ast );
+        final PackageDescr back = (PackageDescr) SerializationHelper.serializeObject( packageDescr, null );
         assertNotNull( back );
         assertEquals( "p1",
                       back.getName() );
@@ -238,12 +238,9 @@
         assertLength( 0,
                       builder.getErrors().getErrors() );
 
-        final byte[] bytes = serializeOut( pkg );
+        final Package newPkg = SerializationHelper.serializeObject( pkg,
+                                                                    pkg.getDialectDatas().getClassLoader() );
 
-        // Deserialize from a byte array
-
-        final Package newPkg = (Package) serializeIn( bytes );
-
         final Rule newRule = newPkg.getRule( "rule-1" );
 
         final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
@@ -271,26 +268,6 @@
                       map.get( "value" ) );
     }
 
-    private Object serializeIn(final byte[] bytes) throws IOException,
-                                                  ClassNotFoundException {
-        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
-        final Object obj = in.readObject();
-        in.close();
-        return obj;
-    }
-
-    private byte[] serializeOut(final Object obj) throws IOException {
-        // Serialize to a byte array
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new DroolsObjectOutputStream( bos );
-        out.writeObject( obj );
-        out.close();
-
-        // Get the bytes of the serialized object
-        final byte[] bytes = bos.toByteArray();
-        return bytes;
-    }
-
     public void testNoPackageName() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         try {

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -821,16 +821,16 @@
     protected Package serialisePackage(Package pkg) {
         try {
             byte[] bytes = serializeOut( pkg );
-            return (Package) serializeIn( bytes );
+            return (Package) serializeIn( bytes, pkg.getDialectDatas().getClassLoader() );
         } catch ( Exception e ) {
             throw new RuntimeException( "trouble serialising package.",
                                         e );
         }
     }
 
-    protected Object serializeIn(final byte[] bytes) throws IOException,
+    protected Object serializeIn(final byte[] bytes, ClassLoader classLoader) throws IOException,
                                                     ClassNotFoundException {
-        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
+        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ), classLoader );
         final Object obj = in.readObject();
         in.close();
         return obj;

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -21,6 +21,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
+import org.drools.reteoo.ReteooRuleBase;
 import org.drools.common.DroolsObjectInputStream;
 import org.drools.common.DroolsObjectOutputStream;
 import org.drools.compiler.DrlParser;
@@ -46,7 +47,8 @@
 
         byte[] buf = out.toByteArray();
 
-        DroolsObjectInputStream in = new DroolsObjectInputStream( new ByteArrayInputStream( buf ) );
+        DroolsObjectInputStream in = new DroolsObjectInputStream( new ByteArrayInputStream( buf ),
+                                                                  ((ReteooRuleBase)ruleBase).getCompositePackageClassLoader());
         ruleBase = (RuleBase) in.readObject();
         // end of serialization block
 

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -1,13 +1,7 @@
 package org.drools.integrationtests;
 
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-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.util.ArrayList;
 import java.util.HashMap;
@@ -23,8 +17,6 @@
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
-import org.drools.common.DroolsObjectInputStream;
-import org.drools.common.DroolsObjectOutputStream;
 import org.drools.compiler.PackageBuilder;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
@@ -38,7 +30,7 @@
 
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( reader );
-        final Package pkg = serialisePackage( builder.getPackage() );
+        final Package pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
 
         assertEquals( 0,
                       builder.getErrors().getErrors().length );
@@ -50,8 +42,7 @@
         Map map = new HashMap();
         map.put( "x",
                  ruleBase );
-        final byte[] ast = serializeOut( map );
-        map = (Map) serializeIn( ast );
+        map = SerializationHelper.serializeObject( map, pkg.getDialectDatas().getClassLoader() );
         ruleBase = (RuleBase) map.get( "x" );
         final Rule[] rules = ruleBase.getPackages()[0].getRules();
         assertEquals( 4,
@@ -74,7 +65,7 @@
         final Person bob = new Person( "bob" );
         workingMemory.insert( bob );
 
-        final byte[] wm = serializeOut( workingMemory );
+        final byte[] wm = SerializationHelper.serializeOut( workingMemory );
 
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
@@ -108,7 +99,7 @@
 
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( reader );
-        final Package pkg = serialisePackage( builder.getPackage() );
+        final Package pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
 
         assertEquals( 0,
                       builder.getErrors().getErrors().length );
@@ -120,15 +111,15 @@
         Map map = new HashMap();
         map.put( "x",
                  ruleBase );
-        final byte[] ast = serializeOut( map );
-        map = (Map) serializeIn( ast );
+//        map = SerializationHelper.serializeObject(map);
         ruleBase = (RuleBase) map.get( "x" );
 
-        final byte[] wm = serializeOut( workingMemory );
+        final byte[] wm = SerializationHelper.serializeOut( workingMemory );
 
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         workingMemory.setGlobal( "list",
                                  new ArrayList() );
@@ -181,7 +172,7 @@
 
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( reader );
-        final Package pkg = serialisePackage( builder.getPackage() );
+        final Package pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
 
         assertEquals( 0,
                       builder.getErrors().getErrors().length );
@@ -192,14 +183,13 @@
         Map map = new HashMap();
         map.put( "x",
                  ruleBase );
-        final byte[] ast = serializeOut( map );
-        map = (Map) serializeIn( ast );
+        map = SerializationHelper.serializeObject( map, pkg.getDialectDatas().getClassLoader() );
         ruleBase = (RuleBase) map.get( "x" );
 
         WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         // serialise the working memory before population
-        final byte[] wm = serializeOut( workingMemory );
+        final byte[] wm = SerializationHelper.serializeOut( workingMemory );
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
         ruleBase.addPackage( pkg );
@@ -254,7 +244,7 @@
 
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( reader );
-        final Package pkg = serialisePackage( builder.getPackage() );
+        final Package pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
 
         assertEquals( 0,
                       builder.getErrors().getErrors().length );
@@ -274,12 +264,11 @@
         Map map = new HashMap();
         map.put( "x",
                  ruleBase );
-        final byte[] ast = serializeOut( map );
-        map = (Map) serializeIn( ast );
+        map = SerializationHelper.serializeObject( map, pkg.getDialectDatas().getClassLoader() );
         ruleBase = (RuleBase) map.get( "x" );
 
         // now try serialising with a fully populated wm from a serialised rulebase
-        final byte[] wm = serializeOut( workingMemory );
+        final byte[] wm = SerializationHelper.serializeOut( workingMemory );
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
         final Rule[] rules = ruleBase.getPackages()[0].getRules();
@@ -326,7 +315,7 @@
         RuleBase ruleBase = RuleBaseFactory.newRuleBase( );
         PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
-        Package pkg = serialisePackage( builder.getPackage() );
+        Package pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
         ruleBase.addPackage( pkg );
 
         StatefulSession session = ruleBase.newStatefulSession();
@@ -340,13 +329,11 @@
         assertEquals( list.size(), 1 );
         assertEquals( "stilton", list.get( 0 ));
 
-        byte[] serializedSession = serializeOut( session );
+        byte[] serializedSession = SerializationHelper.serializeOut( session );
         session.dispose();
 
-        byte[] serializedRulebase = serializeOut( ruleBase );
-
         // now recreate the rulebase, deserialize the session and test it
-        ruleBase = (RuleBase) serializeIn( serializedRulebase );
+//        ruleBase = SerializationHelper.serializeObject( ruleBase );
 
         session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
         list = (List) session.getGlobal( "list" );
@@ -357,7 +344,7 @@
 
         builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) );
-        pkg = serialisePackage( builder.getPackage() );
+        pkg = SerializationHelper.serializeObject( builder.getPackage(), builder.getPackage().getDialectDatas().getClassLoader());
         ruleBase.addPackage( pkg );
 
         InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton", 10 ) );
@@ -391,8 +378,7 @@
         Map map = new HashMap();
         map.put( "x",
                  ruleBase );
-        final byte[] ast = serializeOut( map );
-        map = (Map) serializeIn( ast );
+        map = SerializationHelper.serializeObject( map, pkg.getDialectDatas().getClassLoader() );
         ruleBase = (RuleBase) map.get( "x" );
         final Rule[] rules = ruleBase.getPackages()[0].getRules();
         assertEquals( 3,
@@ -409,7 +395,7 @@
         p.setIntPrimitive( (int) 3 );
         workingMemory.insert( p );
 
-        final byte[] wm = serializeOut( workingMemory );
+        final byte[] wm = SerializationHelper.serializeOut( workingMemory );
 
         workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
 
@@ -448,34 +434,4 @@
         return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
                                             config );
     }
-
-    protected Package serialisePackage(Package pkg) {
-        try {
-            byte[] bytes = serializeOut( pkg );
-            return (Package) serializeIn( bytes );
-        } catch ( Exception e ) {
-            throw new RuntimeException( "trouble serialising package.",
-                                        e );
-        }
-    }
-
-    protected Object serializeIn(final byte[] bytes) throws IOException,
-                                                    ClassNotFoundException {
-        final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
-        final Object obj = in.readObject();
-        in.close();
-        return obj;
-    }
-
-    protected byte[] serializeOut(final Object obj) throws IOException {
-        // Serialize to a byte array
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        final ObjectOutput out = new DroolsObjectOutputStream( bos );
-        out.writeObject( obj );
-        out.close();
-
-        // Get the bytes of the serialized object
-        final byte[] bytes = bos.toByteArray();
-        return bytes;
-    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -16,16 +16,12 @@
  * limitations under the License.
  */
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
 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;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -77,6 +73,7 @@
 import org.drools.StatelessSession;
 import org.drools.TestParam;
 import org.drools.WorkingMemory;
+import org.drools.reteoo.ReteooRuleBase;
 import org.drools.Cheesery.Maturity;
 import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.base.ClassObjectFilter;
@@ -138,9 +135,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "globals_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -165,9 +163,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_globalsAsConstraints.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
         workingMemory.setGlobal( "results",
@@ -207,8 +206,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_globalCustomResolver.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Map map = new HashMap();
@@ -221,6 +221,12 @@
                  string );
 
         workingMemory.setGlobalResolver( new GlobalResolver() {
+            public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            }
+
+            public void writeExternal(ObjectOutput out) throws IOException {
+            }
+
             public Object resolveGlobal(String identifier) {
                 return map.get( identifier );
             }
@@ -250,8 +256,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_globalCustomResolver.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Map map = new HashMap();
@@ -274,6 +281,11 @@
                          value );
             }
 
+            public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            }
+
+            public void writeExternal(ObjectOutput out) throws IOException {
+            }
         } );
 
         Cheese bree = new Cheese();
@@ -310,8 +322,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( drl ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -334,9 +347,9 @@
         final Package pkg = builder.getPackage();
 
         // add the package to a rulebase
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List events = new ArrayList();
@@ -380,8 +393,9 @@
         final Package pkg = builder.getPackage();
 
         // add the package to a rulebase
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -415,8 +429,9 @@
         final Package pkg = builder.getPackage();
 
         // add the package to a rulebase
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         WorkingMemory workingMemory = ruleBase.newStatefulSession();
         List list = new ArrayList();
@@ -441,8 +456,9 @@
         final Package pkg = builder.getPackage();
 
         // add the package to a rulebase
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -475,8 +491,9 @@
         final Package pkg = builder.getPackage();
 
         // add the package to a rulebase
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         // load up the rulebase
         return ruleBase;
     }
@@ -485,7 +502,7 @@
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_ExplicitAnd.drl" ) );
         final RuleBase ruleBase = loadRuleBase( reader );
 
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
                                  list );
@@ -498,6 +515,7 @@
         workingMemory.insert( new Cheese( "brie",
                                           33 ) );
 
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
         workingMemory.fireAllRules();
         assertEquals( 1,
                       list.size() );
@@ -507,9 +525,9 @@
 
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "HelloWorld.drl" ) );
-        final RuleBase ruleBase = loadRuleBase( reader );
+        RuleBase ruleBase = loadRuleBase( reader );
 
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -522,6 +540,7 @@
 
         workingMemory.insert( message );
         workingMemory.insert( "boo" );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
         workingMemory.fireAllRules();
         assertTrue( message.isFired() );
         assertEquals( message,
@@ -533,14 +552,16 @@
 
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "MVEL_soundex.drl" ) );
-        final RuleBase ruleBase = loadRuleBase( reader );
+        RuleBase ruleBase = loadRuleBase( reader );
 
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, null);
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         Cheese c = new Cheese( "fubar",
                                2 );
 
         workingMemory.insert( c );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
         workingMemory.fireAllRules();
         assertEquals( 42,
                       c.getPrice() );
@@ -551,9 +572,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "literal_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -562,6 +584,7 @@
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
         workingMemory.insert( stilton );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
 
         workingMemory.fireAllRules();
 
@@ -574,9 +597,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "literal_with_boolean.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -587,6 +611,8 @@
                                                  12 );
         bill.setAlive( true );
         workingMemory.insert( bill );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
+
         workingMemory.fireAllRules();
 
         assertEquals( bill,
@@ -598,9 +624,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FactTemplate.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -613,6 +640,8 @@
         stilton.setFieldValue( "price",
                                new Integer( 100 ) );
         workingMemory.insert( stilton );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
+
         workingMemory.fireAllRules();
 
         assertEquals( 1,
@@ -632,9 +661,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_PropertyChange.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -643,6 +673,7 @@
         final State state = new State( "initial" );
         workingMemory.insert( state,
                               true );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
         workingMemory.fireAllRules();
 
         assertEquals( 1,
@@ -669,9 +700,10 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "big_decimal_and_comparable.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -689,6 +721,7 @@
 
         workingMemory.insert( bill );
         workingMemory.insert( ben );
+//        workingMemory    = SerializationHelper.serializeObject(workingMemory);
         workingMemory.fireAllRules();
 
         assertEquals( 1,
@@ -702,12 +735,15 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "evalmodify.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
-        final WorkingMemory memory = ruleBase.newStatefulSession();
+        WorkingMemory memory = ruleBase.newStatefulSession();
         memory.insert( cell1 );
         memory.insert( cell );
+//        memory    = SerializationHelper.serializeObject(memory);
         memory.fireAllRules();
         assertEquals( 9,
                       cell.getValue() );
@@ -752,12 +788,15 @@
                       ((AttributeDescr) ruleAttrs.get( 0 )).getValue() );
         assertEquals( "dialect",
                       ((AttributeDescr) ruleAttrs.get( 0 )).getName() );
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
 
-        final WorkingMemory memory = ruleBase.newStatefulSession();
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
+        WorkingMemory memory = ruleBase.newStatefulSession();
 
         memory.insert( p );
+//        memory    = SerializationHelper.serializeObject(memory);
         memory.fireAllRules();
 
     }
@@ -767,8 +806,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "or_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
@@ -808,8 +848,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simple_query_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stinky",
@@ -854,8 +895,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         workingMemory.setGlobal( "five",
@@ -879,8 +921,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "eval_rule_test_more.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -900,8 +943,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "returnvalue_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         workingMemory.setGlobal( "two",
@@ -933,8 +977,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "predicate_rule_test.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         workingMemory.setGlobal( "two",
@@ -966,8 +1011,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "null_behaviour.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final PersonInterface p1 = new Person( "michael",
@@ -988,8 +1034,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "null_constraint.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List foo = new ArrayList();
         workingMemory.setGlobal( "messages",
@@ -1015,8 +1062,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ImportFunctions.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final Cheese cheese = new Cheese( "stilton",
                                           15 );
@@ -1044,8 +1092,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_From.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List list1 = new ArrayList();
@@ -1102,8 +1151,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FromWithParams.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List list = new ArrayList();
@@ -1184,7 +1234,7 @@
 
         RuntimeException runtime = null;
         // this should ralph all over the place.
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         try {
             ruleBase.addPackage( pkg );
             fail( "Should have thrown an exception as the rule is NOT VALID." );
@@ -1192,6 +1242,7 @@
             assertNotNull( e.getMessage() );
             runtime = e;
         }
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         assertTrue( builder.getErrors().getErrors().length > 0 );
 
         final String pretty = builder.getErrors().toString();
@@ -1252,8 +1303,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionInConsequence.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1276,8 +1328,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "assert_retract.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1305,8 +1358,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "predicate_as_first_pattern.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese mussarela = new Cheese( "Mussarela",
@@ -1357,8 +1411,9 @@
         CustomConsequenceExceptionHandler handler = new CustomConsequenceExceptionHandler();
         conf.setConsequenceExceptionHandler( handler );
 
-        final RuleBase ruleBase = getRuleBase( conf );
+        RuleBase ruleBase = getRuleBase( conf );
         ruleBase.addPackage( pkg );
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese brie = new Cheese( "brie",
@@ -1386,6 +1441,13 @@
             return this.called;
         }
 
+        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            called  = in.readBoolean();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeBoolean(called);
+        }
     }
 
     public void testFunctionException() throws Exception {
@@ -1393,8 +1455,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionException.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese brie = new Cheese( "brie",
@@ -1415,8 +1478,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EvalException.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese brie = new Cheese( "brie",
@@ -1437,8 +1501,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_PredicateException.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese brie = new Cheese( "brie",
@@ -1459,8 +1524,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ReturnValueException.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese brie = new Cheese( "brie",
@@ -1480,8 +1546,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MultiRestrictionFieldConstraint.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list1 = new ArrayList();
@@ -1558,6 +1625,8 @@
 
         RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
         WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         List list = new ArrayList();
@@ -1640,8 +1709,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ContainsCheese.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1675,8 +1745,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_StaticField.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase);
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1708,8 +1779,10 @@
         PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DuplicateRuleName1.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DuplicateRuleName2.drl" ) ) );
@@ -1727,8 +1800,9 @@
         builder.addPackageFromDrl( reader );
         final Package pkg1 = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg1 );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg1.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         // Adding person with null name and likes attributes
@@ -1759,8 +1833,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyRule.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1778,8 +1853,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NoPatterns.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1798,8 +1874,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OrWithBindings.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -1830,8 +1907,10 @@
         builder.addPackageFromDrl( reader );
         final Package pkg1 = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg1 );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List orderedFacts = new ArrayList();
@@ -1865,8 +1944,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         workingMemory.fireAllRules();
@@ -1882,8 +1963,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_QueryWithParams.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         workingMemory.fireAllRules();
@@ -1923,8 +2006,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_TwoQuerries.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stinky",
@@ -1971,8 +2055,7 @@
 
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_JoinNodeModifyTuple.drl" ) );
-        final RuleBase ruleBase = loadRuleBase( reader );
-
+        RuleBase ruleBase = loadRuleBase( reader );
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
         // 1st time
@@ -2065,8 +2148,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DoubleQueryWithExists.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final Person p1 = new Person( "p1",
@@ -2150,8 +2234,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionWithPrimitives.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2174,8 +2259,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ReturnValueAndGlobal.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List matchlist = new ArrayList();
@@ -2215,8 +2301,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DeclaringAndUsingBindsInSamePattern.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase( config );
+        RuleBase ruleBase = getRuleBase( config );
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List sensors = new ArrayList();
@@ -2245,8 +2332,9 @@
             builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_missing_import.drl" ) ) );
             final Package pkg = builder.getPackage();
 
-            final RuleBase ruleBase = getRuleBase();
+            RuleBase ruleBase = getRuleBase();
             ruleBase.addPackage( pkg );
+            ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
             Assert.fail( "Should have thrown an InvalidRulePackage" );
         } catch ( final InvalidRulePackage e ) {
@@ -2263,8 +2351,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NestedConditionalElements.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2299,8 +2388,9 @@
             builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DeclarationUsage.drl" ) ) );
             final Package pkg = builder.getPackage();
 
-            final RuleBase ruleBase = getRuleBase();
+            RuleBase ruleBase = getRuleBase();
             ruleBase.addPackage( pkg );
+            ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
             fail( "Should have trown an exception" );
         } catch ( final InvalidRulePackage e ) {
@@ -2316,8 +2406,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_UnbalancedTrees.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
@@ -2342,11 +2433,12 @@
     }
 
     public void testImportConflict() throws Exception {
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ImportConflict.drl" ) ) );
         final Package pkg = builder.getPackage();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
     }
 
     public void testPrimitiveArray() throws Exception {
@@ -2354,8 +2446,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_primitiveArray.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+//        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List result = new ArrayList();
         workingMemory.setGlobal( "result",
@@ -2384,8 +2477,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_emptyIdentifier.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final List result = new ArrayList();
         workingMemory.setGlobal( "results",
@@ -2408,8 +2502,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_duplicateVariableBinding.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         final Map result = new HashMap();
         workingMemory.setGlobal( "results",
@@ -2465,8 +2560,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ShadowProxyInHirarchies.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         workingMemory.insert( new Child( "gp" ) );
@@ -2479,8 +2575,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_SelfReference.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -2516,8 +2613,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NumberComparisons.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2573,8 +2671,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_skipModify.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -2602,8 +2701,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EventModel.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
         final List agendaList = new ArrayList();
@@ -2691,8 +2791,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_implicitDeclarations.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -2715,8 +2816,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_castsInsideEval.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         workingMemory.setGlobal( "value",
@@ -2730,8 +2832,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_memberOf.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2768,8 +2871,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_contains_in_array.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2796,8 +2900,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_collectNodeSharing.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2823,8 +2928,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_nodeSharingNotExists.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2856,8 +2962,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_nullBindings.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -2882,8 +2989,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RetractModifyWithFunction.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final AbstractWorkingMemory workingMemory = (AbstractWorkingMemory) ruleBase.newStatefulSession();
 
         final Cheese stilton = new Cheese( "stilton",
@@ -2913,8 +3021,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ConstraintConnectors.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -2975,8 +3084,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MatchesNotMatches.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3032,8 +3142,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_AutoBindings.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3069,8 +3180,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_QualifiedFieldReference.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3098,8 +3210,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EvalRewrite.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3168,8 +3281,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_MapAccess.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3199,8 +3313,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_halt.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3223,8 +3338,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_fireLimit.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3274,8 +3390,9 @@
 
         RuleBaseConfiguration conf = new RuleBaseConfiguration();
         conf.setAssertBehaviour( RuleBaseConfiguration.AssertBehaviour.EQUALITY );
-        final RuleBase ruleBase = getRuleBase( conf );
+        RuleBase ruleBase = getRuleBase( conf );
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3302,8 +3419,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_charComparisons.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3341,8 +3459,9 @@
 
         final RuleBaseConfiguration conf = new RuleBaseConfiguration();
         conf.setShareAlphaNodes( false );
-        final RuleBase ruleBase = getRuleBase( conf );
+        RuleBase ruleBase = getRuleBase( conf );
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3373,8 +3492,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_functionCallingFunction.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3398,8 +3518,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_functionCallingFunction.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -3420,8 +3541,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_SelfReference2.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3468,9 +3590,11 @@
             assertEquals( 1,
                           pkg2.getRules().length );
 
-            final RuleBase ruleBase = getRuleBase();
+            RuleBase ruleBase = getRuleBase();
             ruleBase.addPackage( pkg1 );
             ruleBase.addPackage( pkg2 );
+            ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                              ((ReteooRuleBase)ruleBase).getCompositePackageClassLoader());
             final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
             final List results = new ArrayList();
@@ -3509,8 +3633,9 @@
             assertEquals( 1,
                           pkg1.getRules().length );
 
-            final RuleBase ruleBase = getRuleBase();
+            RuleBase ruleBase = getRuleBase();
             ruleBase.addPackage( pkg1 );
+            ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg1.getDialectDatas().getClassLoader());
             final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
             final List results = new ArrayList();
@@ -3551,8 +3676,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_bindings.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3577,8 +3703,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_multipleFroms.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3609,8 +3736,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NullHashing.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3635,8 +3763,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DefaultBetaConstraint.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3748,8 +3877,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_BooleanWrapper.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3786,6 +3916,7 @@
         conf.setShadowProxy( true );
         RuleBase rb = RuleBaseFactory.newRuleBase( conf );
         rb.addPackage( builder.getPackage() );
+        rb    = SerializationHelper.serializeObject(rb, builder.getPackage().getDialectDatas().getClassLoader());
         StatefulSession session = rb.newStatefulSession();
 
         List list1 = new ArrayList();
@@ -3844,8 +3975,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_IterateObjects.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -3873,8 +4005,9 @@
 
         RuleBaseConfiguration conf = new RuleBaseConfiguration();
         conf.setSequential( true );
-        final RuleBase ruleBase = getRuleBase( conf );
+        RuleBase ruleBase = getRuleBase( conf );
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         StatelessSession session = ruleBase.newStatelessSession();
         List list = new ArrayList();
@@ -3891,8 +4024,9 @@
         builder.addPackageFromDrl( new StringReader( rule ) );
         Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         StatefulSession session = ruleBase.newStatefulSession();
         List list = new ArrayList();
@@ -3924,8 +4058,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EvalRewriteWithSpecialOperators.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4027,9 +4162,10 @@
         final Package pkg = builder.getPackage();
         final Package pkg2 = builder2.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
         ruleBase.addPackage( pkg2 );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -4046,8 +4182,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_AutoVivificationVR.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -4069,8 +4206,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ShadowProxyOnCollections.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List results = new ArrayList();
@@ -4094,8 +4232,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Query.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
         workingMemory.fireAllRules();
@@ -4115,8 +4255,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NestedAccessors.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -4173,8 +4315,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Logger.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
 
         final WorkingMemory wm = ruleBase.newStatefulSession();
 
@@ -4203,8 +4346,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FromNestedAccessors.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -4238,10 +4383,12 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_SubNetworks.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
 
         try {
             ruleBase.addPackage( builder.getPackage() );
+            ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                              builder.getPackage().getDialectDatas().getClassLoader());
         } catch ( Exception e ) {
             e.printStackTrace();
             fail( "Should not raise any exception!" );
@@ -4253,8 +4400,10 @@
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FinalClass.drl" ) ) );
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( builder.getPackage() );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase,
+                                                          builder.getPackage().getDialectDatas().getClassLoader());
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -4288,8 +4437,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EvalRewriteMatches.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4329,8 +4479,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RuntimeTypeCoercion.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4373,8 +4524,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RuntimeTypeCoercion2.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4431,8 +4583,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_AlphaEvalWithOrCE.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4458,8 +4611,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ModifyRetractInsert.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4485,8 +4639,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_JavaModifyBlock.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4516,8 +4671,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OrCE.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4540,8 +4696,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DeepNestedConstraints.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4565,8 +4722,9 @@
     public void testGetFactHandleEqualityBehavior() throws Exception {
         final RuleBaseConfiguration conf = new RuleBaseConfiguration();
         conf.setAssertBehaviour( RuleBaseConfiguration.AssertBehaviour.EQUALITY );
-        final RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
 
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, null);
         final StatefulSession session = ruleBase.newStatefulSession();
 
         CheeseEqual cheese = new CheeseEqual( "stilton",
@@ -4580,8 +4738,9 @@
     public void testGetFactHandleIdentityBehavior() throws Exception {
         final RuleBaseConfiguration conf = new RuleBaseConfiguration();
         conf.setAssertBehaviour( RuleBaseConfiguration.AssertBehaviour.IDENTITY );
-        final RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
 
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, null);
         final StatefulSession session = ruleBase.newStatefulSession();
 
         CheeseEqual cheese = new CheeseEqual( "stilton",
@@ -4599,8 +4758,9 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_OrCEFollowedByEval.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
@@ -4623,14 +4783,15 @@
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NPEOnMVELPredicate.drl" ) ) );
         final Package pkg = builder.getPackage();
 
-        final RuleBase ruleBase = getRuleBase();
+        RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
+        ruleBase    = SerializationHelper.serializeObject(ruleBase, pkg.getDialectDatas().getClassLoader());
         final StatefulSession session = ruleBase.newStatefulSession();
 
         final List list = new ArrayList();
         session.setGlobal( "results",
                                  list );
-        
+
         Cheese cheese = new Cheese( "stilton", 10 );
         Cheesery cheesery = new Cheesery();
         cheesery.addCheese( cheese );
@@ -4646,15 +4807,15 @@
         assertEquals( "should not have fired",
                       0,
                       list.size() );
-        
+
         cheese2.setType( "stilton" );
-        
+
         session.update( p, bob );
         session.fireAllRules();
-        
+
         assertEquals( 1,
                       list.size() );
-        
+
     }
-    
+
 }

Added: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java	                        (rev 0)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -0,0 +1,29 @@
+package org.drools.integrationtests;
+
+import org.drools.common.DroolsObjectOutputStream;
+import org.drools.common.DroolsObjectInputStream;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ByteArrayInputStream;
+
+/**
+ * Marshalling helper class to perform serialize/de-serialize a given object
+ */
+public class SerializationHelper {
+    public static <T> T serializeObject(T obj, ClassLoader classLoader) throws IOException, ClassNotFoundException {
+        return (T)serializeIn(serializeOut(obj), classLoader);
+    }
+
+    public static byte[] serializeOut(Object obj) throws IOException {
+        ByteArrayOutputStream   out = new ByteArrayOutputStream();
+        new DroolsObjectOutputStream(out).writeObject(obj);
+        out.close();
+        return out.toByteArray();
+    }
+
+    public static Object serializeIn(byte[] bytes, ClassLoader classLoader)
+            throws IOException, ClassNotFoundException {
+        return new DroolsObjectInputStream(new ByteArrayInputStream(bytes), classLoader).readObject();
+    }
+}

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Stage.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Stage.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/integrationtests/waltz/Stage.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -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.
@@ -18,19 +18,23 @@
 
 /**
  * @author Alexander Bagerman
- * 
+ *
  */
 
 import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 /**
- * 
+ *
  * @author Alexander Bagerman
  *
  */
 public class Stage
     implements
-    Serializable {
+    Externalizable {
     private static final long serialVersionUID      = 400L;
 
     final public static int   START                 = 0;
@@ -59,6 +63,13 @@
         this.value = value;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        value   = in.readInt();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(value);
+    }
     public int getValue() {
         return this.value;
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockFactHandle.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockFactHandle.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockFactHandle.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,22 +2,25 @@
 
 import org.drools.FactHandle;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 /*
- * 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+* 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.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
 
 public class MockFactHandle
     implements
@@ -28,10 +31,23 @@
     private static final long serialVersionUID = 400L;
     private int               id;
 
+    public MockFactHandle() {
+
+    }
+
     public MockFactHandle(final int id) {
         this.id = id;
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        id  = in.readInt();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(id);
+    }
+
+
     public String toExternalForm() {
         return "[fact:" + this.id + "]";
     }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -2,6 +2,8 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
 import java.util.List;
 
 import org.drools.ClockType;
@@ -124,7 +126,14 @@
 
     public void addPackage(Package pkg) {
         // TODO Auto-generated method stub
-        
+
     }
 
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+
+    }
 }

Modified: labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-03-12 21:20:57 UTC (rev 18901)
+++ labs/jbossrules/branches/ming-serialization/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-03-12 21:22:07 UTC (rev 18902)
@@ -7,6 +7,9 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 
 import org.drools.Agenda;
 import org.drools.EntryPointInterface;
@@ -53,7 +56,21 @@
 	TimeMachine timeMachine = new TimeMachine();
 	Map<String, Object> globals = new HashMap<String, Object>();
 
-	public void addLIANodePropagation(LIANodePropagation liaNodePropagation) {
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        facts   = (List<Object>)in.readObject();
+        agendaEventListener   = (AgendaEventListener)in.readObject();
+        timeMachine   = (TimeMachine)in.readObject();
+        globals   = (Map<String, Object>)in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(facts);
+        out.writeObject(agendaEventListener);
+        out.writeObject(timeMachine);
+        out.writeObject(globals);
+    }
+
+    public void addLIANodePropagation(LIANodePropagation liaNodePropagation) {
 		// TODO Auto-generated method stub
 
 	}
@@ -248,7 +265,7 @@
 		this.facts .add(object);
 		return new MockFactHandle(object.hashCode());
 	}
-	
+
 	public FactHandle insert(Object object, long duration)
 		throws FactException {
 		// TODO Auto-generated method stub
@@ -260,7 +277,7 @@
 		// TODO Auto-generated method stub
 		return null;
 	}
-	
+
 	public FactHandle insert(Object object, long duration, boolean dynamic)
 			throws FactException {
 		// TODO Auto-generated method stub
@@ -409,17 +426,17 @@
 
     public void setId(long id) {
         // TODO Auto-generated method stub
-        
+
     }
 
     public void setRuleBase(InternalRuleBase ruleBase) {
         // TODO Auto-generated method stub
-        
+
     }
 
     public void removeProcessInstance(ProcessInstance processInstance) {
         // TODO Auto-generated method stub
-        
+
     }
 
     public ProcessInstance getProcessInstance(long id) {
@@ -471,7 +488,7 @@
     public void registerProcessInstanceFactory(String type,
             ProcessInstanceFactory nodeInstanceFactory) {
         // TODO Auto-generated method stub
-        
+
     }
 
     public ObjectStore getObjectStore() {
@@ -486,7 +503,7 @@
 
     public void setExecutorService(ExecutorService executor) {
         // TODO Auto-generated method stub
-        
+
     }
 
 }




More information about the jboss-svn-commits mailing list