[jboss-svn-commits] JBL Code SVN: r12700 - in labs/jbossrules/trunk/drools-core: src/main/java/org/drools and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 19 23:30:07 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-06-19 23:30:07 -0400 (Tue, 19 Jun 2007)
New Revision: 12700

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectInputStreamWithLoader.java
Modified:
   labs/jbossrules/trunk/drools-core/.classpath
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/MVELClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ChainedProperties.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/BaseClassFieldExtractorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/AgendaEventSupportTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexEntryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexHashTableTest.java
Log:
-refactor for more robust classloading

Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/.classpath	2007-06-20 03:30:07 UTC (rev 12700)
@@ -6,7 +6,7 @@
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
   <classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta25/mvel14-1.2beta25.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta26/mvel14-1.2beta26.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -283,14 +283,10 @@
     void update(FactHandle handle,
                       Object object) throws FactException;
     
-    public void modifyRetract(final FactHandle factHandle,
-                              final Rule rule,
-                              final Activation activation);
+    public void modifyRetract(final FactHandle factHandle);
     
     public void modifyInsert(final FactHandle factHandle,
-                             final Object object,
-                             final Rule rule,
-                             final Activation activation);    
+                             final Object object);    
 
     /**
      * Sets the AsyncExceptionHandler to handle exceptions thrown by the Agenda

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -12,6 +12,7 @@
 
 import org.drools.RuleBase;
 import org.drools.RuntimeDroolsException;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.rule.Package;
 
 /**
@@ -96,7 +97,7 @@
     public static Package readPackage(File pkgFile) throws IOException,
                                                   FileNotFoundException,
                                                   ClassNotFoundException {
-        ObjectInputStream in = new ObjectInputStream( new FileInputStream( pkgFile ) );
+        ObjectInputStream in = new DroolsObjectInputStream( new FileInputStream( pkgFile ) );
         Package p1_ = (Package) in.readObject();
         in.close();
         return p1_;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -21,6 +21,7 @@
 import java.lang.reflect.Method;
 
 import org.drools.RuntimeDroolsException;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.spi.FieldExtractor;
 
 /**
@@ -68,7 +69,7 @@
     
     private Object readResolve() {
         // always return the value from the cache
-        return ClassFieldExtractorCache.getExtractor( this.clazz, this.fieldName );
+        return ClassFieldExtractorCache.getExtractor( this.clazz, this.fieldName, this.clazz.getClassLoader() );
     }    
 
     public void init(final ClassLoader classLoader) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -20,18 +20,7 @@
         return instance;
     }
 
-    private ClassFieldExtractorCache() {
-
-    }
-
     public static ClassFieldExtractor getExtractor(final Class clazz,
-                                                   final String fieldName) {
-        return getExtractor( clazz,
-                             fieldName,
-                             null );
-    }
-
-    public static ClassFieldExtractor getExtractor(final Class clazz,
                                                    final String fieldName,
                                                    ClassLoader classLoader) {
         if ( cache == null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -72,17 +72,13 @@
     }
 
     public static BaseClassFieldExtractor getClassFieldExtractor(final Class clazz,
-                                                                 final String fieldName) {
-        return getClassFieldExtractor( clazz,
-                                       fieldName,
-                                       null );
-    }
-
-    public static BaseClassFieldExtractor getClassFieldExtractor(final Class clazz,
                                                                  final String fieldName,
                                                                  final ClassLoader classLoader) {
         if ( byteArrayClassLoader == null ) {
-            byteArrayClassLoader = new ByteArrayClassLoader( (classLoader != null) ? classLoader : Thread.currentThread().getContextClassLoader() );            
+            if (classLoader == null ) {
+                throw new RuntimeDroolsException("ClassFieldExtractorFactory cannot have a null parent ClassLoader" );
+            }            
+            byteArrayClassLoader = new ByteArrayClassLoader( classLoader );            
         }
         try {
             // if it is a self reference
@@ -93,7 +89,8 @@
             } else if( fieldName.indexOf( '.' ) > -1 || fieldName.indexOf( '[' ) > -1 ) {
                 // we need MVEL extractor for expressions
                 return new MVELClassFieldExtractor( clazz,
-                                                    fieldName );
+                                                    fieldName,
+                                                    classLoader );
             } else {
                 // otherwise, bytecode generate a specific extractor
                 ClassFieldInspector inspector = (ClassFieldInspector) inspectors.get( clazz );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -25,6 +25,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.drools.RuntimeDroolsException;
+
 public class ClassTypeResolver
     implements
     TypeResolver {
@@ -54,27 +56,14 @@
                               "C" );
     }
 
-    public ClassTypeResolver() {
-        this( Collections.EMPTY_LIST );
-    }
-
-    public ClassTypeResolver(final List imports) {
-        this( imports,
-              null );
-    }
-
     public ClassTypeResolver(final List imports,
                              ClassLoader classLoader) {
         this.imports = imports;
 
         if ( classLoader == null ) {
-            classLoader = Thread.currentThread().getContextClassLoader();
+            throw new RuntimeDroolsException( "ClassTypeResolver cannot have a null parent ClassLoader" );
         }
-
-        if ( classLoader == null ) {
-            classLoader = getClass().getClassLoader();
-        }
-
+        
         this.classLoader = classLoader;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -47,7 +47,6 @@
         this.workingMemory = (InternalWorkingMemoryActions) workingMemory;
     }
 
-
     public void setActivation(final Activation agendaItem) {
         this.rule = agendaItem.getRule();
         this.subrule = agendaItem.getSubRule();
@@ -57,92 +56,111 @@
 
     public void insert(final Object object) throws FactException {
         insert( object,
-                      false );
+                false );
     }
 
     public void insert(final Object object,
-                             final boolean dynamic) throws FactException {
+                       final boolean dynamic) throws FactException {
         this.workingMemory.insert( object,
-                                         dynamic,
-                                         false,
-                                         this.rule,
-                                         this.activation );
+                                   dynamic,
+                                   false,
+                                   this.rule,
+                                   this.activation );
     }
 
     public void insertLogical(final Object object) throws FactException {
         insertLogical( object,
-                             false );
+                       false );
     }
 
     public void insertLogical(final Object object,
-                                    final boolean dynamic) throws FactException {
+                              final boolean dynamic) throws FactException {
         this.workingMemory.insert( object,
-                                         dynamic,
-                                         true,
-                                         this.rule,
-                                         this.activation );
+                                   dynamic,
+                                   true,
+                                   this.rule,
+                                   this.activation );
     }
 
     public void update(final FactHandle handle,
-                             final Object newObject) throws FactException {
+                       final Object newObject) throws FactException {
         // only update if this fact exists in the wm
         this.workingMemory.update( handle,
-                                         newObject,
-                                         this.rule,
-                                         this.activation );
+                                   newObject,
+                                   this.rule,
+                                   this.activation );
     }
 
-    public void update( final Object object ) throws FactException {
+    public void update(final Object object) throws FactException {
         FactHandle handle = this.workingMemory.getFactHandle( object );
-        if( handle == null ) {
-            throw new FactException("Update error: handle not found for object: "+object+". Is it in the working memory?");
+        if ( handle == null ) {
+            throw new FactException( "Update error: handle not found for object: " + object + ". Is it in the working memory?" );
         }
         // only update if this fact exists in the wm
         this.workingMemory.update( handle,
-                                         object,
-                                         this.rule,
-                                         this.activation );
+                                   object,
+                                   this.rule,
+                                   this.activation );
     }
 
     public void retract(final FactHandle handle) throws FactException {
         this.workingMemory.retract( handle,
-                                          true,
-                                          true,
-                                          this.rule,
-                                          this.activation );
+                                    true,
+                                    true,
+                                    this.rule,
+                                    this.activation );
     }
 
     public void retract(final Object object) throws FactException {
         FactHandle handle = this.workingMemory.getFactHandle( object );
-        if( handle == null ) {
-            throw new FactException("Retract error: handle not found for object: "+object+". Is it in the working memory?");
+        if ( handle == null ) {
+            throw new FactException( "Retract error: handle not found for object: " + object + ". Is it in the working memory?" );
         }
         this.workingMemory.retract( handle,
-                                          true,
-                                          true,
-                                          this.rule,
-                                          this.activation );
+                                    true,
+                                    true,
+                                    this.rule,
+                                    this.activation );
     }
 
+    public void modifyRetract(final Object object) {
+        FactHandle handle = this.workingMemory.getFactHandle( object );
+        this.workingMemory.modifyRetract( handle, rule, activation );
+    }
+
+    public void modifyRetract(final FactHandle factHandle) {
+        this.workingMemory.modifyRetract( factHandle, rule, activation );
+    }
+
+    public void modifyInsert(final Object object) {
+        FactHandle handle = this.workingMemory.getFactHandle( object );
+        this.workingMemory.modifyInsert( handle, object, rule, activation );
+    }
+
+    public void modifyInsert(final FactHandle factHandle,
+                             final Object object) {
+        this.workingMemory.modifyInsert( factHandle, object, rule, activation );        
+    }
+
     public Rule getRule() {
         return this.rule;
     }
 
-//    public List getObjects() {
-//        return null; //this.workingMemory.getObjects();
-//    }
-//
-//    public List getObjects(final Class objectClass) {
-//        return null; //this.workingMemory.getObjects( objectClass );
-//    }
-//
-//    public void clearAgenda() {
-//        this.workingMemory.clearAgenda();
-//    }
-//
-//    public void clearAgendaGroup(final String group) {
-//        this.workingMemory.clearAgendaGroup( group );
-//    }
+    //    public List getObjects() {
+    //        return null; //this.workingMemory.getObjects();
+    //    }
+    //
+    //    public List getObjects(final Class objectClass) {
+    //        return null; //this.workingMemory.getObjects( objectClass );
+    //    }
+    //
+    //    public void clearAgenda() {
+    //        this.workingMemory.clearAgenda();
+    //    }
+    //
+    //    public void clearAgendaGroup(final String group) {
+    //        this.workingMemory.clearAgendaGroup( group );
+    //    }
 
     public Object get(final Declaration declaration) {
         return declaration.getValue( this.tuple.get( declaration ).getObject() );
@@ -160,22 +178,23 @@
         return this.activation;
     }
 
-//    public QueryResults getQueryResults(final String query) {
-//        return this.workingMemory.getQueryResults( query );
-//    }
-//
-//    public AgendaGroup getFocus() {
-//        return this.workingMemory.getFocus();
-//    }
-//
+    //    public QueryResults getQueryResults(final String query) {
+    //        return this.workingMemory.getQueryResults( query );
+    //    }
+    //
+    //    public AgendaGroup getFocus() {
+    //        return this.workingMemory.getFocus();
+    //    }
+    //
     public void setFocus(final String focus) {
         this.workingMemory.setFocus( focus );
     }
-//
-//    public void setFocus(final AgendaGroup focus) {
-//        this.workingMemory.setFocus( focus );
-//    }
 
+    //
+    //    public void setFocus(final AgendaGroup focus) {
+    //        this.workingMemory.setFocus( focus );
+    //    }
+
     public Declaration getDeclaration(final String identifier) {
         return (Declaration) this.subrule.getOuterDeclarations().get( identifier );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/MVELClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/MVELClassFieldExtractor.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/MVELClassFieldExtractor.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -46,7 +46,8 @@
     private Map variables = null; 
 
     public MVELClassFieldExtractor(Class clazz,
-                                   String fieldName) {
+                                   String fieldName,
+                                   ClassLoader classLoader) {
         super( -1, // index
                Object.class, // fieldType
                ValueType.determineValueType( Object.class ) ); // value type
@@ -59,8 +60,8 @@
         Set inputs = compiler.getInputs();
         for( Iterator it = inputs.iterator(); it.hasNext(); ) {
             String basefield = (String) it.next();
-            
-            Extractor extr = ClassFieldExtractorCache.getExtractor(  clazz, basefield );
+                        
+            Extractor extr = ClassFieldExtractorCache.getExtractor(  clazz, basefield, classLoader );
             this.extractors.put( basefield, extr );
         }
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -75,7 +75,7 @@
     protected Map                                   processes;
 
     protected transient CompositePackageClassLoader packageClassLoader;
-    
+
     protected transient MapBackedClassLoader        classLoader;
 
     /** The fact handle factory. */
