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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 12 22:07:39 EDT 2008


Author: tirelli
Date: 2008-03-12 22:07:39 -0400 (Wed, 12 Mar 2008)
New Revision: 18912

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.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/RightInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
Log:
Fixing OTN optimization

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -55,7 +55,14 @@
     public abstract void attach();
 
     public abstract void attach(InternalWorkingMemory[] workingMemories);
-
+    
+    /**
+     * A method that is called for all nodes whose network bellow them 
+     * changed, after the change is complete, providing them with an oportunity
+     * for state update
+     */
+    public abstract void networkUpdated();
+    
     public void remove(RuleRemovalContext context,
                        ReteooBuilder builder,
                        BaseNode node,
@@ -93,6 +100,6 @@
     }
 
     public String toString() {
-        return "[" + this.getClass().getName() + "(" + this.id + ")]";
+        return "[" + this.getClass().getSimpleName() + "(" + this.id + ")]";
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -109,10 +109,15 @@
      * @see org.drools.reteoo.BaseNode#attach()
      */
     public void attach() {
+        this.rightInput.addObjectSink( this );
         this.leftInput.addTupleSink( this );
-        this.rightInput.addObjectSink( this );
     }
 
+    public void networkUpdated() {
+        this.rightInput.networkUpdated();
+        this.leftInput.networkUpdated();
+    }
+    
     public List getRules() {
         final List list = new ArrayList();
 
@@ -145,12 +150,12 @@
                                                                                       PropagationContext.RULE_ADDITION,
                                                                                       null,
                                                                                       null );
+            this.rightInput.updateSink( this,
+                                        propagationContext,
+                                        workingMemory );
             this.leftInput.updateSink( this,
                                        propagationContext,
                                        workingMemory );
-            this.rightInput.updateSink( this,
-                                        propagationContext,
-                                        workingMemory );
         }
 
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -113,6 +113,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.tupleSource.networkUpdated();
+    }
+
     // ------------------------------------------------------------
     // Instance methods
     // ------------------------------------------------------------

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -155,6 +155,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.tupleSource.networkUpdated();
+    }
+    
     protected void doRemove(final RuleRemovalContext context,
                             final ReteooBuilder builder,
                             final BaseNode node,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -97,6 +97,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.objectSource.networkUpdated();
+    }
+    
     /**
      * Takes the asserted <code>FactHandleImpl</code> received from the <code>ObjectSource</code> and puts it
      * in a new <code>ReteTuple</code> before propagating to the <code>TupleSinks</code>

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -130,6 +130,10 @@
     public abstract void updateSink(ObjectSink sink,
                                     PropagationContext context,
                                     InternalWorkingMemory workingMemory);
+    
+    public void networkUpdated() {
+        this.objectSource.networkUpdated();
+    }
 
     public ObjectSinkPropagator getSinkPropagator() {
         return this.sink;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -27,6 +27,7 @@
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Declaration;
 import org.drools.rule.EntryPoint;
+import org.drools.rule.EvalCondition;
 import org.drools.spi.Constraint;
 import org.drools.spi.ObjectType;
 import org.drools.spi.PropagationContext;
@@ -191,7 +192,6 @@
                                context,
                                workingMemory );
         }
-        this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
     }
 
     /**
@@ -220,6 +220,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
+    }
+    
     /**
      * OTN needs to override remove to avoid releasing the node ID, since OTN are 
      * never removed from the rulebase in the current implementation
@@ -318,6 +322,8 @@
                 hasConstraints = true;
             } else if ( sinks[i] instanceof BetaNode && ((BetaNode) sinks[i]).getConstraints().length > 0 ) {
                 hasConstraints = this.usesDeclaration( ((BetaNode) sinks[i]).getConstraints() );
+            } else if ( sinks[i] instanceof EvalConditionNode ) {
+                hasConstraints = this.usesDeclaration( ((EvalConditionNode)sinks[i]).getCondition() );
             }
             if ( !hasConstraints && sinks[i] instanceof ObjectSource ) {
                 hasConstraints = !this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
@@ -348,6 +354,15 @@
         return usesDecl;
     }
 
+    private boolean usesDeclaration(final EvalCondition condition) {
+        boolean usesDecl = false;
+        final Declaration[] declarations = condition.getRequiredDeclarations();
+        for ( int j = 0; !usesDecl && j < declarations.length; j++ ) {
+            usesDecl = (declarations[j].getPattern().getObjectType() == this.objectType);
+        }
+        return usesDecl;
+    }
+
     /**
      * @return the entryPoint
      */

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -150,6 +150,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.tupleSource.networkUpdated();
+    }
+    
     protected void doRemove(final RuleRemovalContext context,
                             final ReteooBuilder builder,
                             final BaseNode node,

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	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -167,6 +167,10 @@
         throw new UnsupportedOperationException( "cannot call attach() from the root Rete node" );
     }
 
+    public void networkUpdated() {
+        // nothing to do
+    }
+    
     protected void doRemove(final RuleRemovalContext context,
                             final ReteooBuilder builder,
                             final BaseNode node,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -148,6 +148,10 @@
                                          workingMemory );
         }
     }
+    
+    public void networkUpdated() {
+        this.tupleSource.networkUpdated();
+    }
 
     public void updateSink(final ObjectSink sink,
                            final PropagationContext context,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -432,6 +432,10 @@
         }
     }
 
+    public void networkUpdated() {
+        this.tupleSource.networkUpdated();
+    }
+    
     protected void doRemove(final RuleRemovalContext context,
                             final ReteooBuilder builder,
                             final BaseNode node,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -16,11 +16,13 @@
 
 package org.drools.reteoo;
 
+import org.drools.common.NetworkNode;
+
 /**
  * A markup interface for terminal nodes
  * 
  * @author etirelli
  */
-public interface TerminalNode {
+public interface TerminalNode extends NetworkNode {
 
 }

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	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -181,6 +181,8 @@
             ((BaseNode) terminal).attach( context.getWorkingMemories() );
         }
 
+        ((BaseNode) terminal).networkUpdated();
+        
         return terminal;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/ReteooMannersTest.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -65,7 +65,7 @@
         };
 
         //workingMemory.addEventListener(listener );
-        final InputStream is = getClass().getResourceAsStream( "/manners32.dat" );
+        final InputStream is = getClass().getResourceAsStream( "/manners128.dat" );
         final List list = getInputObjects( is );
         for ( final Iterator it = list.iterator(); it.hasNext(); ) {
             final Object object = it.next();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -75,6 +75,12 @@
             return true;
         }
 
+        @Override
+        public void networkUpdated() {
+            // TODO Auto-generated method stub
+            
+        }
+
     }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -159,4 +159,10 @@
         
     }
 
+    @Override
+    public void networkUpdated() {
+        // TODO Auto-generated method stub
+        
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java	2008-03-13 02:04:10 UTC (rev 18911)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java	2008-03-13 02:07:39 UTC (rev 18912)
@@ -64,4 +64,10 @@
 
     }
 
+    @Override
+    public void networkUpdated() {
+        // TODO Auto-generated method stub
+        
+    }
+
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list