[jboss-svn-commits] JBL Code SVN: r9000 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 23 19:16:10 EST 2007


Author: tirelli
Date: 2007-01-23 19:16:10 -0500 (Tue, 23 Jan 2007)
New Revision: 9000

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactA.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactB.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactC.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules2.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.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/builder/ColumnBuilder.java
Log:
JBRULES-612:

  * Fixed problem with identity removal constraint
  * Reseting object type cache when a new node type is added to the network
  * Fixing problem when updating more than one working memories attached to the same rulebase
  * Integration tests added



Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactA.java (from rev 8999, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/FactA.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactA.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactA.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -0,0 +1,31 @@
+package org.drools;
+
+public class FactA {
+    String field1;
+    Integer field2;
+    Float field3;
+    public FactA(String f1, Integer f2, Float f3) {
+        field1 = f1;
+        field2 = f2;
+        field3 = f3;
+    }
+    public String getField1() {
+        return field1;
+    }
+    public void setField1(String s) {
+        field1 = s;
+    }
+    public Integer getField2() {
+        return field2;
+    }
+    public void setField2(Integer i) {
+        field2 = i;
+    }
+    public Float getField3() {
+        return field3;
+    }
+    public void setField3(Float f) {
+        field3 = f;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactB.java (from rev 8999, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/FactB.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactB.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactB.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -0,0 +1,31 @@
+package org.drools;
+
+public class FactB {
+    String f1;
+    Integer f2;
+    Float f3;
+    public FactB(String a, Integer b, Float c) {
+        f1 = a;
+        f2 = b;
+        f3 = c;
+    }
+    public String getF1() {
+        return f1;
+    }
+    public void setF1(String s) {
+        f1 = s;
+    }
+    public Integer getF2() {
+        return f2;
+    }
+    public void setF2(Integer i) {
+        f2 = i;
+    }
+    public Float getF3() {
+        return f3;
+    }
+    public void setF3(Float f) {
+        f3 = f;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactC.java (from rev 8999, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/FactC.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactC.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FactC.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -0,0 +1,34 @@
+package org.drools;
+
+public class FactC {
+    String f1;
+    Integer f2;
+    Float f3;
+    public FactC(String a, Integer b, Float c) {
+        f1 = a;
+        f2 = b;
+        f3 = c;
+    }
+    public FactC() {
+
+    }
+    public String getF1() {
+        return f1;
+    }
+    public void setF1(String s) {
+        f1 = s;
+    }
+    public Integer getF2() {
+        return f2;
+    }
+    public void setF2(Integer i) {
+        f2 = i;
+    }
+    public Float getF3() {
+        return f3;
+    }
+    public void setF3(Float f) {
+        f3 = f;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-01-23 23:58:46 UTC (rev 8999)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -43,6 +43,8 @@
 import org.drools.Cheese;
 import org.drools.CheeseEqual;
 import org.drools.Cheesery;
+import org.drools.FactA;
+import org.drools.FactB;
 import org.drools.FactHandle;
 import org.drools.FromTestClass;
 import org.drools.IndexedNumber;
@@ -3709,7 +3711,6 @@
     }
 
     public void testForall() throws Exception {
-
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Forall.drl" ) ) );
         final Package pkg = builder.getPackage();
@@ -3799,4 +3800,40 @@
         }
     }
 
+    public void testDynamicRules() throws Exception {
+        final RuleBase ruleBase = getRuleBase();
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+        Cheese a = new Cheese( "stilton", 10);
+        Cheese b = new Cheese( "stilton", 15);
+        Cheese c = new Cheese( "stilton", 20);
+        workingMemory.assertObject(a);
+        workingMemory.assertObject(b);
+        workingMemory.assertObject(c);
+
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRules.drl" ) ) );
+        final Package pkg = builder.getPackage();
+        ruleBase.addPackage( pkg );
+
+        workingMemory.fireAllRules();
+    }
+
+    public void testDynamicRules2() throws Exception {
+        final RuleBase ruleBase = getRuleBase();
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+
+        // Assert some simple facts
+        FactA a = new FactA("hello", new Integer(1), new Float(3.14));
+        FactB b = new FactB("hello", new Integer(2), new Float(6.28));
+        workingMemory.assertObject(a);
+        workingMemory.assertObject(b);
+
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRules2.drl" ) ) );
+        final Package pkg = builder.getPackage();
+        ruleBase.addPackage( pkg );
+
+        workingMemory.fireAllRules();
+    }
+
 }

Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules.drl (from rev 8999, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules.drl	2007-01-24 00:16:10 UTC (rev 9000)
@@ -0,0 +1,14 @@
+package org.drools;
+
+rule "Cheese"
+no-loop true
+    when
+        a: Cheese( $type : type, price == 10 );
+        b: Cheese( type == $type, price == 15 );
+        c: Cheese( type == $type );
+    then
+        c.setPrice( 30 );
+        retract(a);
+        modify(c);
+end
+

Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules2.drl (from rev 8999, labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules2.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules2.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRules2.drl	2007-01-24 00:16:10 UTC (rev 9000)
@@ -0,0 +1,22 @@
+package org.drools;
+
+rule "setupFactC"
+no-loop true
+    when
+        a: FactA(s:field1, i:field2, f:field3)
+        not FactC(f1==s)
+    then
+        assert(s != null ? new FactC(s, i, f) :
+                                  new FactC());
+end
+
+rule "factBWithRetract"
+    when
+        b : FactB(s:f1, i:f2, f:f3)
+        a : FactA(field1==s)
+        c : FactC(f1==s)
+    then
+        c.setF3(f);
+        retract(b);
+        modify(c);
+end
\ 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-01-23 23:58:46 UTC (rev 8999)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -241,6 +241,11 @@
     public void updateSink(final ObjectSink sink,
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
+        // JBRULES-612: the cache MUST be invalidated when a new
+        // node type is added to the network
+        ObjectHashMap memory = (ObjectHashMap) workingMemory.getNodeMemory( this );
+        memory.clear();
+        
         final ObjectTypeNode node = (ObjectTypeNode) sink;
         Iterator it = workingMemory.getFactHandleMap().iterator();
         for (  ObjectEntry entry = ( ObjectEntry ) it.next(); entry != null; entry =  ( ObjectEntry ) it.next() ) {   	

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-01-23 23:58:46 UTC (rev 8999)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -123,7 +123,6 @@
         return (BaseNode[]) this.rules.remove( rule );
     }
 
-
     public void removeRule(final Rule rule) {
         // reset working memories for potential propagation
         this.workingMemories = (ReteooWorkingMemory[]) this.ruleBase.getWorkingMemories().toArray( new ReteooWorkingMemory[this.ruleBase.getWorkingMemories().size()] );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ColumnBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ColumnBuilder.java	2007-01-23 23:58:46 UTC (rev 8999)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ColumnBuilder.java	2007-01-24 00:16:10 UTC (rev 9000)
@@ -139,6 +139,7 @@
                                        final Column column,
                                        final List betaConstraints) {
         if ( context.getRuleBase().getConfiguration().isRemoveIdentities() && column.getObjectType().getClass() == ClassObjectType.class ) {
+            List columns = null;
             // Check if this object type exists before
             // If it does we need stop instance equals cross product
             final Class thisClass = ((ClassObjectType) column.getObjectType()).getClassType();
@@ -146,13 +147,21 @@
                 final Map.Entry entry = (Map.Entry) it.next();
                 final Class previousClass = ((ClassObjectType) entry.getKey()).getClassType();
                 if ( thisClass.isAssignableFrom( previousClass ) ) {
-                    betaConstraints.add( new InstanceNotEqualsConstraint( (Column) entry.getValue() ) );
+                    columns = (List) entry.getValue();
+                    for( Iterator columnsIt = columns.iterator(); columnsIt.hasNext(); ) {
+                        betaConstraints.add( new InstanceNotEqualsConstraint( (Column) columnsIt.next() ) );
+                    }
                 }
             }
+            columns = (List) context.getObjectType().get( column.getObjectType() );
+            if( columns == null ) {
+                columns = new ArrayList();
+            }
+            columns.add( column );
 
             // Must be added after the checking, otherwise it matches against itself
             context.getObjectType().put( column.getObjectType(),
-                                         column );
+                                         columns );
         }
     }
 




More information about the jboss-svn-commits mailing list