[jboss-svn-commits] JBL Code SVN: r18353 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Feb 6 15:14:16 EST 2008
Author: tirelli
Date: 2008-02-06 15:14:16 -0500 (Wed, 06 Feb 2008)
New Revision: 18353
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork1.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork2.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OrderItem.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.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/EntryPointNode.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/PropagationQueuingNode.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/ReteooBuilder.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/TupleSource.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.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/MockObjectSource.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:
JBRULES-1315: fixing bug in trunk
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OrderItem.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OrderItem.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OrderItem.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -20,10 +20,19 @@
* @author etirelli
*
*/
-public class OrderItem {
+public class OrderItem implements java.io.Serializable {
+ private static final long serialVersionUID = -7287814895557751224L;
+
+ public static final int TYPE_BOOK = 1;
+ public static final int TYPE_CD = 2;
+
+ private String name;
+ private int type;
+ private int price;
private int seq;
private Order order;
+
public OrderItem() {
this( null,
0 );
@@ -35,6 +44,38 @@
this.seq = seq;
}
+ public OrderItem(Order order, int seq, String name, int type, int price) {
+ this.order = order;
+ this.seq = seq;
+ this.name = name;
+ this.type = type;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
/**
* @return the order
*/
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -20,6 +20,8 @@
import org.drools.Cheese;
import org.drools.FactA;
import org.drools.FactB;
+import org.drools.Order;
+import org.drools.OrderItem;
import org.drools.Person;
import org.drools.PersonInterface;
import org.drools.Precondition;
@@ -600,6 +602,194 @@
}
}
+ public void testDynamicRuleRemovalsSubNetwork() throws Exception {
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork1.drl" ) ) );
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+ final Package pkg = serialisePackage( builder.getPackage() );
+
+ org.drools.reteoo.ReteooRuleBase reteooRuleBase = null;
+ final RuleBase ruleBase = getRuleBase();
+ reteooRuleBase = (org.drools.reteoo.ReteooRuleBase) ruleBase;
+ ruleBase.addPackage( pkg );
+ final PackageBuilder builder2 = new PackageBuilder();
+ builder2.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork2.drl" ) ) );
+ ruleBase.addPackage( serialisePackage( builder2.getPackage() ) );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "results",
+ list );
+
+ Order order = new Order();
+
+ OrderItem item1 = new OrderItem(order, 1, "Adventure Guide Brazil", OrderItem.TYPE_BOOK, 24);
+ order.addItem(item1);
+ workingMemory.insert(item1);
+
+ OrderItem item2 = new OrderItem(order, 2, "Prehistoric Britain", OrderItem.TYPE_BOOK, 15);
+ order.addItem(item2);
+ workingMemory.insert(item2);
+
+ OrderItem item3 = new OrderItem(order, 3, "Holiday Music", OrderItem.TYPE_CD, 9);
+ order.addItem(item3);
+ workingMemory.insert(item3);
+
+ OrderItem item4 = new OrderItem(order, 4, "Very Best of Mick Jagger", OrderItem.TYPE_CD, 11);
+ order.addItem(item4);
+ workingMemory.insert(item4);
+
+ workingMemory.insert(order);
+
+ assertEquals( 11,
+ workingMemory.getAgenda().getActivations().length );
+
+ reteooRuleBase.removeRule( "org.drools",
+ "Apply Discount on all books" );
+ assertEquals( 10,
+ workingMemory.getAgenda().getActivations().length );
+
+ reteooRuleBase.removeRule( "org.drools",
+ "like book" );
+
+ final OrderItem item5 = new OrderItem(order, 5, "Sinatra : Vegas", OrderItem.TYPE_CD,
+ 5 );
+ assertEquals( 8,
+ workingMemory.getAgenda().getActivations().length );
+
+ workingMemory.insert( item5 );
+
+ assertEquals( 10,
+ workingMemory.getAgenda().getActivations().length );
+
+ reteooRuleBase.removePackage( "org.drools" );
+
+ assertEquals( 0,
+ workingMemory.getAgenda().getActivations().length );
+ }
+
+ public void testDynamicRuleRemovalsUnusedWorkingMemorySubNetwork() throws Exception {
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork1.drl" ) ) );
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork2.drl" ) ) );
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ org.drools.reteoo.ReteooRuleBase reteooRuleBase = null;
+
+ final RuleBase ruleBase = getRuleBase();
+ reteooRuleBase = (org.drools.reteoo.ReteooRuleBase) ruleBase;
+
+ ruleBase.addPackage( pkg );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ if ( reteooRuleBase != null ) {
+ assertEquals( 1,
+ reteooRuleBase.getPackages().length );
+ assertEquals( 4,
+ reteooRuleBase.getPackages()[0].getRules().length );
+
+ reteooRuleBase.removeRule( "org.drools",
+ "Apply Discount on all books" );
+ assertEquals( 3,
+ reteooRuleBase.getPackages()[0].getRules().length );
+
+ reteooRuleBase.removeRule( "org.drools",
+ "like book" );
+ assertEquals( 2,
+ reteooRuleBase.getPackages()[0].getRules().length );
+
+ reteooRuleBase.removePackage( "org.drools" );
+ assertEquals( 0,
+ reteooRuleBase.getPackages().length );
+ }
+ }
+
+
+ public void testRemovePackageSubNetwork() throws Exception {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+
+ final RuleBase ruleBase = getRuleBase();
+ final String packageName = builder.getPackage().getName();
+ ruleBase.addPackage( serialisePackage( builder.getPackage() ) );
+
+ final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List results = new ArrayList();
+ workingMemory.setGlobal( "results", results );
+
+ Order order = new Order();
+
+ OrderItem item1 = new OrderItem(order, 1, "Adventure Guide Brazil", OrderItem.TYPE_BOOK, 24);
+ OrderItem item2 = new OrderItem(order, 2, "Prehistoric Britain", OrderItem.TYPE_BOOK, 15);
+ OrderItem item3 = new OrderItem(order, 3, "Holiday Music", OrderItem.TYPE_CD, 9);
+ OrderItem item4 = new OrderItem(order, 4, "Very Best of Mick Jagger", OrderItem.TYPE_CD, 11);
+ OrderItem item5 = new OrderItem(order, 5, "The Master and Margarita", OrderItem.TYPE_BOOK, 29);
+
+ order.addItem( item1 );
+ order.addItem( item2 );
+ order.addItem( item3 );
+ order.addItem( item4 );
+ order.addItem( item5 );
+
+ workingMemory.insert( order );
+ workingMemory.fireAllRules();
+ assertEquals( 1, results.size() );
+ assertEquals( 3, ((List) results.get(0)).size() );
+ results.clear();
+
+ final RuleBase ruleBaseWM = workingMemory.getRuleBase();
+ ruleBaseWM.removePackage( packageName );
+ final PackageBuilder builder1 = new PackageBuilder();
+ builder1.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
+ workingMemory.fireAllRules();
+ assertEquals( 1, results.size() );
+ assertEquals( 3, ((List) results.get(0)).size() );
+ results.clear();
+
+ ruleBaseWM.removePackage( packageName );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
+ assertEquals( 1, results.size() );
+ assertEquals( 3, ((List) results.get(0)).size() );
+ results.clear();
+
+ ruleBaseWM.removePackage( packageName );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
+ assertEquals( 1, results.size() );
+ assertEquals( 3, ((List) results.get(0)).size() );
+ results.clear();
+ }
+
+
+ public void testRuleBaseAddRemoveSubNetworks() throws Exception {
+ try {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+ //add and remove
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+ ruleBase.removePackage( pkg.getName() );
+
+ //add and remove again
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+ ruleBase.removePackage( pkg.getName() );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail("Should not raise any exception");
+ }
+ }
+
+
public class SubvertedClassLoader extends URLClassLoader {
private static final long serialVersionUID = 400L;
Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork.drl (from rev 18351, labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork.drl 2008-02-06 20:14:16 UTC (rev 18353)
@@ -0,0 +1,14 @@
+package org.drools;
+
+import java.util.ArrayList
+
+global java.util.List results;
+
+rule "Apply Discount on all books"
+ when
+ $order : Order()
+ $items : ArrayList() from collect (OrderItem(type == OrderItem.TYPE_BOOK) from $order.itemsValues)
+ then
+ results.add( $items );
+end
+
Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork1.drl (from rev 18351, labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork1.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork1.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork1.drl 2008-02-06 20:14:16 UTC (rev 18353)
@@ -0,0 +1,10 @@
+package org.drools;
+
+global java.util.List results
+
+rule "like book"
+ when
+ OrderItem( type:type == OrderItem.TYPE_BOOK, price >= 15 )
+ then
+ results.add( type );
+end
Copied: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork2.drl (from rev 18351, labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork2.drl)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork2.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DynamicRulesWithSubnetwork2.drl 2008-02-06 20:14:16 UTC (rev 18353)
@@ -0,0 +1,17 @@
+package org.drools;
+
+global java.util.List results
+
+rule "like OrderItem"
+ when
+ OrderItem( t:type )
+ then
+ results.add( t );
+end
+
+rule "like OrderItem2"
+ when
+ OrderItem( t:type )
+ then
+ results.add( t );
+end
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -1,7 +1,3 @@
-package org.drools.common;
-
-import org.drools.reteoo.ReteooBuilder;
-
/*
* Copyright 2005 JBoss Inc
*
@@ -18,6 +14,11 @@
* limitations under the License.
*/
+package org.drools.common;
+
+import org.drools.reteoo.ReteooBuilder;
+import org.drools.reteoo.RuleRemovalContext;
+
/**
* The base class for all Rete nodes.
*
@@ -30,8 +31,6 @@
NetworkNode {
protected final int id;
- protected int sharedCount = 0;
-
/**
* All nodes have a unique id, set in the constructor.
*
@@ -57,74 +56,35 @@
public abstract void attach(InternalWorkingMemory[] workingMemories);
- /**
- * Removes the node from teh network. Usually from the parent <code>ObjectSource</code> or <code>TupleSource</code>
- * @param builder TODO
- *
- */
- public abstract void remove(ReteooBuilder builder,
- BaseNode node,
- InternalWorkingMemory[] workingMemories);
-
- // /**
- // * When nodes are added to the network that already has data. that existing data must be repropagated to the new node.
- // * This new propagation may result in one or more assertions, so a PropagationContext and the workingMemory for the facts
- // * must be provided.
- // *
- // * @param workingMemory
- // * The WorkingMemory
- // * @param context
- // * The PropagationContext
- // *
- // */
- // public abstract void updateNewNode(InternalWorkingMemory workingMemory,
- // PropagationContext context);
-
- /**
- * Each time a node is shared a counter is increased.
- *
- */
- public void addShare() {
- ++this.sharedCount;
+ public void remove(RuleRemovalContext context,
+ ReteooBuilder builder,
+ BaseNode node,
+ InternalWorkingMemory[] workingMemories) {
+ doRemove( context,
+ builder,
+ node,
+ workingMemories );
+ if ( !isInUse() ) {
+ builder.getIdGenerator().releaseId( this.getId() );
+ }
}
/**
- * Each time a node is unshared a counter is decreased.
+ * Removes the node from teh network. Usually from the parent <code>ObjectSource</code> or <code>TupleSource</code>
* @param builder TODO
*
*/
- public void removeShare(ReteooBuilder builder) {
- --this.sharedCount;
- if( !this.isInUse() ) {
- builder.getIdGenerator().releaseId( this.id );
- }
- }
+ protected abstract void doRemove(RuleRemovalContext context,
+ ReteooBuilder builder,
+ BaseNode node,
+ InternalWorkingMemory[] workingMemories);
/**
- * Indicates whether the node is shared.
- * @return
- */
- public boolean isShared() {
- return this.sharedCount > 0;
- }
-
- /**
* Returns true in case the current node is in use (is referenced by any other node)
* @return
*/
- public boolean isInUse() {
- return this.sharedCount >= 0;
- }
+ public abstract boolean isInUse();
- /**
- * Returns the number of times the node is shared
- * @return
- * int value indicating the share count.
- */
- public int getSharedCount() {
- return this.sharedCount;
- }
-
/**
* The hashCode return is simply the unique id of the node. It is expected that base classes will also implement equals(Object object).
*/
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -191,20 +191,20 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node,
- final InternalWorkingMemory[] workingMemories) {
-
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
if ( !node.isInUse() ) {
removeObjectSink( (ObjectSink) node );
}
- removeShare( builder );
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.objectSource.remove( builder,
+ this.objectSource.remove( context,
+ builder,
this,
workingMemories );
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -25,7 +25,6 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
import org.drools.common.PropagationContextImpl;
-import org.drools.rule.ContextEntry;
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.spi.PropagationContext;
import org.drools.util.LinkedList;
@@ -156,22 +155,29 @@
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
+ context.visitTupleSource( this );
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
- removeShare(builder);
-
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.rightInput.remove( builder,
- this, workingMemories );
- this.leftInput.remove( builder,
- this, workingMemories );
+ this.rightInput.remove( context,
+ builder,
+ this,
+ workingMemories );
+ if( !context.alreadyVisited( this.leftInput )) {
+ this.leftInput.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -211,8 +211,10 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
final ObjectTypeNode objectTypeNode = (ObjectTypeNode) node;
removeObjectSink( objectTypeNode );
for ( int i = 0; i < workingMemories.length; i++ ) {
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -222,20 +222,25 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
+ context.visitTupleSource( this );
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
- removeShare(builder);
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.tupleSource.remove( builder,
- this, workingMemories );
-
+ if( ! context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
}
public boolean isTupleMemoryEnabled() {
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -151,23 +151,27 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node,
- final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
+ context.visitTupleSource( this );
+
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
- removeShare( builder );
-
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.tupleSource.remove( builder,
- this,
- workingMemories );
+ if ( !context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
}
public void updateSink(final TupleSink sink,
@@ -184,11 +188,10 @@
}
for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
- this.sink.propagateRetractTuple( tuple,
- handle,
- context,
- workingMemory );
- workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+ this.sink.propagateAssertTuple( tuple,
+ handle,
+ context,
+ workingMemory );
}
}
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -175,19 +175,23 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
+ context.visitTupleSource( this );
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
- removeShare(builder);
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.objectSource.remove( builder,
- this, workingMemories );
+ this.objectSource.remove( context,
+ builder,
+ this,
+ workingMemories );
}
public boolean isObjectMemoryEnabled() {
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -134,4 +134,8 @@
public ObjectSinkPropagator getSinkPropagator() {
return this.sink;
}
+
+ public boolean isInUse() {
+ return this.sink.size() > 0;
+ }
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -219,29 +219,34 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ /**
+ * OTN needs to override remove to avoid releasing the node ID, since OTN are
+ * never removed from the rulebase in the current implementation
+ *
+ * @inheritDoc
+ *
+ * @see org.drools.common.BaseNode#remove(org.drools.reteoo.RuleRemovalContext, org.drools.reteoo.ReteooBuilder, org.drools.common.BaseNode, org.drools.common.InternalWorkingMemory[])
+ */
+ public void remove(RuleRemovalContext context,
+ ReteooBuilder builder,
+ BaseNode node,
+ InternalWorkingMemory[] workingMemories) {
+ doRemove( context,
+ builder,
+ node,
+ workingMemories );
+ }
+
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
if ( !node.isInUse() ) {
removeObjectSink( (ObjectSink) node );
}
- removeShare(builder);
- if ( !this.isInUse() ) {
- for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
- workingMemories[i].clearNodeMemory( this );
- }
- this.objectSource.removeObjectSink( this );
- }
}
/**
- * Rete needs to know that this ObjectTypeNode has had new nodes attached to
- * it one one of its ancestors
- */
- public void addShare() {
- super.addShare();
- }
-
- /**
* Creates memory for the node using PrimitiveLongMap as its optimised for storage and reteivals of Longs.
* However PrimitiveLongMap is not ideal for spase data. So it should be monitored incase its more optimal
* to switch back to a standard HashMap.
@@ -259,7 +264,7 @@
}
public String toString() {
- return "[ObjectTypeNode(" + this.id + ")::" + ((EntryPointNode)this.objectSource).getEntryPoint() + " objectType=" + this.objectType + "]";
+ return "[ObjectTypeNode(" + this.id + ")::" + ((EntryPointNode) this.objectSource).getEntryPoint() + " objectType=" + this.objectType + "]";
}
/**
@@ -347,6 +352,6 @@
* @return the entryPoint
*/
public EntryPoint getEntryPoint() {
- return ((EntryPointNode)this.objectSource).getEntryPoint();
+ return ((EntryPointNode) this.objectSource).getEntryPoint();
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -112,19 +112,22 @@
* @see org.drools.common.BaseNode#remove(ReteooBuilder, org.drools.common.BaseNode, org.drools.common.InternalWorkingMemory[])
*/
@Override
- public void remove(ReteooBuilder builder,
- BaseNode node, InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
if ( !node.isInUse() ) {
removeObjectSink( (ObjectSink) node );
}
- removeShare(builder);
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
}
- this.objectSource.remove( builder,
- this, workingMemories );
+ this.objectSource.remove( context,
+ builder,
+ this,
+ workingMemories );
}
/**
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -150,18 +150,26 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
workingMemories[i].clearNodeMemory( this );
}
- removeShare(builder);
-
- this.tupleSource.remove( builder,
- this, workingMemories );
+ if( ! context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
}
+ public boolean isInUse() {
+ return false;
+ }
+
public void updateNewNode(final InternalWorkingMemory workingMemory,
final PropagationContext context) {
// There are no child nodes to update, do nothing.
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -160,8 +160,10 @@
throw new UnsupportedOperationException( "cannot call attach() from the root Rete node" );
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
final EntryPointNode entryPointNode = (EntryPointNode) node;
removeObjectSink( entryPointNode );
}
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 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -228,11 +228,14 @@
final Object object = this.rules.remove( rule );
final BaseNode[] nodes = (BaseNode[]) object;
+ final RuleRemovalContext context = new RuleRemovalContext();
for ( int i = 0, length = nodes.length; i < length; i++ ) {
final BaseNode node = nodes[i];
- node.remove( this,
+ node.remove( context,
+ this,
null,
this.workingMemories );
+ context.clear();
}
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -165,14 +165,19 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
if ( !node.isInUse() ) {
removeObjectSink( (ObjectSink) node );
}
- removeShare(builder);
- this.tupleSource.remove( builder,
- this, workingMemories );
+ if( ! context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
}
public boolean isTupleMemoryEnabled() {
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java (from rev 18352, labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on Feb 6, 2008
+ */
+
+package org.drools.reteoo;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.common.BaseNode;
+
+/**
+ * This context class is used during rule removal to ensure
+ * network consistency.
+ *
+ * @author etirelli
+ *
+ */
+public class RuleRemovalContext
+ implements
+ Serializable {
+
+ private Map visitedNodes;
+
+ public RuleRemovalContext() {
+ this.visitedNodes = new HashMap();
+ }
+
+ /**
+ * We need to track tuple source nodes that we visit
+ * to avoid multiple removal in case of subnetworks
+ *
+ * @param node
+ */
+ public void visitTupleSource( TupleSource node ) {
+ this.visitedNodes.put( new Integer(node.getId()), node );
+ }
+
+ /**
+ * We need to track tuple source nodes that we visit
+ * to avoid multiple removal in case of subnetworks
+ *
+ * @param node
+ * @return
+ */
+ public boolean alreadyVisited( TupleSource node ) {
+ return this.visitedNodes.containsKey( new Integer( node.getId() ) );
+ }
+
+ public void clear() {
+ this.visitedNodes.clear();
+ }
+}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -432,8 +432,10 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
final InternalWorkingMemory workingMemory = workingMemories[i];
@@ -461,10 +463,16 @@
workingMemory.clearNodeMemory( this );
}
- removeShare(builder);
+ if( !context.alreadyVisited( this.tupleSource ) ) {
+ this.tupleSource.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
+ }
- this.tupleSource.remove( builder,
- this, workingMemories );
+ public boolean isInUse() {
+ return false;
}
public Object createMemory(final RuleBaseConfiguration config) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -112,5 +112,9 @@
public abstract void updateSink(TupleSink sink,
PropagationContext context,
- InternalWorkingMemory workingMemory);
+ InternalWorkingMemory workingMemory);
+
+ public boolean isInUse() {
+ return this.sink.size() > 0;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -94,7 +94,6 @@
EntryPointNode epn = context.getRuleBase().getRete().getEntryPointNode( ((EntryPointNode)candidate).getEntryPoint() );
if( epn != null ) {
node = epn;
- node.addShare();
}
} else if( candidate instanceof ObjectTypeNode ) {
// object type nodes are always shared
@@ -104,7 +103,6 @@
otn = map.get( otn.getObjectType() );
if ( otn != null ) {
node = otn;
- node.addShare();
}
}
} else if( isSharingEnabledForNode( context, candidate ) ) {
@@ -131,7 +129,6 @@
// shared node found
// undo previous id assignment
context.releaseId( candidate.getId() );
- node.addShare();
}
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectData.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -2,7 +2,6 @@
import java.io.Serializable;
import java.util.HashMap;
-import java.util.Map;
import org.mvel.ast.Function;
import org.mvel.integration.VariableResolver;
@@ -42,7 +41,7 @@
public static class MapFunctionResolverFactory extends MapVariableResolverFactory {
public MapFunctionResolverFactory() {
- super(new HashMap<String, Function>() );
+ super(new HashMap<String, Object>() );
}
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -60,10 +60,10 @@
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
}
public void attach(final InternalWorkingMemory[] workingMemories) {
@@ -71,6 +71,10 @@
}
+ public boolean isInUse() {
+ return true;
+ }
+
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java 2008-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -71,10 +71,10 @@
}
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
}
public void attach(final InternalWorkingMemory[] workingMemories) {
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -96,10 +96,10 @@
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
}
public void attach(final InternalWorkingMemory[] workingMemories) {
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-02-06 18:39:48 UTC (rev 18352)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java 2008-02-06 20:14:16 UTC (rev 18353)
@@ -53,10 +53,10 @@
this.updated++;
}
- public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
- // TODO Auto-generated method stub
-
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
}
public void attach(final InternalWorkingMemory[] workingMemories) {
More information about the jboss-svn-commits
mailing list