@@ -87,7 +87,7 @@
      * WeakHashMap to keep references of WorkingMemories but allow them to be
      * garbage collected
      */
-    protected transient ObjectHashSet               statefulSessions;    
+    protected transient ObjectHashSet               statefulSessions;
 
     /**
      * Default constructor - for Externalizable. This should never be used by a user, as it 
@@ -163,33 +163,36 @@
                                final Object[] objects) throws IOException,
                                                       ClassNotFoundException {
         // PackageCompilationData must be restored before Rules as it has the ClassLoader needed to resolve the generated code references in Rules
-        this.pkgs = (Map) stream.readObject();
+        DroolsObjectInputStream parentStream = (DroolsObjectInputStream) stream;
+        parentStream.setRuleBase( this );
+        this.pkgs = (Map) parentStream.readObject();
 
-        this.packageClassLoader = new CompositePackageClassLoader( Thread.currentThread().getContextClassLoader() );
+        this.packageClassLoader = new CompositePackageClassLoader( parentStream.getClassLoader() );
         for ( final Iterator it = this.pkgs.values().iterator(); it.hasNext(); ) {
             this.packageClassLoader.addClassLoader( ((Package) it.next()).getPackageCompilationData().getClassLoader() );
         }
-        
-        this.classLoader = new MapBackedClassLoader( Thread.currentThread().getContextClassLoader() );
-        this.packageClassLoader.addClassLoader( this.classLoader );        
 
+        this.classLoader = new MapBackedClassLoader( parentStream.getClassLoader() );
+        this.packageClassLoader.addClassLoader( this.classLoader );
+
         // Return the rules stored as a byte[]
-        final byte[] bytes = (byte[]) stream.readObject();
+        final byte[] bytes = (byte[]) parentStream.readObject();
 
         //  Use a custom ObjectInputStream that can resolve against a given classLoader
-        final ObjectInputStreamWithLoader streamWithLoader = new ObjectInputStreamWithLoader( new ByteArrayInputStream( bytes ),
-                                                                                              this.packageClassLoader );
+        final DroolsObjectInputStream childStream = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ),
+                                                                                 this.packageClassLoader );
+        childStream.setRuleBase( this );
 
-        this.id = (String) streamWithLoader.readObject();
-        this.factHandleFactory = (FactHandleFactory) streamWithLoader.readObject();
-        this.globals = (Map) streamWithLoader.readObject();
+        this.id = (String) childStream.readObject();
+        this.factHandleFactory = (FactHandleFactory) childStream.readObject();
+        this.globals = (Map) childStream.readObject();
 
-        this.config = (RuleBaseConfiguration) streamWithLoader.readObject();
+        this.config = (RuleBaseConfiguration) childStream.readObject();
 
         this.statefulSessions = new ObjectHashSet();
 
         for ( int i = 0, length = objects.length; i < length; i++ ) {
-            objects[i] = streamWithLoader.readObject();
+            objects[i] = childStream.readObject();
         }
     }
 
@@ -303,14 +306,15 @@
             }
 
             //and now the rule flows
-            if (newPkg.getRuleFlows() != Collections.EMPTY_MAP) { 
+            if ( newPkg.getRuleFlows() != Collections.EMPTY_MAP ) {
                 Map flows = newPkg.getRuleFlows();
                 for ( Iterator iter = flows.entrySet().iterator(); iter.hasNext(); ) {
                     Entry flow = (Entry) iter.next();
-                    this.processes.put( flow.getKey(), flow.getValue() );
+                    this.processes.put( flow.getKey(),
+                                        flow.getValue() );
                 }
             }
-            
+
             this.packageClassLoader.addClassLoader( newPkg.getPackageCompilationData().getClassLoader() );
 
         } finally {
@@ -487,17 +491,17 @@
     protected synchronized void addStatefulSession(final StatefulSession statefulSession) {
         this.statefulSessions.add( statefulSession );
     }
-    
+
     public Package getPackage(String name) {
-        return ( Package ) this.pkgs.get( name );
+        return (Package) this.pkgs.get( name );
     }
 
     public StatefulSession[] getStatefulSessions() {
-        return (StatefulSession[]) this.statefulSessions.toArray( new StatefulSession[ this.statefulSessions.size() ] );
+        return (StatefulSession[]) this.statefulSessions.toArray( new StatefulSession[this.statefulSessions.size()] );
     }
-    
+
     public InternalWorkingMemory[] getWorkingMemories() {
-        return (InternalWorkingMemory[]) this.statefulSessions.toArray( new InternalWorkingMemory[ this.statefulSessions.size() ] );
+        return (InternalWorkingMemory[]) this.statefulSessions.toArray( new InternalWorkingMemory[this.statefulSessions.size()] );
     }
 
     public RuleBaseConfiguration getConfiguration() {
@@ -514,23 +518,25 @@
                                               final boolean keepReference) throws IOException,
                                                                           ClassNotFoundException {
 
-        final ObjectInputStreamWithLoader streamWithLoader = new ObjectInputStreamWithLoader( stream,
-                                                                                              this.packageClassLoader );
+        final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( stream,
+                                                                                      this.packageClassLoader );
 
         final AbstractWorkingMemory workingMemory = (AbstractWorkingMemory) streamWithLoader.readObject();
         workingMemory.setRuleBase( this );
 
         return (StatefulSession) workingMemory;
     }
-    
-    public void addClass(String className, byte[] bytes) {
-        this.classLoader.addClass( className, bytes );
+
+    public void addClass(String className,
+                         byte[] bytes) {
+        this.classLoader.addClass( className,
+                                   bytes );
     }
-    
+
     public CompositePackageClassLoader getCompositePackageClassLoader() {
         return this.packageClassLoader;
     }
-    
+
     public MapBackedClassLoader getMapBackedClassLoader() {
         return this.classLoader;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -582,10 +582,10 @@
      */
     public FactHandle insert(final Object object) throws FactException {
         return insert( object, /* Not-Dynamic */
-                             false,
-                             false,
-                             null,
-                             null );
+                       false,
+                       false,
+                       null,
+                       null );
     }
 
     /**
@@ -593,35 +593,35 @@
      */
     public FactHandle insertLogical(final Object object) throws FactException {
         return insert( object, /* Not-Dynamic */
-                             false,
-                             true,
-                             null,
-                             null );
+                       false,
+                       true,
+                       null,
+                       null );
     }
 
     public FactHandle insert(final Object object,
-                                   final boolean dynamic) throws FactException {
+                             final boolean dynamic) throws FactException {
         return insert( object,
-                             dynamic,
-                             false,
-                             null,
-                             null );
+                       dynamic,
+                       false,
+                       null,
+                       null );
     }
 
     public FactHandle insertLogical(final Object object,
-                                          final boolean dynamic) throws FactException {
+                                    final boolean dynamic) throws FactException {
         return insert( object,
-                             dynamic,
-                             true,
-                             null,
-                             null );
+                       dynamic,
+                       true,
+                       null,
+                       null );
     }
 
     public FactHandle insert(final Object object,
-                                   final boolean dynamic,
-                                   boolean logical,
-                                   final Rule rule,
-                                   final Activation activation) throws FactException {
+                             final boolean dynamic,
+                             boolean logical,
+                             final Rule rule,
+                             final Activation activation) throws FactException {
         if ( object == null ) {
             // you cannot assert a null object
             return null;
@@ -770,8 +770,8 @@
                                                                                       this.agenda.getDormantActivations() );
 
             doInsert( handle,
-                            object,
-                            propagationContext );
+                      object,
+                      propagationContext );
 
             this.workingMemoryEventSupport.fireObjectInserted( propagationContext,
                                                                handle,
@@ -810,8 +810,8 @@
     }
 
     public abstract void doInsert(InternalFactHandle factHandle,
-                                        Object object,
-                                        PropagationContext propagationContext) throws FactException;
+                                  Object object,
+                                  PropagationContext propagationContext) throws FactException;
 
     protected void removePropertyChangeListener(final FactHandle handle) throws NoSuchFactObjectException {
         Object object = null;
@@ -846,10 +846,10 @@
 
     public void retract(final FactHandle handle) throws FactException {
         retract( handle,
-                       true,
-                       true,
-                       null,
-                       null );
+                 true,
+                 true,
+                 null,
+                 null );
     }
 
     public abstract void doRetract(InternalFactHandle factHandle,
@@ -859,10 +859,10 @@
      * @see WorkingMemory
      */
     public void retract(final FactHandle factHandle,
-                              final boolean removeLogical,
-                              final boolean updateEqualsMap,
-                              final Rule rule,
-                              final Activation activation) throws FactException {
+                        final boolean removeLogical,
+                        final boolean updateEqualsMap,
+                        final Rule rule,
+                        final Activation activation) throws FactException {
         try {
             this.lock.lock();
             final InternalFactHandle handle = (InternalFactHandle) factHandle;
@@ -920,6 +920,12 @@
         }
     }
 
+    public void modifyRetract(final FactHandle factHandle) {
+        modifyRetract( factHandle,
+                       null,
+                       null );
+    }
+
     public void modifyRetract(final FactHandle factHandle,
                               final Rule rule,
                               final Activation activation) {
@@ -961,6 +967,14 @@
     }
 
     public void modifyInsert(final FactHandle factHandle,
+                             final Object object) {
+        modifyInsert( factHandle,
+                      object,
+                      null,
+                      null );
+    }
+
+    public void modifyInsert(final FactHandle factHandle,
                              final Object object,
                              final Rule rule,
                              final Activation activation) {
@@ -995,13 +1009,13 @@
                                                                                       this.agenda.getDormantActivations() );
 
             doInsert( handle,
-                            object,
-                            propagationContext );
+                      object,
+                      propagationContext );
 
             this.workingMemoryEventSupport.fireObjectUpdated( propagationContext,
-                                                               factHandle,
-                                                               originalObject,
-                                                               object );
+                                                              factHandle,
+                                                              originalObject,
+                                                              object );
 
             propagationContext.clearRetractedTuples();
 
