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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 11 12:21:38 EDT 2008


Author: mingjin
Date: 2008-04-11 12:21:38 -0400 (Fri, 11 Apr 2008)
New Revision: 19529

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBaseSerializationTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
Log:
JBRULES-1557 DynamicRulesTest.testDynamicFunction Fails under JDK 1.6
- AbstractRuleBase: add function to package during package merging.
- DialectData: added setDirty(boolean)
- JavaDialectData: implemented setDirty(..)
- MVELDialectData: implemented setDirty(..)
- Package: set corresponding DialectData dirty after adding a function
- LargeRuleBaseSerializationTest: reduced # of rules to 525 to avoid stack overflow

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBaseSerializationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBaseSerializationTest.java	2008-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LargeRuleBaseSerializationTest.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -18,7 +18,7 @@
  * Settings | File Templates.
  */
 public class LargeRuleBaseSerializationTest extends TestCase {
-    private static final int    RULE_COUNT = Integer.parseInt(System.getProperty("test.count", "1000"));
+    private static final int    RULE_COUNT = Integer.parseInt(System.getProperty("test.count", "525"));
     private static final int    ITERATIONS = Integer.parseInt(System.getProperty("test.iterations", "5"));
 
     private static RuleBase ruleBase;

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-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -86,7 +86,7 @@
     /** The fact handle factory. */
     protected FactHandleFactory                        factHandleFactory;
 
-    protected Map                                      globals;
+    protected Map<String, Class>                       globals;
 
     private ReloadPackageCompilationData               reloadPackageCompilationData = null;
 
@@ -429,28 +429,27 @@
                 this.packageClassLoader.addClassLoader( newPkg.getDialectDatas().getClassLoader() );
             }
 
-            mergePackage( pkg,
-                          newPkg );
+            final Map<String, Class> newGlobals = newPkg.getGlobals();
 
-            final Map newGlobals = newPkg.getGlobals();
-
             if (newGlobals != null) {
                 // Check that the global data is valid, we cannot change the type
                 // of an already declared global variable
-                for ( final Iterator it = newGlobals.keySet().iterator(); it.hasNext(); ) {
-                    final String identifier = (String) it.next();
-                    final Class type = (Class) newGlobals.get( identifier );
-                    final boolean f = this.globals.containsKey( identifier );
-                    if ( f ) {
-                        final boolean y = !this.globals.get( identifier ).equals( type );
-                        if ( f && y ) {
+                for ( final Map.Entry<String, Class> entry : newGlobals.entrySet() ) {
+                    final String identifier = entry.getKey();
+                    final Class type    = entry.getValue();
+                    if ( this.globals.containsKey( identifier ) &&
+                         !this.globals.get( identifier ).equals( type )) {
                             throw new PackageIntegrationException( pkg );
-                        }
+                    } else {
+                        this.globals.put(identifier,
+                                         type);
                     }
                 }
-                this.globals.putAll( newGlobals );
             }
 
+            mergePackage( pkg,
+                          newPkg );
+
             if (newPkg.getTypeDeclarations() != null) {
                 // Add type declarations
                 for ( TypeDeclaration type : newPkg.getTypeDeclarations().values() ) {
@@ -472,8 +471,8 @@
             //and now the rule flows
             if ( newPkg.getRuleFlows() != null ) {
                 final Map flows = newPkg.getRuleFlows();
-                for ( final Iterator iter = flows.entrySet().iterator(); iter.hasNext(); ) {
-                    final Entry flow = (Entry) iter.next();
+                for ( final Object object : newPkg.getRuleFlows().entrySet() ) {
+                    final Entry flow = (Entry) object;
                     this.processes.put( flow.getKey(),
                                         flow.getValue() );
                 }
@@ -497,22 +496,14 @@
      */
     private void mergePackage(final Package pkg,
                               final Package newPkg) {
-        final Map globals = pkg.getGlobals();
         final Map<String, ImportDeclaration> imports = pkg.getImports();
 
         // Merge imports
         imports.putAll( newPkg.getImports() );
 
         if (newPkg.getGlobals() != null) {
+            final Map globals = pkg.getGlobals();
             // Add globals
-            for ( final Iterator it = newPkg.getGlobals().keySet().iterator(); it.hasNext(); ) {
-                final String identifier = (String) it.next();
-                final Class type = (Class) globals.get( identifier );
-                if ( globals.containsKey( identifier ) && !globals.get( identifier ).equals( type ) ) {
-                    throw new PackageIntegrationException( "Unable to merge new Package",
-                                                           newPkg );
-                }
-            }
             if (globals == Collections.EMPTY_MAP) {
                 for (Object object : newPkg.getGlobals().entrySet()) {
                     Map.Entry   entry   = (Map.Entry)object;
@@ -564,9 +555,8 @@
         pkg.getDialectDatas().merge( newPkg.getDialectDatas() );
 
         if ( newPkg.getFunctions() != null) {
-            for (Object object : newPkg.getFunctions().entrySet()) {
-                Map.Entry entry = (Map.Entry)object;
-                pkg.addFunction((Function)entry.getValue());
+            for (Map.Entry<String, Function> entry : newPkg.getFunctions().entrySet()) {
+                pkg.addFunction(entry.getValue());
             }
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectData.java	2008-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectData.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -9,6 +9,8 @@
 
     public boolean isDirty();
 
+    public void setDirty(boolean dirty);
+
     public void reload();
 
     public DialectData clone();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectData.java	2008-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectData.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -106,6 +106,10 @@
         return this.dirty;
     }
 
+    public void setDirty(boolean dirty) {
+        this.dirty = dirty;
+    }
+
     /**
      * Handles the write serialization of the PackageCompilationData. Patterns in Rules may reference generated data which cannot be serialized by
      * default methods. The PackageCompilationData holds a reference to the generated bytecode. The generated bytecode must be restored before any Rules.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.java	2008-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -56,7 +56,10 @@
 		return false;
 	}
 
-	public void merge(DialectData newData) {
+    public void setDirty(boolean dirty) {
+    }
+
+    public void merge(DialectData newData) {
 	}
 
 	public void reload() {

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	2008-04-11 15:59:47 UTC (rev 19528)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2008-04-11 16:21:38 UTC (rev 19529)
@@ -72,7 +72,7 @@
 
     private Set                            staticImports;
 
-    private Map                            globals;
+    private Map<String, Class>             globals;
 
     private Map                            factTemplates;
 
@@ -201,7 +201,7 @@
         this.functions = (Map<String, Function>) in.readObject();
         this.factTemplates = (Map) in.readObject();
         this.ruleFlows = (Map) in.readObject();
-        this.globals = (Map) in.readObject();
+        this.globals = (Map<String, Class>) in.readObject();
         this.valid = in.readBoolean();
         this.rules = (Map) in.readObject();
 
@@ -270,6 +270,7 @@
 
         this.functions.put( function.getName(),
                             function );
+        dialectDatas.getDialectData(function.getDialect()).setDirty(true);
     }
 
     public Map<String, Function> getFunctions() {
@@ -287,7 +288,7 @@
     public void addGlobal(final String identifier,
                           final Class clazz) {
         if ( this.globals == Collections.EMPTY_MAP ) {
-            this.globals = new HashMap( 1 );
+            this.globals = new HashMap<String, Class>( 1 );
         }
         this.globals.put( identifier,
                           clazz );
@@ -297,7 +298,7 @@
         this.globals.remove( identifier );
     }
 
-    public Map getGlobals() {
+    public Map<String, Class> getGlobals() {
         return this.globals;
     }
 




More information about the jboss-svn-commits mailing list