[jboss-svn-commits] JBL Code SVN: r33154 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/common and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri May 28 22:34:51 EDT 2010
Author: tirelli
Date: 2010-05-28 22:34:50 -0400 (Fri, 28 May 2010)
New Revision: 33154
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FailureOnRemovalTest.java
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/EvalConditionNode.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/RuleRemovalContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.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/reteoo/builder/CollectBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/EvalBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ForallBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
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/QueryElementBuilder.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java
Log:
JBRULES-2098: fixing node sharing and removal on eval nodes
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FailureOnRemovalTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FailureOnRemovalTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FailureOnRemovalTest.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -0,0 +1,104 @@
+package org.drools.integrationtests;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Collection;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.builder.conf.DefaultDialectOption;
+import org.drools.compiler.DroolsParserException;
+import org.drools.conf.SequentialOption;
+import org.drools.conf.ShareAlphaNodesOption;
+import org.drools.conf.ShareBetaNodesOption;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class FailureOnRemovalTest extends TestCase {
+ private static final String LS = System.getProperty( "line.separator" );
+ private static final String PACKAGE = "failure_on_removal";
+ private static final String RULE_1 = "rule_1";
+ private static final String RULE_2 = "rule_2";
+ private static final String RULE_3 = "rule_3";
+ private static final boolean SHARE_BETA_NODES = true;
+ private static final boolean NOT_SHARE_BETA_NODES = false;
+
+ public void testWithBetaNodeSharing() throws Exception {
+ runTest( SHARE_BETA_NODES );
+ }
+
+ public void testWithoutBetaNodeSharing() throws Exception {
+ runTest( NOT_SHARE_BETA_NODES );
+ }
+
+ private void runTest(boolean shareBetaNodes) throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase( shareBetaNodes );
+ Collection<KnowledgePackage> rule1 = compileRule( RULE_1 );
+ kbase.addKnowledgePackages( rule1 );
+
+ // we need to add at least two rules. Test will not fail with only one rule.
+ Collection<KnowledgePackage> rule2 = compileRule( RULE_2 );
+ kbase.addKnowledgePackages( rule2 );
+
+ kbase.removeRule( PACKAGE,
+ RULE_1 );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ int fired = ksession.fireAllRules();
+ ksession.dispose();
+
+ assertEquals( 1, fired );
+
+ Collection<KnowledgePackage> rule3 = compileRule( RULE_3 );
+ kbase.addKnowledgePackages( rule3 );
+ }
+
+ private Collection<KnowledgePackage> compileRule(String name) throws DroolsParserException,
+ IOException {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( createKnowledgeBuilderConfiguration() );
+ String drl = getDrl( name );
+ Reader drlReader = new StringReader( drl );
+ kbuilder.add( ResourceFactory.newReaderResource( drlReader ),
+ ResourceType.DRL );
+ assertFalse( kbuilder.getErrors().toString(),
+ kbuilder.hasErrors() );
+ return kbuilder.getKnowledgePackages();
+ }
+
+ private KnowledgeBuilderConfiguration createKnowledgeBuilderConfiguration() {
+ Properties properties = new Properties();
+ properties.setProperty( "drools.dialect.java.compiler",
+ "JANINO" );
+ KnowledgeBuilderConfiguration kconf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration( properties,
+ getClass().getClassLoader() );
+ kconf.setOption( DefaultDialectOption.get( "java" ) );
+ return kconf;
+ }
+
+ private KnowledgeBase createKnowledgeBase(boolean shareBetaNodes) {
+ KnowledgeBaseConfiguration ruleBaseConfiguration = createKnowledgeBaseConfiguration( shareBetaNodes );
+ return KnowledgeBaseFactory.newKnowledgeBase( ruleBaseConfiguration );
+ }
+
+ private KnowledgeBaseConfiguration createKnowledgeBaseConfiguration(boolean shareBetaNodes) {
+ KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kconf.setOption( SequentialOption.NO );
+ kconf.setOption( ShareAlphaNodesOption.YES );
+ kconf.setOption( shareBetaNodes ? ShareBetaNodesOption.YES : ShareBetaNodesOption.NO );
+ return kconf;
+ }
+
+ private String getDrl(String name) {
+ return new StringBuffer( "package " ).append( PACKAGE ).append( LS ).append( "rule '" ).append( name ).append( '\'' ).append( LS ).append( "when" ).append( LS ).append( "eval (true)" ).append( LS ).append( "then" ).append( LS ).append( "end" ).append( LS ).toString();
+ }
+}
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 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -19,10 +19,14 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.HashMap;
+import java.util.Map;
+import org.drools.definition.rule.Rule;
import org.drools.reteoo.EntryPointNode;
import org.drools.reteoo.ReteooBuilder;
import org.drools.reteoo.RuleRemovalContext;
+import org.drools.spi.RuleComponent;
/**
* The base class for all Rete nodes.
@@ -35,9 +39,10 @@
implements
NetworkNode {
- protected int id;
- protected RuleBasePartitionId partitionId;
- protected boolean partitionsEnabled;
+ protected int id;
+ protected RuleBasePartitionId partitionId;
+ protected boolean partitionsEnabled;
+ protected Map<Rule, RuleComponent> associations;
public BaseNode() {
@@ -49,23 +54,30 @@
* @param id
* The unique id
*/
- public BaseNode(final int id, final RuleBasePartitionId partitionId, final boolean partitionsEnabled ) {
+ public BaseNode(final int id,
+ final RuleBasePartitionId partitionId,
+ final boolean partitionsEnabled) {
super();
this.id = id;
this.partitionId = partitionId;
this.partitionsEnabled = partitionsEnabled;
+ this.associations = new HashMap<Rule, RuleComponent>();
}
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- id = in.readInt();
+ @SuppressWarnings("unchecked")
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ id = in.readInt();
partitionId = (RuleBasePartitionId) in.readObject();
partitionsEnabled = in.readBoolean();
+ associations = (Map<Rule, RuleComponent>) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- out.writeInt(id);
+ out.writeInt( id );
out.writeObject( partitionId );
out.writeBoolean( partitionsEnabled );
+ out.writeObject( associations );
}
/* (non-Javadoc)
@@ -81,23 +93,24 @@
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,
InternalWorkingMemory[] workingMemories) {
+ this.removeAssociation( context.getRule() );
doRemove( context,
builder,
node,
workingMemories );
- if ( !this.isInUse() && !( this instanceof EntryPointNode ) ) {
+ if ( !this.isInUse() && !(this instanceof EntryPointNode) ) {
builder.getIdGenerator().releaseId( this.getId() );
}
}
@@ -137,13 +150,44 @@
public RuleBasePartitionId getPartitionId() {
return this.partitionId;
}
-
+
/**
* Sets the partition this node belongs to
*
* @param partitionId
*/
- public void setPartitionId( final RuleBasePartitionId partitionId ) {
+ public void setPartitionId(final RuleBasePartitionId partitionId) {
this.partitionId = partitionId;
}
+
+ /**
+ * Creates an association between this node and the rule + rule component
+ * that caused the creation of this node. Since nodes might be shared,
+ * there might be more than one source for each node.
+ *
+ * @param rule The rule source
+ * @param component
+ */
+ public void addAssociation( Rule rule, RuleComponent component ) {
+ this.associations.put( rule, component );
+ }
+
+ /**
+ * Returns the map of associations for this node
+ *
+ * @return
+ */
+ public Map<Rule, RuleComponent> getAssociations() {
+ return this.associations;
+ }
+
+ /**
+ * Removes the association to the given rule from the
+ * associations map.
+ *
+ * @param rule
+ */
+ public void removeAssociation( Rule rule ) {
+ this.associations.remove( rule );
+ }
}
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 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Map.Entry;
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
@@ -28,9 +29,11 @@
import org.drools.common.NodeMemory;
import org.drools.common.PropagationContextImpl;
import org.drools.common.RuleBasePartitionId;
+import org.drools.definition.rule.Rule;
import org.drools.reteoo.builder.BuildContext;
import org.drools.rule.EvalCondition;
import org.drools.spi.PropagationContext;
+import org.drools.spi.RuleComponent;
/**
* Node which filters <code>ReteTuple</code>s.
@@ -312,6 +315,11 @@
for( InternalWorkingMemory workingMemory : workingMemories ) {
workingMemory.clearNodeMemory( this );
}
+ } else {
+ // need to re-wire eval expression to the same one from another rule
+ // that is sharing this node
+ Entry<Rule, RuleComponent> next = this.getAssociations().entrySet().iterator().next();
+ this.condition = (EvalCondition) next.getValue();
}
this.tupleSource.remove( context,
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 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -231,7 +231,7 @@
final Object object = this.rules.remove( rule );
final BaseNode[] nodes = (BaseNode[]) object;
- final RuleRemovalContext context = new RuleRemovalContext();
+ final RuleRemovalContext context = new RuleRemovalContext( rule );
for ( int i = 0, length = nodes.length; i < length; i++ ) {
final BaseNode node = nodes[i];
node.remove( context,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleRemovalContext.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -24,6 +24,7 @@
import java.io.ObjectOutput;
import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.rule.Rule;
/**
* This context class is used during rule removal to ensure
@@ -36,9 +37,13 @@
implements
Externalizable {
+ // the rule being removed
+ private Rule rule;
+
private CleanupAdapter cleanupAdapter;
- public RuleRemovalContext() {
+ public RuleRemovalContext( final Rule rule ) {
+ this.rule = rule;
}
public void readExternal(ObjectInput in) throws IOException,
@@ -48,6 +53,15 @@
public void writeExternal(ObjectOutput out) throws IOException {
}
+ /**
+ * Returns the reference to the rule being removed from the kbase
+ *
+ * @return
+ */
+ public Rule getRule() {
+ return rule;
+ }
+
public void setCleanupAdapter(CleanupAdapter cleanupAdapter) {
this.cleanupAdapter = cleanupAdapter;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -47,6 +47,7 @@
final RuleConditionElement rce) {
final Accumulate accumulate = (Accumulate) rce;
boolean existSubNetwort = false;
+ context.pushRuleComponent( accumulate );
final List resultBetaConstraints = context.getBetaconstraints();
final List resultAlphaConstraints = context.getAlphaConstraints();
@@ -113,6 +114,7 @@
context.setObjectSource( null );
context.setCurrentPatternOffset( currentPatternIndex );
context.setBehaviors( Collections.EMPTY_LIST );
+ context.popRuleComponent();
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -19,6 +19,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
+import java.util.Stack;
import org.drools.common.BaseNode;
import org.drools.common.InternalRuleBase;
@@ -32,6 +33,7 @@
import org.drools.rule.Query;
import org.drools.rule.Rule;
import org.drools.rule.RuleConditionElement;
+import org.drools.spi.RuleComponent;
import org.drools.time.TemporalDependencyMatrix;
/**
@@ -58,6 +60,9 @@
// rule being added at this moment
private Rule rule;
+
+ // the rule component being processed at the moment
+ private Stack<RuleComponent> ruleComponent;
// working memories attached to the given rulebase
private InternalWorkingMemory[] workingMemories;
@@ -125,6 +130,8 @@
this.nodes = new LinkedList<BaseNode>();
this.partitionId = null;
+
+ this.ruleComponent = new Stack<RuleComponent>();
}
/**
@@ -444,4 +451,40 @@
}
}
+ /**
+ * Removes the top element from the rule component stack.
+ * The rule component stack is used to add trackability to
+ * the ReteOO nodes so that they can be linked to the rule
+ * components that originated them.
+ *
+ * @return
+ */
+ public RuleComponent popRuleComponent() {
+ return this.ruleComponent.pop();
+ }
+
+ /**
+ * Peeks at the top element from the rule component stack.
+ * The rule component stack is used to add trackability to
+ * the ReteOO nodes so that they can be linked to the rule
+ * components that originated them.
+ *
+ * @return
+ */
+ public RuleComponent peekRuleComponent() {
+ return this.ruleComponent.isEmpty() ? null : this.ruleComponent.peek();
+ }
+
+ /**
+ * Adds the ruleComponent to the top of the rule component stack.
+ * The rule component stack is used to add trackability to
+ * the ReteOO nodes so that they can be linked to the rule
+ * components that originated them.
+ *
+ * @return
+ */
+ public void pushRuleComponent( RuleComponent ruleComponent ) {
+ this.ruleComponent.push( ruleComponent );
+ }
+
}
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 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -158,6 +158,7 @@
// undo previous id assignment
context.releaseId( candidate.getId() );
}
+ node.addAssociation( context.getRule(), context.peekRuleComponent() );
return node;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -52,6 +52,7 @@
boolean existSubNetwort = false;
final Collect collect = (Collect) rce;
+ context.pushRuleComponent( collect );
final List resultBetaConstraints = context.getBetaconstraints();
final List resultAlphaConstraints = context.getAlphaConstraints();
@@ -125,6 +126,7 @@
context.setObjectSource( null );
context.setCurrentPatternOffset( currentPatternIndex );
context.setBehaviors( Collections.EMPTY_LIST );
+ context.popRuleComponent();
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/EvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/EvalBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/EvalBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -37,6 +37,7 @@
final RuleConditionElement rce) {
final EvalCondition eval = (EvalCondition) rce;
+ context.pushRuleComponent( rce );
utils.checkUnboundDeclarations( context,
eval.getRequiredDeclarations() );
context.setTupleSource( (LeftTupleSource) utils.attachNode( context,
@@ -44,6 +45,7 @@
context.getTupleSource(),
eval,
context ) ) );
+ context.popRuleComponent();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ForallBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ForallBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/ForallBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -49,6 +49,7 @@
final BuildUtils utils,
final RuleConditionElement rce) {
final Forall forall = (Forall) rce;
+ context.pushRuleComponent( forall );
// forall can be translated into
// not( basePattern and not( <remaining_patterns>+ ) )
@@ -81,6 +82,8 @@
builder.build( context,
utils,
not );
+
+ context.popRuleComponent();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -38,6 +38,7 @@
final BuildUtils utils,
final RuleConditionElement rce) {
final From from = (From) rce;
+ context.pushRuleComponent( from );
BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context, context.getBetaconstraints(), true );
@@ -51,6 +52,7 @@
context ) ) );
context.setAlphaConstraints( null );
context.setBetaconstraints( null );
+ context.popRuleComponent();
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -73,12 +73,14 @@
final ReteooComponentBuilder builder = this.geBuilders.get( ge.getType() );
context.push( ge );
+ context.pushRuleComponent( ge );
builder.build( context,
utils,
rce );
context.pop();
+ context.popRuleComponent();
}
/**
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 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -35,7 +35,6 @@
import org.drools.rule.Behavior;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
-import org.drools.rule.FixedDuration;
import org.drools.rule.GroupElement;
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Pattern;
@@ -45,7 +44,6 @@
import org.drools.rule.VariableConstraint;
import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.Constraint;
-import org.drools.spi.Duration;
import org.drools.spi.ObjectType;
import org.drools.time.impl.CompositeMaxDurationTimer;
import org.drools.time.impl.DurationTimer;
@@ -69,9 +67,11 @@
final Pattern pattern = (Pattern) rce;
+ context.pushRuleComponent( pattern );
this.attachPattern( context,
utils,
pattern );
+ context.popRuleComponent();
}
@@ -314,11 +314,13 @@
for ( final Iterator<Constraint> it = alphaConstraints.iterator(); it.hasNext(); ) {
final AlphaNodeFieldConstraint constraint = (AlphaNodeFieldConstraint) it.next();
+ context.pushRuleComponent( constraint );
context.setObjectSource( (ObjectSource) utils.attachNode( context,
new AlphaNode( context.getNextId(),
(AlphaNodeFieldConstraint) constraint,
context.getObjectSource(),
context ) ) );
+ context.popRuleComponent();
}
// now restore back to original values
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/QueryElementBuilder.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -34,6 +34,7 @@
final RuleConditionElement rce) {
final QueryElement qe = (QueryElement) rce;
+ context.pushRuleComponent( qe );
qe.getResultPattern().setOffset( context.getCurrentPatternOffset() );
@@ -46,7 +47,7 @@
qe,
false,
context ) ) );
-
+ context.popRuleComponent();
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java 2010-05-28 23:17:38 UTC (rev 33153)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java 2010-05-29 02:34:50 UTC (rev 33154)
@@ -16,12 +16,15 @@
* limitations under the License.
*/
+import static org.mockito.Mockito.mock;
+
import org.drools.DroolsTestCase;
import org.drools.FactException;
import org.drools.RuleBaseFactory;
import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.PropagationContextImpl;
+import org.drools.definition.rule.Rule;
import org.drools.reteoo.EvalConditionNode.EvalMemory;
import org.drools.reteoo.builder.BuildContext;
import org.drools.spi.PropagationContext;
@@ -231,7 +234,7 @@
this.workingMemory );
// Check memory was not populated
- final EvalMemory memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
+ this.workingMemory.getNodeMemory( node );
// test no propagations
assertEquals( 0,
@@ -286,7 +289,7 @@
assertEquals( 1,
sink.getAsserted().size() );
- RuleRemovalContext removalContext = new RuleRemovalContext();
+ RuleRemovalContext removalContext = new RuleRemovalContext( mock( Rule.class ));
InternalWorkingMemory[] workingMemories = new InternalWorkingMemory[]{this.workingMemory};
// This use to throw ClassCastException JBRULES-1719
More information about the jboss-svn-commits
mailing list