@@ -1014,11 +1028,11 @@
     }
 
     public void update(final FactHandle handle,
-                             final Object object) throws FactException {
+                       final Object object) throws FactException {
         update( handle,
-                      object,
-                      null,
-                      null );
+                object,
+                null,
+                null );
     }
 
     /**
@@ -1028,9 +1042,9 @@
      * @see WorkingMemory
      */
     public void update(final FactHandle factHandle,
-                             final Object object,
-                             final Rule rule,
-                             final Activation activation) throws FactException {
+                       final Object object,
+                       final Rule rule,
+                       final Activation activation) throws FactException {
         try {
             this.lock.lock();
             // only needed if we maintain tms, but either way we must get it before we do the retract
@@ -1096,13 +1110,13 @@
             this.handleFactory.increaseFactHandleRecency( handle );
 
             doInsert( handle,
-                            object,
-                            propagationContext );
+                      object,
+                      propagationContext );
 
             this.workingMemoryEventSupport.fireObjectUpdated( propagationContext,
-                                                               factHandle,
-                                                               originalObject,
-                                                               object );
+                                                              factHandle,
+                                                              originalObject,
+                                                              object );
 
             propagationContext.clearRetractedTuples();
 
@@ -1200,7 +1214,7 @@
 
         try {
             update( getFactHandle( object ),
-                          object );
+                    object );
         } catch ( final NoSuchFactHandleException e ) {
             // Not a fact so unable to process the chnage event
         } catch ( final FactException e ) {

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java (from rev 12646, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectInputStreamWithLoader.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DroolsObjectInputStream.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -0,0 +1,97 @@
+/**
+ * 
+ */
+package org.drools.common;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+import java.util.HashMap;
+
+public class DroolsObjectInputStream extends ObjectInputStream {
+    private final ClassLoader      classLoader;
+    private InternalRuleBase ruleBase;
+    private InternalWorkingMemory  workingMemory;
+
+    /** table mapping primitive type names to corresponding class objects */
+    private static final HashMap   primClasses = new HashMap( 8,
+                                                              1.0F );
+    static {
+        primClasses.put( "boolean",
+                         boolean.class );
+        primClasses.put( "byte",
+                         byte.class );
+        primClasses.put( "char",
+                         char.class );
+        primClasses.put( "short",
+                         short.class );
+        primClasses.put( "int",
+                         int.class );
+        primClasses.put( "long",
+                         long.class );
+        primClasses.put( "float",
+                         float.class );
+        primClasses.put( "double",
+                         double.class );
+        primClasses.put( "void",
+                         void.class );
+    }
+    
+    public DroolsObjectInputStream(final InputStream in) throws IOException {
+        this( in, null );
+    }    
+
+    public DroolsObjectInputStream(final InputStream in,
+                                   ClassLoader classLoader) throws IOException {
+        super( in );
+        if ( classLoader == null ) {
+            classLoader = Thread.currentThread().getContextClassLoader();
+            if ( classLoader == null ) {
+                classLoader = this.getClass().getClassLoader();
+            }
+        }  
+        
+        this.classLoader = classLoader;
+        enableResolveObject( true );
+    }
+
+    public ClassLoader getClassLoader() {
+        return this.classLoader;
+    }
+
+    protected Class resolveClass(final ObjectStreamClass desc) throws IOException,
+                                                              ClassNotFoundException {
+        if ( this.classLoader == null ) {
+            return super.resolveClass( desc );
+        } else {
+            final String name = desc.getName();
+            Class clazz = (Class) primClasses.get( name );
+            if ( clazz == null ) {
+                try {
+                    clazz = this.classLoader.loadClass( name );
+                } catch ( final ClassNotFoundException cnf ) {
+                    clazz = super.resolveClass( desc );
+                }
+            }
+            return clazz;
+        }
+    }
+
+    public InternalRuleBase getRuleBase() {
+        return ruleBase;
+    }        
+
+    public void setRuleBase(InternalRuleBase ruleBase) {
+        this.ruleBase = ruleBase;
+    }
+
+    public void setWorkingMemory(InternalWorkingMemory workingMemory) {
+        this.workingMemory = workingMemory;
+    }
+
+    public InternalWorkingMemory getWorkingMemory() {
+        return workingMemory;
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -23,6 +23,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
 import org.drools.reteoo.Rete;
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.rule.CompositePackageClassLoader;
@@ -90,4 +91,6 @@
     public MapBackedClassLoader getMapBackedClassLoader();
     
     public Rete getRete();
+    
+    public InternalWorkingMemory[] getWorkingMemories();
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -25,22 +25,31 @@
     extends
     InternalWorkingMemory {
     public void update(FactHandle handle,
-                             Object object,
-                             Rule rule,
-                             Activation activation) throws FactException;
+                       Object object,
+                       Rule rule,
+                       Activation activation) throws FactException;
 
     public void retract(FactHandle handle,
-                              boolean removeLogical,
-                              boolean updateEqualsMap,
-                              Rule rule,
-                              Activation activation) throws FactException;
+                        boolean removeLogical,
+                        boolean updateEqualsMap,
+                        Rule rule,
+                        Activation activation) throws FactException;
 
     FactHandle insert(Object object,
-                            boolean dynamic,
-                            boolean logical,
-                            Rule rule,
-                            Activation activation) throws FactException;
+                      boolean dynamic,
+                      boolean logical,
+                      Rule rule,
+                      Activation activation) throws FactException;
 
     public FactHandle insertLogical(Object object,
-                                          boolean dynamic) throws FactException;
+                                    boolean dynamic) throws FactException;
+
+    public void modifyRetract(final FactHandle factHandle,
+                              final Rule rule,
+                              final Activation activation);
+
+    public void modifyInsert(final FactHandle factHandle,
+                             final Object object,
+                             final Rule rule,
+                             final Activation activation);
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectInputStreamWithLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectInputStreamWithLoader.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectInputStreamWithLoader.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -1,67 +0,0 @@
-/**
- * 
- */
-package org.drools.common;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import java.util.HashMap;
-
-public class ObjectInputStreamWithLoader extends ObjectInputStream {
-    private final ClassLoader    classLoader;
-
-    /** table mapping primitive type names to corresponding class objects */
-    private static final HashMap primClasses = new HashMap( 8,
-                                                            1.0F );
-    static {
-        primClasses.put( "boolean",
-                         boolean.class );
-        primClasses.put( "byte",
-                         byte.class );
-        primClasses.put( "char",
-                         char.class );
-        primClasses.put( "short",
-                         short.class );
-        primClasses.put( "int",
-                         int.class );
-        primClasses.put( "long",
-                         long.class );
-        primClasses.put( "float",
-                         float.class );
-        primClasses.put( "double",
-                         double.class );
-        primClasses.put( "void",
-                         void.class );
-    }
-
-    public ObjectInputStreamWithLoader(final InputStream in,
-                                       final ClassLoader classLoader) throws IOException {
-        super( in );
-        this.classLoader = classLoader;
-        enableResolveObject( true );
-    }
-    
-    public ClassLoader getClassLoader() {
-        return this.classLoader;
-    }
-
-    protected Class resolveClass(final ObjectStreamClass desc) throws IOException,
-                                                              ClassNotFoundException {
-        if ( this.classLoader == null ) {
-            return super.resolveClass( desc );
-        } else {
-            final String name = desc.getName();
-            Class clazz = (Class) primClasses.get( name );
-            if ( clazz == null ) {
-                try {
-                    clazz = this.classLoader.loadClass( name );
-                } catch ( final ClassNotFoundException cnf ) {
-                    clazz = super.resolveClass( desc );
-                }
-            }
-            return clazz;
-        }
-    }
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -16,6 +16,11 @@
  * limitations under the License.
  */
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -28,6 +33,7 @@
 import org.drools.base.ShadowProxyFactory;
 import org.drools.base.ShadowProxyHelper;
 import org.drools.common.BaseNode;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
@@ -75,10 +81,10 @@
     /**
      * 
      */
-    private static final long   serialVersionUID = 320L;
+    private static final long          serialVersionUID = 320L;
     /** The <code>Map</code> of <code>ObjectTypeNodes</code>. */
-    private final ObjectHashMap objectTypeNodes;
-    
+    private final ObjectHashMap        objectTypeNodes;
+
     private transient InternalRuleBase ruleBase;
 
     // ------------------------------------------------------------
@@ -90,11 +96,17 @@
         this.objectTypeNodes = new ObjectHashMap();
         this.ruleBase = ruleBase;
     }
-    
+
     public void setRuleBase(InternalRuleBase ruleBase) {
         this.ruleBase = ruleBase;
     }
 
+    private void readObject(ObjectInputStream stream) throws IOException,
+                                                     ClassNotFoundException {
+        stream.defaultReadObject();
+        this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
+    }
+
     // ------------------------------------------------------------
     // Instance methods
     // ------------------------------------------------------------
@@ -123,25 +135,27 @@
             String key = ((Fact) object).getFactTemplate().getName();
             ojectTypeConf = (ObjectTypeConf) memory.get( key );
             if ( ojectTypeConf == null ) {
-                ojectTypeConf = new ObjectTypeConf( null, this.ruleBase);            
+                ojectTypeConf = new ObjectTypeConf( null,
+                                                    this.ruleBase );
                 memory.put( key,
                             ojectTypeConf,
                             false );
-            }            
+            }
         } else {
             Class cls = object.getClass();
             if ( object instanceof ShadowProxy ) {
-                cls = cls.getSuperclass();                                   
+                cls = cls.getSuperclass();
             }
-            
+
             ojectTypeConf = (ObjectTypeConf) memory.get( cls );
             if ( ojectTypeConf == null ) {
-                ojectTypeConf = new ObjectTypeConf( cls, this.ruleBase);            
+                ojectTypeConf = new ObjectTypeConf( cls,
+                                                    this.ruleBase );
                 memory.put( cls,
                             ojectTypeConf,
                             false );
-            }            
-            
+            }
+
             // checks if shadow is enabled
             if ( ojectTypeConf.isShadowEnabled() ) {
                 // need to improve this
@@ -152,11 +166,11 @@
                 } else {
                     ((ShadowProxy) handle.getObject()).updateProxy();
                 }
