[jboss-svn-commits] JBL Code SVN: r25651 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Mar 14 22:34:58 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-03-14 22:34:58 -0400 (Sat, 14 Mar 2009)
New Revision: 25651

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
Log:
JBRULES-2007 ClassCastException due to bad classloader reference

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	2009-03-14 18:38:29 UTC (rev 25650)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2009-03-15 02:34:58 UTC (rev 25651)
@@ -465,6 +465,14 @@
                     // first merge anything related to classloader re-wiring
                     pkg.getDialectRuntimeRegistry().merge( newPkg.getDialectRuntimeRegistry(), this.rootClassLoader );                
                 }
+
+                // now iterate again, this time onBeforeExecute will handle any wiring or cloader re-creating that needs to be done as part of the merge
+                for ( Package newPkg : newPkgs ) {
+                    Package pkg = this.pkgs.get( newPkg.getName() );              
+                    pkg.getDialectRuntimeRegistry().onBeforeExecute();
+                    // with the classloader recreated for all byte[] classes, we should now merge and wire any new accessors
+                    pkg.getClassFieldAccessorStore().merge( newPkg.getClassFieldAccessorStore() );
+                }
                 
                 for ( Package newPkg : newPkgs ) {
                     Package pkg = this.pkgs.get( newPkg.getName() );  
@@ -474,8 +482,6 @@
                             pkg.addFunction( entry.getValue() );
                         }
                     }            
-                    pkg.getClassFieldAccessorStore().merge( newPkg.getClassFieldAccessorStore() );
-                    pkg.getDialectRuntimeRegistry().onBeforeExecute();
                     
                     // we have to do this before the merging, as it does some classloader resolving
                     TypeDeclaration lastType = null;
@@ -520,7 +526,7 @@
                     }
     
                     this.eventSupport.fireAfterPackageAdded( newPkg );
-                }
+                }                
             } finally {
                 // only unlock if it had been acquired implicitely
                 if ( doUnlock ) {




More information about the jboss-svn-commits mailing list