[jboss-svn-commits] JBL Code SVN: r21123 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: reteoo/builder and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 18 15:32:46 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-07-18 15:32:46 -0400 (Fri, 18 Jul 2008)
New Revision: 21123

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
Log:
JBRULES-1684 Package merging is incorrect for dialects
-reverted back part of addPackage that creates or merges the new package, it's still incorrect but at least all the unit tests pass for now.

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	2008-07-18 15:10:05 UTC (rev 21122)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-07-18 19:32:46 UTC (rev 21123)
@@ -428,23 +428,32 @@
 
             this.eventSupport.fireBeforePackageAdded( newPkg );
 
-            // create new base package if it doesn't exist, as we always merge the newPkg into the existing one, 
-            // to isolate the base package from further possible changes to newPkg.
+//            // create new base package if it doesn't exist, as we always merge the newPkg into the existing one, 
+//            // to isolate the base package from further possible changes to newPkg.
+//            if ( pkg == null ) {
+//                // create a new package, use the same parent classloader as the incoming new package
+//                pkg = new Package( newPkg.getName(),
+//                                   new MapBackedClassLoader( newPkg.getPackageScopeClassLoader().getParent() ) );
+//                //newPkg.getPackageScopeClassLoader() );
+//                pkgs.put( pkg.getName(),
+//                          pkg );
+//                // add the dialect registry composite classloader (which uses the above classloader as it's parent)
+//                this.packageClassLoader.addClassLoader( pkg.getDialectRuntimeRegistry().getClassLoader() );
+//            }
+            
             if ( pkg == null ) {
-                // create a new package, use the same parent classloader as the incoming new package
                 pkg = new Package( newPkg.getName(),
-                                   new MapBackedClassLoader( newPkg.getPackageScopeClassLoader().getParent() ) );
-                //newPkg.getPackageScopeClassLoader() );
+                                   newPkg.getPackageScopeClassLoader() );
                 pkgs.put( pkg.getName(),
                           pkg );
-                // add the dialect registry composite classloader (which uses the above classloader as it's parent)
                 this.packageClassLoader.addClassLoader( pkg.getDialectRuntimeRegistry().getClassLoader() );
+            } else {
+                pkg.getPackageScopeClassLoader().getStore().putAll( newPkg.getPackageScopeClassLoader().getStore() );
+                this.packageClassLoader.addClassLoader( newPkg.getDialectRuntimeRegistry().getClassLoader() );
             }
-            //            else {
-            //
-            //                this.packageClassLoader.addClassLoader( newPkg.getDialectRuntimeRegistry().getClassLoader() );
-            //            }
+            
 
+
             // now merge the new package into the existing one
             mergePackage( pkg,
                           newPkg );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2008-07-18 15:10:05 UTC (rev 21122)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2008-07-18 19:32:46 UTC (rev 21123)
@@ -219,31 +219,6 @@
                 context.setTerminalNodeMemoryEnabled( false );
                 context.setAlphaNodeMemoryAllowed( false );
             }
-            
-            Class cls = ((ClassObjectType)pattern.getObjectType()).getClassType();
-            try {
-                Class rbCls = context.getRuleBase().getCompositePackageClassLoader().loadClass( cls.getName() );
-                if ( cls != rbCls ) {
-                    // the class has been redefined as part of the merge, us the redefined version
-                    objectType = new ClassObjectType( rbCls );
-                    
-                    // @FIXME ok this is just plain nasty, but I want something to work for now.
-                    // we now need to serialize the alpha constraints, to force the fields readers to be regenerated (shitty classloader issues)
-                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                    DroolsObjectOutputStream stream = new DroolsObjectOutputStream( baos );
-                    List list = new ArrayList( alphaConstraints.size() );
-                    for ( final Iterator it = alphaConstraints.iterator(); it.hasNext(); ) {
-                        AlphaNodeFieldConstraint constraint = (AlphaNodeFieldConstraint) it.next();                        
-                        constraint.writeExternal( stream );
-                        constraint = constraint.getClass().newInstance();
-                        constraint.readExternal( new DroolsObjectInputStream( new ByteArrayInputStream( baos.toByteArray() ), context.getRuleBase().getCompositePackageClassLoader() ) );
-                        list.add( constraint );
-                    }
-                    alphaConstraints = list;
-               }                
-            } catch ( Exception e ) {
-                throw new RuntimeDroolsException( "Unable to Attach ObjectTypeNode as class cannot be found '" +  cls.getName() + "'", e );
-            }
         }
 
         context.setObjectSource( (ObjectSource) utils.attachNode( context,




More information about the jboss-svn-commits mailing list