-            }               
+            }
         }
-        
-        ObjectTypeNode[] cachedNodes = ojectTypeConf.getObjectTypeNodes( object );             
 
+        ObjectTypeNode[] cachedNodes = ojectTypeConf.getObjectTypeNodes( object );
+
         for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
             cachedNodes[i].assertObject( handle,
                                          context,
@@ -186,24 +200,9 @@
         } else {
             objectTypeConf = (ObjectTypeConf) memory.get( object.getClass() );
         }
-        
+
         ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes( object );
 
-//        // cached might have been cleared, so recalculate matching nodes
-//        if ( cachedNodes == null ) {
-//            cachedNodes = getMatchingNodes( object );
-//            Object key = null;
-//
-//            if ( object instanceof FactImpl ) {
-//                key = ((Fact) object).getFactTemplate().getName();
-//            } else {
-//                key = object.getClass();
-//            }
-//            memory.put( key,
-//                        cachedNodes,
-//                        false );
-//        }
-
         if ( cachedNodes == null ) {
             // it is  possible that there are no ObjectTypeNodes for an  object being retracted
             return;
@@ -216,8 +215,6 @@
         }
     }
 
-
-
     /**
      * Adds the <code>TupleSink</code> so that it may receive
      * <code>Tuples</code> propagated from this <code>TupleSource</code>.
@@ -249,7 +246,10 @@
                        final InternalWorkingMemory[] workingMemories) {
         final ObjectTypeNode objectTypeNode = (ObjectTypeNode) node;
         removeObjectSink( objectTypeNode );
-        //@todo: we really should attempt to clear the memory cache for this ObjectTypeNode        
+        for ( int i = 0; i < workingMemories.length; i++ ) {
+            // clear the node memory for each working memory.
+            workingMemories[i].clearNodeMemory( (NodeMemory) node );
+        }
     }
 
     public ObjectHashMap getObjectTypeNodes() {
@@ -263,7 +263,7 @@
     public InternalRuleBase getRuleBase() {
         return this.ruleBase;
     }
-    
+
     public int hashCode() {
         return this.objectTypeNodes.hashCode();
     }
@@ -288,7 +288,7 @@
         final ObjectHashMap memory = (ObjectHashMap) workingMemory.getNodeMemory( this );
         Iterator it = memory.iterator();
         for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
-            (( ObjectTypeConf) entry.getValue() ).resetCache();
+            ((ObjectTypeConf) entry.getValue()).resetCache();
         }
 
         final ObjectTypeNode node = (ObjectTypeNode) sink;
@@ -302,65 +302,75 @@
             }
         }
     }
-    
-    public static class ObjectTypeConf implements Serializable  {
+
+    public static class ObjectTypeConf
+        implements
+        Serializable {
         // Objenesis instance without cache (false) 
-        private static final Objenesis         OBJENESIS        = new ObjenesisStd( false );
-        
-        private final Class cls;
-        private final InternalRuleBase ruleBase;        
-        private ObjectTypeNode[] objectTypeNodes;
-        
+        private static final Objenesis         OBJENESIS = new ObjenesisStd( false );
+
+        private final Class                    cls;
+        private transient InternalRuleBase     ruleBase;
+        private ObjectTypeNode[]               objectTypeNodes;
+
         protected boolean                      shadowEnabled;
         protected Class                        shadowClass;
         protected transient ObjectInstantiator instantiator;
-        protected transient Field              delegate;        
+        protected transient Field              delegate;
+
         //private final InternalRuleBase ruleBase;
-        
-        public ObjectTypeConf(Class cls, InternalRuleBase ruleBase) {
+
+        public ObjectTypeConf(Class cls,
+                              InternalRuleBase ruleBase) {
             this.cls = cls;
             this.ruleBase = ruleBase;
-            Rete rete = ruleBase.getRete(); 
-            
+            Rete rete = ruleBase.getRete();
+
             if ( cls == null || !ruleBase.getConfiguration().isShadowed( cls.getName() ) ) {
                 return;
             }
-            
-            String pkgName =  cls.getPackage().getName();
-            if ( "org.drools.reteoo".equals( pkgName ) || "org.drools.base".equals( pkgName )) {
+
+            String pkgName = cls.getPackage().getName();
+            if ( "org.drools.reteoo".equals( pkgName ) || "org.drools.base".equals( pkgName ) ) {
                 // We don't shadow internal classes
                 this.shadowEnabled = false;
                 return;
             }
-            
+
             Class shadowClass = null;
             final String shadowProxyName = ShadowProxyFactory.getProxyClassNameForClass( this.cls );
             try {
                 // if already loaded
-                shadowClass =  rete.getRuleBase().getMapBackedClassLoader().loadClass( shadowProxyName );
+                shadowClass = rete.getRuleBase().getMapBackedClassLoader().loadClass( shadowProxyName );
             } catch ( final ClassNotFoundException cnfe ) {
                 // otherwise, create and load
                 final byte[] proxyBytes = ShadowProxyFactory.getProxyBytes( cls );
                 if ( proxyBytes != null ) {
                     rete.getRuleBase().getMapBackedClassLoader().addClass( shadowProxyName,
-                                                                              proxyBytes );
+                                                                           proxyBytes );
                     try {
-                        shadowClass =  rete.getRuleBase().getMapBackedClassLoader().loadClass( shadowProxyName );
+                        shadowClass = rete.getRuleBase().getMapBackedClassLoader().loadClass( shadowProxyName );
                     } catch ( ClassNotFoundException e ) {
                         throw new RuntimeException( "Unable to find or generate the ShadowProxy implementation for '" + this.cls.getName() + "'" );
                     }
                 }
 
-            }            
-            
+            }
+
             if ( shadowClass != null ) {
                 this.shadowClass = shadowClass;
                 this.shadowEnabled = true;
                 setInstantiator();
                 setDelegateFieldObject();
-            }             
+            }
         }
-        
+
+        private void readObject(ObjectInputStream stream) throws IOException,
+                                                         ClassNotFoundException {
+            stream.defaultReadObject();
+            this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
+        }
+
         /**
          * 
          */
@@ -379,8 +389,8 @@
                 throw new RuntimeDroolsException( "Error retriving delegate field for shadow proxy class: " + this.shadowClass.getName(),
                                                   e );
             }
-        }        
-        
+        }
+
         public Object getShadow(final Object fact) throws RuntimeDroolsException {
             ShadowProxy proxy = null;
             if ( isShadowEnabled() ) {
@@ -393,30 +403,30 @@
                     }
                     proxy = (ShadowProxy) this.instantiator.newInstance();
                     this.delegate.set( proxy,
-                                  fact );
+                                       fact );
                 } catch ( final Exception e ) {
                     throw new RuntimeDroolsException( "Error creating shadow fact for object: " + fact,
                                                       e );
                 }
             }
             return proxy;
-        }    
-        
+        }
+
         public boolean isShadowEnabled() {
             return this.shadowEnabled;
-        }        
-        
+        }
+
         public void resetCache() {
             this.objectTypeNodes = null;
         }
-        
+
         public ObjectTypeNode[] getObjectTypeNodes(final Object object) {
             if ( this.objectTypeNodes == null ) {
                 buildCache( object );
             }
             return this.objectTypeNodes;
         }
-        
+
         private void buildCache(final Object object) throws FactException {
             final List cache = new ArrayList();
 
@@ -428,8 +438,8 @@
                 }
             }
 
-            this.objectTypeNodes =  ( ObjectTypeNode[] ) cache.toArray( new ObjectTypeNode[cache.size()] );
-        }        
+            this.objectTypeNodes = (ObjectTypeNode[]) cache.toArray( new ObjectTypeNode[cache.size()] );
+        }
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.List;
@@ -23,6 +25,8 @@
 
 import org.drools.RuleIntegrationException;
 import org.drools.common.BaseNode;
+import org.drools.common.DroolsObjectInputStream;
+import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.builder.ReteooRuleBuilder;
 import org.drools.rule.InvalidPatternException;
@@ -47,18 +51,18 @@
     /**
      * 
      */
-    private static final long               serialVersionUID = 1737643968218792944L;
+    private static final long                 serialVersionUID = 1737643968218792944L;
 
     /** The RuleBase */
-    private transient ReteooRuleBase        ruleBase;
+    private transient InternalRuleBase          ruleBase;
 
     private transient InternalWorkingMemory[] workingMemories;
 
-    private Map                             rules;
+    private Map                               rules;
 
-    private transient ReteooRuleBuilder     ruleBuilder;
+    private transient ReteooRuleBuilder       ruleBuilder;
 
-    private IdGenerator                     idGenerator;
+    private IdGenerator                       idGenerator;
 
     // ------------------------------------------------------------
     // Constructors
@@ -68,7 +72,7 @@
      * Construct a <code>Builder</code> against an existing <code>Rete</code>
      * network.
      */
-    ReteooBuilder(final ReteooRuleBase ruleBase) {
+    ReteooBuilder(final InternalRuleBase ruleBase) {
         this.ruleBase = ruleBase;
         this.rules = new HashMap();
 
@@ -77,12 +81,10 @@
         this.ruleBuilder = new ReteooRuleBuilder();
     }
 
-    /**
-     * Allow this to be settable, otherwise we get infinite recursion on serialisation
-     * @param ruleBase
-     */
-    void setRuleBase(final ReteooRuleBase ruleBase) {
-        this.ruleBase = ruleBase;
+    private void readObject(ObjectInputStream stream) throws IOException,
+                                                     ClassNotFoundException {
+        stream.defaultReadObject();
+        this.ruleBase = ((DroolsObjectInputStream) stream).getRuleBase();
     }
 
     /**
@@ -110,8 +112,8 @@
      */
     void addRule(final Rule rule) throws InvalidPatternException {
         final List terminals = this.ruleBuilder.addRule( rule,
-                                                   this.ruleBase,
-                                                   this.idGenerator );
+                                                         this.ruleBase,
+                                                         this.idGenerator );
 
         this.rules.put( rule,
                         terminals.toArray( new BaseNode[terminals.size()] ) );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -124,16 +124,6 @@
         super( id,
                config,
                factHandleFactory );
-        this.config = (config != null) ? config : new RuleBaseConfiguration();
-        this.config.makeImmutable();
-
-        this.factHandleFactory = factHandleFactory;
-
-        this.packageClassLoader = new CompositePackageClassLoader( Thread.currentThread().getContextClassLoader() );
-        this.pkgs = new HashMap();
-        this.globals = new HashMap();
-        this.statefulSessions = new ObjectHashSet();
-
         this.rete = new Rete(this);
         this.reteooBuilder = new ReteooBuilder( this );
     }
@@ -162,10 +152,8 @@
                         objects );
 
         this.rete = (Rete) objects[0];
-        this.rete.setRuleBase( this );
         this.reteooBuilder = (ReteooBuilder) objects[1];
 
-        this.reteooBuilder.setRuleBase( this );
         this.reteooBuilder.setRete( this.rete );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -20,6 +20,7 @@
 import java.util.ListIterator;
 
 import org.drools.common.BetaConstraints;
+import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.ObjectSource;
 import org.drools.reteoo.ReteooBuilder;
@@ -47,7 +48,7 @@
     private int                       currentPatternOffset;
 
     // rule base to add rules to
-    private ReteooRuleBase            rulebase;
+    private InternalRuleBase            rulebase;
 
     // working memories attached to the given rulebase
     private InternalWorkingMemory[]     workingMemories;
@@ -61,7 +62,7 @@
     // beta constraints from the last pattern attached
     BetaConstraints                   betaconstraints;
 
-    public BuildContext(final ReteooRuleBase rulebase,
+    public BuildContext(final InternalRuleBase rulebase,
                         final ReteooBuilder.IdGenerator idGenerator) {
         this.rulebase = rulebase;
         this.workingMemories = (InternalWorkingMemory[]) this.rulebase.getWorkingMemories();
@@ -152,7 +153,7 @@
      * Returns context rulebase
      * @return
      */
-    public ReteooRuleBase getRuleBase() {
+    public InternalRuleBase getRuleBase() {
         return this.rulebase;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -29,6 +29,7 @@
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.BaseNode;
+import org.drools.common.InternalRuleBase;
 import org.drools.reteoo.QueryTerminalNode;
 import org.drools.reteoo.ReteooBuilder;
 import org.drools.reteoo.ReteooRuleBase;
@@ -91,7 +92,7 @@
      * @throws InvalidPatternException
      */
     public List addRule(final Rule rule,
-                        final ReteooRuleBase rulebase,
+                        final InternalRuleBase rulebase,
                         final ReteooBuilder.IdGenerator idGenerator) throws InvalidPatternException {
 
         // the list of terminal nodes

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -12,7 +12,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.drools.common.ObjectInputStreamWithLoader;
+import org.drools.common.DroolsObjectInputStream;
 
 public class MapBackedClassLoader extends ClassLoader
     implements

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.common.ObjectInputStreamWithLoader;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.ruleflow.common.core.Process;
 import org.drools.util.StringUtils;
@@ -117,7 +117,7 @@
      *            The name of this <code>Package</code>.
      */
     public Package(final String name,
-                   final ClassLoader parentClassLoader) {
+                   ClassLoader parentClassLoader) {
         this.name = name;
         this.imports = new ArrayList( 1 );
         this.staticImports = Collections.EMPTY_LIST;
@@ -126,6 +126,14 @@
         this.globals = Collections.EMPTY_MAP;
         this.factTemplates = Collections.EMPTY_MAP;
         this.functions = Collections.EMPTY_LIST;
+        
+        // This classloader test should only be here for unit testing, too much legacy api to want to change by hand at the moment
+        if ( parentClassLoader == null ) {
+            parentClassLoader = Thread.currentThread().getContextClassLoader();
+            if ( parentClassLoader == null ) {
+                parentClassLoader = getClass().getClassLoader();
+            }
+        }
         this.packageCompilationData = new PackageCompilationData( parentClassLoader );
     }
 
@@ -170,7 +178,7 @@
         final byte[] bytes = (byte[]) stream.readObject();
 
         //  Use a custom ObjectInputStream that can resolve against a given classLoader
-        final ObjectInputStreamWithLoader streamWithLoader = new ObjectInputStreamWithLoader( new ByteArrayInputStream( bytes ),
+        final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ),
                                                                                               this.packageCompilationData.getClassLoader() );
 
         this.rules = (Map) streamWithLoader.readObject();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -33,7 +33,7 @@
 
 import org.drools.CheckedDroolsException;
 import org.drools.RuntimeDroolsException;
-import org.drools.common.ObjectInputStreamWithLoader;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.spi.Accumulator;
 import org.drools.spi.Consequence;
 import org.drools.spi.EvalExpression;
@@ -77,14 +77,9 @@
     }
 
     private void initClassLoader(ClassLoader parentClassLoader) {
-        if ( parentClassLoader == null ) {
-            parentClassLoader = Thread.currentThread().getContextClassLoader();
-
-            if ( parentClassLoader == null ) {
-                parentClassLoader = getClass().getClassLoader();
-            }
+        if (parentClassLoader == null ) {
+            throw new RuntimeDroolsException("PackageCompilationData cannot have a null parentClassLoader" );
         }
-
         this.parentClassLoader = parentClassLoader;
         this.classLoader = new PackageClassLoader( this.parentClassLoader );
     }
@@ -114,7 +109,8 @@
      */
     public void readExternal(final ObjectInput stream) throws IOException,
                                                       ClassNotFoundException {
-        initClassLoader( null );
+        DroolsObjectInputStream droolsStream = ( DroolsObjectInputStream ) stream;
+        initClassLoader( droolsStream.getClassLoader() );
 
         this.store = (Map) stream.readObject();
         this.AST = stream.readObject();
@@ -123,8 +119,8 @@
         final byte[] bytes = (byte[]) stream.readObject();
 
         //  Use a custom ObjectInputStream that can resolve against a given classLoader
-        final ObjectInputStreamWithLoader streamWithLoader = new ObjectInputStreamWithLoader( new ByteArrayInputStream( bytes ),
-                                                                                              this.classLoader );
+        final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ),
+                                                                                      this.classLoader );
         this.invokerLookups = (Map) streamWithLoader.readObject();
     }
 
@@ -286,7 +282,9 @@
      * @author mproctor
      *
      */
-    public class PackageClassLoader extends ClassLoader implements DroolsClassLoader {
+    public class PackageClassLoader extends ClassLoader
+        implements
+        DroolsClassLoader {
 
         public PackageClassLoader(final ClassLoader parentClassLoader) {
             super( parentClassLoader );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -82,6 +82,15 @@
 
     void retract(Object object) throws FactException;
     
+    public void modifyRetract(final Object object);
+    
+    public void modifyRetract(final FactHandle factHandle);
+
+    public void modifyInsert(final Object object); 
+    
+    public void modifyInsert(final FactHandle factHandle,
+                             final Object object);     
+    
     public Object get(Declaration declaration);
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/BinaryRuleBaseLoader.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -7,6 +7,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.RuntimeDroolsException;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.rule.Package;
 
 /**
@@ -18,38 +19,72 @@
  */
 public class BinaryRuleBaseLoader {
 
-    private RuleBase ruleBase;
+    private RuleBase    ruleBase;
+    private ClassLoader classLoader;
 
     /**
      * This will create a new default rulebase (which is initially empty).
-     * 
+     * Optional parent classLoader for the Package's internal ClassLoader
+     * is Thread.currentThread.getContextClassLoader()
      */
     public BinaryRuleBaseLoader() {
-        this( RuleBaseFactory.newRuleBase() );
+        this( RuleBaseFactory.newRuleBase(), null );
+    }    
+
+    /**
+     * This will add any binary packages to the rulebase.
+     * Optional parent classLoader for the Package's internal ClassLoader
+     * is Thread.currentThread.getContextClassLoader()
+     */
+    public BinaryRuleBaseLoader(RuleBase rb) {
+        this( rb, null);
     }
 
     /**
      * This will add any binary packages to the rulebase.
+     * Optional classLoader to be used as the parent ClassLoader
+     * for the Package's internal ClassLoader, is Thread.currentThread.getContextClassLoader()
+     * if not user specified.
      */
-    public BinaryRuleBaseLoader(
-                                RuleBase rb) {
+    public BinaryRuleBaseLoader(RuleBase rb, ClassLoader classLoader) {
+        if ( classLoader == null ) {
+            classLoader = Thread.currentThread().getContextClassLoader();
+            if ( classLoader == null ) {
+                classLoader = this.getClass().getClassLoader();
+            }
+        }        
         this.ruleBase = rb;
+        this.classLoader = classLoader;
     }
-
+    
     /**
      * This will add the BINARY package to the rulebase.
+     * Uses the member ClassLoader as the Package's internal parent classLoader
+     * which is Thread.currentThread.getContextClassLoader if not user specified
      * @param in An input stream to the serialized package.
-     */
+     */    
     public void addPackage(InputStream in) {
+        addPackage(in, this.classLoader);
+    }
 
+    /**
+     * This will add the BINARY package to the rulebase.
+     * @param in An input stream to the serialized package.
+     * @param optional classLoader used as the parent ClassLoader for the Package's internal ClassLaoder  
+     */    
+    public void addPackage(InputStream in, ClassLoader classLoader) {
+        if ( classLoader == null ) {
+            classLoader = this.classLoader;
+        }
+        
         try {
-            ObjectInputStream oin = new ObjectInputStream( in );
+            ObjectInputStream oin = new DroolsObjectInputStream( in );
             Object opkg = oin.readObject();
-            if (! (opkg instanceof Package)) {
-                throw new IllegalArgumentException("Can only add instances of org.drools.rule.Package to a rulebase instance.");
+            if ( !(opkg instanceof Package) ) {
+                throw new IllegalArgumentException( "Can only add instances of org.drools.rule.Package to a rulebase instance." );
             }
             Package binPkg = (Package) opkg;
-            
+
             if ( !binPkg.isValid() ) {
                 throw new IllegalArgumentException( "Can't add a non valid package to a rulebase." );
             }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ChainedProperties.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ChainedProperties.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ChainedProperties.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -20,11 +20,18 @@
     private final List defaultProps;
     
     public ChainedProperties(String confFileName) {
-        this( Thread.currentThread().getContextClassLoader(),
+        this( null,
               confFileName );
     }
     
     public ChainedProperties(ClassLoader classLoader, String confFileName) {
+        if ( classLoader == null ) {
+            classLoader = Thread.currentThread().getContextClassLoader();
+            if ( classLoader == null ) {
+                classLoader = this.getClass().getClassLoader();
+            }
+        }  
+        
         this.props = new ArrayList();
         this.defaultProps = new ArrayList();
         

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -17,7 +17,7 @@
 public class ClassTypeResolverTest extends TestCase {
 
     public void testResolvePrimtiveTypes() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver = new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( boolean.class,
                       resolver.resolveType( "boolean" ) );
         assertEquals( double.class,
@@ -37,7 +37,7 @@
     }
 
     public void testResolveArrayOfPrimitiveTypes() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( boolean[].class,
                       resolver.resolveType( "boolean[]" ) );
         assertEquals( double[].class,
@@ -57,7 +57,7 @@
     }
 
     public void testResolveMultidimensionnalArrayOfPrimitiveTypes() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( int[][].class,
                       resolver.resolveType( "int[][]" ) );
         assertEquals( int[][][].class,
@@ -67,7 +67,7 @@
     }
 
     public void testResolveObjectNotFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( String.class,
                       resolver.resolveType( "String" ) );
         assertEquals( String.class,
@@ -84,7 +84,7 @@
     }
 
     public void testResolveObjectFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList() );
+        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList(), Thread.currentThread().getContextClassLoader() );
         resolver.addImport( "org.drools.Cheese" );
         assertEquals( String.class,
                       resolver.resolveType( "String" ) );
@@ -97,7 +97,7 @@
     }
 
     public void testResolveArrayOfObjectsNotFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( String[].class,
                       resolver.resolveType( "String[]" ) );
         assertEquals( String[].class,
@@ -114,7 +114,7 @@
     }
 
     public void testResolveArrayOfObjectsFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList() );
+        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList(), Thread.currentThread().getContextClassLoader() );
         resolver.addImport( "org.drools.Cheese" );
         assertEquals( String[].class,
                       resolver.resolveType( "String[]" ) );
@@ -127,7 +127,7 @@
     }
 
     public void testResolveMultidimensionnalArrayOfObjectsNotFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver();
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new ArrayList(), Thread.currentThread().getContextClassLoader());
         assertEquals( String[][].class,
                       resolver.resolveType( "String[][]" ) );
         assertEquals( String[][].class,
@@ -144,7 +144,7 @@
     }
 
     public void testResolveMultidimensionnalArrayOfObjectsFromImport() throws Exception {
-        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList() );
+        final ClassTypeResolver resolver = new ClassTypeResolver( new ArrayList(), Thread.currentThread().getContextClassLoader() );
         resolver.addImport( "org.drools.Cheese" );
         assertEquals( String[][].class,
                       resolver.resolveType( "String[][]" ) );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -10,6 +10,7 @@
 
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
+import org.drools.common.DroolsObjectInputStream;
 import org.drools.rule.Package;
 
 import junit.framework.TestCase;
@@ -40,7 +41,7 @@
     public static Package readPackage(File p1file) throws IOException,
                                             FileNotFoundException,
                                             ClassNotFoundException {
-        ObjectInputStream in = new ObjectInputStream(new FileInputStream(p1file));
+        ObjectInputStream in = new DroolsObjectInputStream(new FileInputStream(p1file));
         Package p1_ = (Package) in.readObject();
         in.close();
         return p1_;

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/BaseClassFieldExtractorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/BaseClassFieldExtractorFactoryTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/BaseClassFieldExtractorFactoryTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -29,13 +29,15 @@
 
     public void testIt() throws Exception {
         FieldExtractor ex = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class,
-                                                                               "name" );
+                                                                               "name",
+                                                                               Thread.currentThread().getContextClassLoader() );
         assertEquals( 0,
                       ex.getIndex() );
         assertEquals( "michael",
                       ex.getValue( new TestBean() ) );
         ex = ClassFieldExtractorFactory.getClassFieldExtractor( TestBean.class,
-                                                                "age" );
+                                                                "age",
+                                                                Thread.currentThread().getContextClassLoader() );
         assertEquals( 1,
                       ex.getIndex() );
         assertEquals( 42,
@@ -45,7 +47,8 @@
 
     public void testInterface() throws Exception {
         final FieldExtractor ex = ClassFieldExtractorCache.getExtractor( TestInterface.class,
-                                                                         "something" );
+                                                                         "something",
+                                                                         getClass().getClassLoader() );
         assertEquals( 0,
                       ex.getIndex() );
         assertEquals( "foo",
@@ -54,7 +57,8 @@
 
     public void testAbstract() throws Exception {
         final FieldExtractor ex = ClassFieldExtractorCache.getExtractor( TestAbstract.class,
-                                                                         "something" );
+                                                                         "something",
+                                                                         getClass().getClassLoader() );
         assertEquals( 0,
                       ex.getIndex() );
         assertEquals( "foo",
@@ -63,14 +67,16 @@
 
     public void testInherited() throws Exception {
         final FieldExtractor ex = ClassFieldExtractorCache.getExtractor( BeanInherit.class,
-                                                                         "text" );
+                                                                         "text",
+                                                                         getClass().getClassLoader() );
         assertEquals( "hola",
                       ex.getValue( new BeanInherit() ) );
     }
 
     public void testSelfReference() throws Exception {
         final FieldExtractor ex = ClassFieldExtractorCache.getExtractor( BeanInherit.class,
-                                                                         "this" );
+                                                                         "this",
+                                                                         getClass().getClassLoader() );
         final TestBean bean = new TestBean();
         assertEquals( bean,
                       ex.getValue( bean ) );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -37,17 +37,20 @@
         obj.setObjArray( objArray );
 
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                               "blah" );
+                                                                               "blah",
+                                                                               getClass().getClassLoader() );
         assertEquals( false,
                       ((Boolean) ext.getValue( obj )).booleanValue() );
 
         final ClassFieldExtractor ext2 = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                "fooBar" );
+                                                                                "fooBar",
+                                                                                getClass().getClassLoader() );
         assertEquals( "fooBar",
                       ext2.getValue( obj ) );
 
         final ClassFieldExtractor ext3 = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                "objArray" );
+                                                                                "objArray",
+                                                                                getClass().getClassLoader() );
         assertEquals( objArray,
                       ext3.getValue( obj ) );
 
@@ -57,7 +60,8 @@
 
         final TestInterface obj = new TestInterfaceImpl();
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( TestInterface.class,
-                                                                               "something" );
+                                                                               "something",
+                                                                               getClass().getClassLoader() );
 
         assertEquals( "foo",
                       (String) ext.getValue( obj ) );
@@ -67,7 +71,8 @@
     public void testAbstract() throws Exception {
 
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( TestAbstract.class,
-                                                                               "something" );
+                                                                               "something",
+                                                                               getClass().getClassLoader() );
         final TestAbstract obj = new TestAbstractImpl();
         assertEquals( "foo",
                       (String) ext.getValue( obj ) );
@@ -76,7 +81,8 @@
 
     public void testInherited() throws Exception {
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( BeanInherit.class,
-                                                                               "text" );
+                                                                               "text",
+                                                                               getClass().getClassLoader() );
         final BeanInherit obj = new BeanInherit();
         assertEquals( "hola",
                       (String) ext.getValue( obj ) );
@@ -86,14 +92,16 @@
     public void testMultipleInterfaces() throws Exception {
         final ConcreteChild obj = new ConcreteChild();
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( InterfaceChild.class,
-                                                                               "foo" );
+                                                                               "foo",
+                                                                               getClass().getClassLoader() );
         assertEquals( 42,
                       ((Number) ext.getValue( obj )).intValue() );
     }
 
     public void testLong() throws Exception {
         final ClassFieldExtractor ext = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                               "longField" );
+                                                                               "longField",
+                                                                               getClass().getClassLoader() );
         final TestBean bean = new TestBean();
         assertEquals( 424242,
                       ((Number) ext.getValue( bean )).longValue() );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/BooleanClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -9,7 +9,8 @@
 
 public class BooleanClassFieldExtractorTest extends BaseClassFieldExtractorsTest {
     Extractor extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                 "booleanAttr" );
+                                                                 "booleanAttr",
+                                                                 getClass().getClassLoader() );
     TestBean  bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ByteClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -9,7 +9,8 @@
 
 public class ByteClassFieldExtractorTest extends BaseClassFieldExtractorsTest {
     Extractor extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                 "byteAttr" );
+                                                                 "byteAttr",
+                                                                 getClass().getClassLoader() );
     TestBean  bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/CharClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -9,7 +9,8 @@
 
 public class CharClassFieldExtractorTest extends BaseClassFieldExtractorsTest {
     Extractor extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                 "charAttr" );
+                                                                 "charAttr",
+                                                                 getClass().getClassLoader() );
     TestBean  bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/DoubleClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -11,7 +11,8 @@
     private static final double VALUE     = 7;
 
     Extractor                   extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                   "doubleAttr" );
+                                                                                   "doubleAttr",
+                                                                                   getClass().getClassLoader() );
     TestBean                    bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/FloatClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -11,7 +11,8 @@
     private static final float VALUE     = 6;
 
     Extractor                  extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                  "floatAttr" );
+                                                                                  "floatAttr",
+                                                                                  getClass().getClassLoader() );
     TestBean                   bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/IntClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -11,7 +11,8 @@
     private static final int VALUE     = 4;
 
     Extractor                extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                "intAttr" );
+                                                                                "intAttr",
+                                                                                getClass().getClassLoader() );
     TestBean                 bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/LongClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -11,7 +11,8 @@
     private static final long VALUE     = 5;
 
     Extractor                 extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                 "longAttr" );
+                                                                                 "longAttr",
+                                                                                 getClass().getClassLoader() );
     TestBean                  bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -12,7 +12,8 @@
 public class MVELClassFieldExtractorTest extends TestCase {
 
     Extractor extractor = ClassFieldExtractorCache.getExtractor( Person.class,
-                                                                 "addresses['home'].street" );
+                                                                 "addresses['home'].street",
+                                                                 getClass().getClassLoader() );
     Person  person      = null;
 
     protected void setUp() throws Exception {
@@ -111,7 +112,8 @@
             Assert.assertFalse( this.extractor.isNullValue( this.person ) );
 
             Extractor nullExtractor = ClassFieldExtractorCache.getExtractor( Person.class,
-                                                                             "addresses['business'].phone" );
+                                                                             "addresses['business'].phone",
+                                                                             getClass().getClassLoader() );
             Assert.assertTrue( nullExtractor.isNullValue( this.person ) );
         } catch ( final Exception e ) {
             fail( "Should not throw an exception" );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ObjectClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -13,7 +13,8 @@
 public class ObjectClassFieldExtractorTest extends BaseClassFieldExtractorsTest {
 
     Extractor extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                 "listAttr" );
+                                                                 "listAttr",
+                                                                 getClass().getClassLoader() );
     TestBean  bean      = new TestBean();
 
     protected void setUp() throws Exception {
@@ -107,7 +108,8 @@
             Assert.assertFalse( this.extractor.isNullValue( this.bean ) );
 
             Extractor nullExtractor = ClassFieldExtractorCache.getExtractor(  TestBean.class,
-                                                                              "nullAttr" );
+                                                                              "nullAttr",
+                                                                              getClass().getClassLoader() );
             Assert.assertTrue( nullExtractor.isNullValue( this.bean ) );
         } catch ( final Exception e ) {
             fail( "Should not throw an exception" );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/ShortClassFieldExtractorTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -11,7 +11,8 @@
     private static final short VALUE     = 3;
 
     Extractor                  extractor = ClassFieldExtractorCache.getExtractor( TestBean.class,
-                                                                                  "shortAttr" );
+                                                                                  "shortAttr",
+                                                                                  getClass().getClassLoader() );
     TestBean                   bean      = new TestBean();
 
     protected void setUp() throws Exception {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/QuadroupleBetaConstraintsTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -50,7 +50,8 @@
     private BetaNodeFieldConstraint getConstraint(String fieldName,
                                                   Class clazz) {
         FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                          fieldName );
+                                                                          fieldName,
+                                                                          getClass().getClassLoader() );
         Declaration declaration = new Declaration( fieldName,
                                                    extractor,
                                                    new Pattern( 0,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/AgendaEventSupportTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/AgendaEventSupportTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/AgendaEventSupportTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -63,7 +63,8 @@
                                     cheeseObjectType );
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -234,9 +234,10 @@
                     drools.update( tuple.get( countDeclaration ),
                                    count );
 
+                    drools.modifyRetract( context );;
                     context.setState( Context.ASSIGN_SEATS );
-                    drools.update( tuple.get( contextDeclaration ),
-                                   context );
+                    drools.modifyInsert( context );
+                    
                     System.err.println( "assign first seat :  " + seating + " : " + path );
 
                 } catch ( Exception e ) {
@@ -745,13 +746,13 @@
                     Context context = (Context) drools.get( contextDeclaration );
                     Seating seating = (Seating) drools.get( seatingDeclaration );
 
+                    drools.modifyRetract( seating );
                     seating.setPathDone( true );
 
                     //                    if ( seating.getId() == 6 ) {
                     //                        System.err.println( "pause" );
                     //                    }
-                    drools.update( tuple.get( seatingDeclaration ),
-                                   seating );
+                    drools.modifyInsert( seating );
 
                     context.setState( Context.CHECK_DONE );
                     drools.update( tuple.get( contextDeclaration ),
@@ -1109,7 +1110,8 @@
         final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                                fieldName );
+                                                                                fieldName,
+                                                                                getClass().getClassLoader() );
 
         final FieldValue field = new LongFieldImpl( fieldValue );
 
@@ -1125,7 +1127,8 @@
         final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                                fieldName );
+                                                                                fieldName,
+                                                                                getClass().getClassLoader() );
 
         final FieldValue field = new BooleanFieldImpl( fieldValue );
 
@@ -1140,7 +1143,8 @@
         final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                                fieldName );
+                                                                                fieldName,
+                                                                                getClass().getClassLoader() );
 
         pattern.addDeclaration( identifier,
                                 extractor );
@@ -1153,7 +1157,8 @@
         final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( clazz,
-                                                                                fieldName );
+                                                                                fieldName,
+                                                                                getClass().getClassLoader() );
 
         return new VariableConstraint( extractor,
                                        declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -64,7 +64,8 @@
         final MockObjectSource source = new MockObjectSource( 15 );
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -145,7 +146,8 @@
         final MockObjectSource source = new MockObjectSource( 15 );
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                      "type" );
+                                                                                      "type",
+                                                                                      getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -231,7 +233,8 @@
         final MockObjectSource source = new MockObjectSource( 15 );
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -292,7 +295,8 @@
         final MockObjectSource source = new MockObjectSource( 15 );
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -370,7 +374,8 @@
         final MockObjectSource source = new MockObjectSource( 15 );
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                 "type" );
+                                                                                 "type",
+                                                                                 getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -453,7 +458,8 @@
         final MockObjectSource source = new MockObjectSource( 1 );
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -520,7 +526,8 @@
         final MockObjectSource source = new MockObjectSource( 1 );
 
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor(Cheese.class,
-                                                                               "type" );
+                                                                               "type",
+                                                                               getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -45,7 +45,8 @@
         final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
                                                                            (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "stilton" );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
@@ -136,10 +137,12 @@
                                                                            (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
 
         final ClassFieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                          "price" );
+                                                                                          "price",
+                                                                                          getClass().getClassLoader() );
 
         final ClassFieldExtractor ageExtractor = ClassFieldExtractorCache.getExtractor( Person.class,
-                                                                                        "age" );
+                                                                                        "age",
+                                                                                        getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Person.class ) );
@@ -239,7 +242,8 @@
         final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
                                                                            (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "stilton" );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -54,7 +54,8 @@
         queryObjectTypeNode.attach();
 
         ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( DroolsQuery.class,
-                                                                               "name" );
+                                                                               "name",
+                                                                               DroolsQuery.class.getClassLoader() );
 
         FieldValue field = FieldFactory.getFieldValue( "query-1" );
 
@@ -80,7 +81,8 @@
         cheeseObjectTypeNode.attach();
 
         extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                           "type" );
+                                                           "type",
+                                                           getClass().getClassLoader() );
 
         field = FieldFactory.getFieldValue( "stilton" );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -32,7 +32,8 @@
 
     public void testDeclaration() throws IntrospectionException {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 5,
                                           new ClassObjectType( Cheese.class ) );
@@ -59,7 +60,8 @@
 
     public void testGetFieldValue() throws IntrospectionException {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader()  );
 
         final Pattern pattern = new Pattern( 5,
                                           new ClassObjectType( Cheese.class ) );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -68,7 +68,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader()  );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -113,7 +114,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "price" );
+                                                                                     "price",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( 5 );
 
@@ -159,7 +161,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final FieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "price" );
+                                                                                     "price",
+                                                                                     getClass().getClassLoader() );
 
         Pattern pattern = new Pattern( 0,
                                        new ClassObjectType( Cheese.class ) );
@@ -241,7 +244,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final FieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "price" );
+                                                                                     "price",
+                                                                                     getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -341,7 +345,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -352,7 +357,8 @@
                                                                      field );
 
         final ClassFieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                          "price" );
+                                                                                          "price",
+                                                                                          getClass().getClassLoader() );
 
         final FieldValue priceField = FieldFactory.getFieldValue( 10 );
 
@@ -409,7 +415,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
 
@@ -420,7 +427,8 @@
                                                                      field );
 
         final ClassFieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                          "price" );
+                                                                                          "price",
+                                                                                          getClass().getClassLoader() );
 
         final FieldValue priceField = FieldFactory.getFieldValue( 10 );
 
@@ -477,7 +485,8 @@
         final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
 
         final ClassFieldExtractor typeExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                         "type" );
+                                                                                         "type",
+                                                                                         getClass().getClassLoader() );
 
         final FieldValue cheddarField = FieldFactory.getFieldValue( "cheddar" );
 
@@ -489,7 +498,8 @@
                                                                      cheddarField );
 
         final ClassFieldExtractor priceExtractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                          "price" );
+                                                                                          "price",
+                                                                                          getClass().getClassLoader() );
 
         final FieldValue field10 = FieldFactory.getFieldValue( 10 );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexEntryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexEntryTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexEntryTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -18,7 +18,8 @@
 
     public void testSingleEntry() {
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
 
         final FieldIndex fieldIndex = new FieldIndex( extractor,
                                                       null,
@@ -61,7 +62,8 @@
 
     public void testTwoEntries() {
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor(  Cheese.class,
-                                                                                      "type" );
+                                                                                      "type",
+                                                                                      getClass().getClassLoader() );
         final FieldIndex fieldIndex = new FieldIndex( extractor,
                                                       null,
                                                       StringFactory.getInstance().getEvaluator( Operator.EQUAL ) );
@@ -112,7 +114,8 @@
 
     public void testThreeEntries() {
         final ClassFieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                     "type" );
+                                                                                     "type",
+                                                                                     getClass().getClassLoader() );
         final FieldIndex fieldIndex = new FieldIndex( extractor,
                                                       null,
                                                       StringFactory.getInstance().getEvaluator( Operator.EQUAL ) );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexHashTableTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexHashTableTest.java	2007-06-20 03:29:36 UTC (rev 12699)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/FieldIndexHashTableTest.java	2007-06-20 03:30:07 UTC (rev 12700)
@@ -28,7 +28,8 @@
 
     public void testSingleEntry() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -76,7 +77,8 @@
 
     public void testTwoDifferentEntries() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -132,7 +134,8 @@
 
     public void testTwoEqualEntries() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -188,7 +191,8 @@
 
     public void testTwoDifferentEntriesSameHashCode() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor(  TestClass.class,
-                                                                                 "object" );
+                                                                                 "object",
+                                                                                 getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( TestClass.class ) );
@@ -234,7 +238,8 @@
 
     public void testRemove() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -300,7 +305,8 @@
 
     public void testResize() throws Exception {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );
@@ -516,7 +522,8 @@
 
     public void testEmptyIterator() {
         final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class,
-                                                                                "type" );
+                                                                                "type",
+                                                                                getClass().getClassLoader() );
 
         final Pattern pattern = new Pattern( 0,
                                              new ClassObjectType( Cheese.class ) );




More information about the jboss-svn-commits mailing list