[jboss-svn-commits] JBL Code SVN: r18230 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 31 17:22:32 EST 2008
Author: tirelli
Date: 2008-01-31 17:22:32 -0500 (Thu, 31 Jan 2008)
New Revision: 18230
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELKnowledgeHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELLocalDeclarationVariable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.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/rule/EvalCondition.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/EvalExpression.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockEvalCondition.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java
Log:
JBRULES-1392: fixing DroolsMVELFactory sharing
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2008-01-31 22:22:32 UTC (rev 18230)
@@ -136,10 +136,14 @@
public class @{invokerClassName} implements org.drools.spi.EvalExpression, org.drools.spi.CompiledInvoker
{
private static final long serialVersionUID = 400L;
+
+ // no need for context
+ public Object createContext() { return null; }
public boolean evaluate(org.drools.spi.Tuple tuple,
org.drools.rule.Declaration[] declarations,
- org.drools.WorkingMemory workingMemory) throws Exception {
+ org.drools.WorkingMemory workingMemory,
+ Object context ) throws Exception {
@foreach{declarationTypes as type, declarations as declr} @{type} @{declr.identifier} = ( @{type} ) declarations[@{i0}].@{declr.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, ( (org.drools.common.InternalFactHandle) tuple.get( declarations[@{i0}] ) ).getObject() );
@end{}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -77,15 +77,19 @@
10 );
final InternalFactHandle f0 = (InternalFactHandle) wm.insert( cheddar );
final ReteTuple tuple = new ReteTuple( f0 );
+
+ Object evalContext = eval.createContext();
assertTrue( eval.isAllowed( tuple,
- wm ) );
+ wm,
+ evalContext ) );
cheddar.setPrice( 9 );
wm.update( f0,
cheddar );
assertFalse( eval.isAllowed( tuple,
- wm ) );
+ wm,
+ evalContext ) );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MVELDataProvider.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -18,24 +18,33 @@
DataProvider,
Serializable {
+ private static final long serialVersionUID = 1901006343031798173L;
+
private final Serializable expression;
- private final DroolsMVELFactory factory;
+ private final DroolsMVELFactory prototype;
public MVELDataProvider(final Serializable expression,
final DroolsMVELFactory factory) {
this.expression = expression;
- this.factory = factory;
+ this.prototype = factory;
}
public Declaration[] getRequiredDeclarations() {
return new Declaration[]{};
//return factory.getRequiredDeclarations();
}
+
+ public Object createContext() {
+ return this.prototype.clone();
+ }
public Iterator getResults(final Tuple tuple,
final WorkingMemory wm,
- final PropagationContext ctx) {
- this.factory.setContext( tuple,
+ final PropagationContext ctx,
+ final Object executionContext ) {
+ DroolsMVELFactory factory = (DroolsMVELFactory) executionContext;
+
+ factory.setContext( tuple,
null,
null,
wm,
@@ -43,7 +52,7 @@
//this.expression.
final Object result = MVEL.executeExpression( this.expression,
- this.factory );
+ factory );
if ( result instanceof Collection ) {
return ((Collection) result).iterator();
} else if ( result instanceof Iterator ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELFactory.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -1,8 +1,5 @@
package org.drools.base.mvel;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Calendar;
@@ -13,13 +10,10 @@
import java.util.Map;
import org.drools.WorkingMemory;
-import org.drools.common.DroolsObjectInputStream;
import org.drools.reteoo.ReteTuple;
import org.drools.rule.Declaration;
-import org.drools.rule.Package;
import org.drools.spi.KnowledgeHelper;
import org.drools.spi.Tuple;
-import org.mvel.CompileException;
import org.mvel.DataConversion;
import org.mvel.integration.VariableResolver;
import org.mvel.integration.impl.BaseVariableResolverFactory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELGlobalVariable.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -9,6 +9,8 @@
VariableResolver,
Serializable {
+ private static final long serialVersionUID = -2480015657934353449L;
+
private String name;
private Class knownType;
private DroolsMVELFactory factory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELKnowledgeHelper.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELKnowledgeHelper.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -2,7 +2,6 @@
import java.io.Serializable;
-import org.drools.rule.Declaration;
import org.drools.spi.KnowledgeHelper;
import org.mvel.integration.VariableResolver;
@@ -11,6 +10,8 @@
VariableResolver,
Serializable {
+ private static final long serialVersionUID = 9175428283083361478L;
+
private DroolsMVELFactory factory;
public static final String DROOLS = "drools";
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELLocalDeclarationVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELLocalDeclarationVariable.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/DroolsMVELLocalDeclarationVariable.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -11,6 +11,8 @@
VariableResolver,
Serializable {
+ private static final long serialVersionUID = -8081447010148362496L;
+
private Declaration declaration;
private DroolsMVELFactory factory;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -39,7 +39,7 @@
private static final long serialVersionUID = 400L;
- private final DroolsMVELFactory model;
+ private final DroolsMVELFactory prototype;
private final Serializable init;
private final Serializable action;
private final Serializable reverse;
@@ -51,7 +51,7 @@
final Serializable reverse,
final Serializable result) {
super();
- this.model = factory;
+ this.prototype = factory;
this.init = init;
this.action = action;
this.reverse = reverse;
@@ -148,7 +148,7 @@
}
public Object createWorkingMemoryContext() {
- return this.model.clone();
+ return this.prototype.clone();
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -4,8 +4,6 @@
import org.drools.WorkingMemory;
import org.drools.spi.Action;
-import org.drools.spi.Consequence;
-import org.drools.spi.KnowledgeHelper;
import org.mvel.CompiledExpression;
import org.mvel.MVEL;
import org.mvel.debug.DebugTools;
@@ -17,20 +15,25 @@
private static final long serialVersionUID = 400L;
private final Serializable expr;
- private final DroolsMVELFactory factory;
+ private final DroolsMVELFactory prototype;
public MVELAction(final Serializable expr,
final DroolsMVELFactory factory) {
this.expr = expr;
- this.factory = factory;
+ this.prototype = factory;
}
public String getDialect() {
return "mvel";
}
- public void execute(final WorkingMemory workingMemory) throws Exception {
- this.factory.setContext( null,
+ public Object createContext() {
+ return this.prototype.clone();
+ }
+
+ public void execute(final WorkingMemory workingMemory, final Object actionContext ) throws Exception {
+ DroolsMVELFactory factory = (DroolsMVELFactory) actionContext;
+ factory.setContext( null,
null,
null,
workingMemory,
@@ -46,11 +49,11 @@
}
MVEL.executeDebugger( compexpr,
null,
- this.factory );
+ factory );
} else {
MVEL.executeExpression( compexpr,
null,
- this.factory );
+ factory );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEvalExpression.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -17,25 +17,31 @@
private static final long serialVersionUID = 400L;
private final Serializable expr;
- private final DroolsMVELFactory factory;
+ private final DroolsMVELFactory prototype;
public MVELEvalExpression(final Serializable expr,
final DroolsMVELFactory factory) {
this.expr = expr;
- this.factory = factory;
+ this.prototype = factory;
}
+
+ public Object createContext() {
+ return this.prototype.clone();
+ }
public boolean evaluate(final Tuple tuple,
final Declaration[] requiredDeclarations,
- final WorkingMemory workingMemory) throws Exception {
- this.factory.setContext( tuple,
+ final WorkingMemory workingMemory,
+ final Object context) throws Exception {
+ DroolsMVELFactory factory = (DroolsMVELFactory) context;
+ factory.setContext( tuple,
null,
null,
workingMemory,
null );
final Boolean result = (Boolean) MVEL.executeExpression( this.expr,
new Object(),
- this.factory );
+ factory );
return result.booleanValue();
}
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-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import java.io.Serializable;
+
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
import org.drools.common.InternalWorkingMemory;
@@ -141,14 +143,15 @@
public void assertTuple(final ReteTuple tuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+ final EvalMemory memory = (EvalMemory) workingMemory.getNodeMemory( this );
final boolean allowed = this.condition.isAllowed( tuple,
- workingMemory );
+ workingMemory,
+ memory.context );
if ( allowed ) {
if ( this.tupleMemoryEnabled ) {
- final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( this );
- memory.add( tuple );
+ memory.tupleMemory.add( tuple );
}
this.sink.propagateAssertTuple( tuple,
@@ -160,10 +163,10 @@
public void retractTuple(final ReteTuple tuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( this );
+ final EvalMemory memory = (EvalMemory) workingMemory.getNodeMemory( this );
// can we improve that?
- final ReteTuple memTuple = memory.remove( tuple );
+ final ReteTuple memTuple = memory.tupleMemory.remove( tuple );
if ( memTuple != null ) {
this.sink.propagateRetractTuple( memTuple,
context,
@@ -199,7 +202,7 @@
}
public Object createMemory(final RuleBaseConfiguration config) {
- return new TupleHashTable();
+ return new EvalMemory( this.tupleMemoryEnabled, this.condition.createContext() );
}
/* (non-Javadoc)
@@ -209,9 +212,9 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( this );
+ final EvalMemory memory = (EvalMemory) workingMemory.getNodeMemory( this );
- final Iterator it = memory.iterator();
+ final Iterator it = memory.tupleMemory.iterator();
for ( ReteTuple tuple = (ReteTuple) it.next(); tuple != null; tuple = (ReteTuple) it.next() ) {
sink.assertTuple( tuple,
context,
@@ -278,5 +281,20 @@
public void setPreviousTupleSinkNode(final TupleSinkNode previous) {
this.previousTupleSinkNode = previous;
}
+
+ public static class EvalMemory implements Serializable {
+ private static final long serialVersionUID = -2754669682742843929L;
+
+ public TupleHashTable tupleMemory;
+ public Object context;
+
+ public EvalMemory( final boolean tupleMemoryEnabled, final Object context ) {
+ this.context = context;
+ if( tupleMemoryEnabled ) {
+ this.tupleMemory = new TupleHashTable();
+ }
+ }
+ }
+
}
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-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -1,5 +1,7 @@
package org.drools.reteoo;
+import java.io.Serializable;
+
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
import org.drools.common.BetaConstraints;
@@ -32,9 +34,9 @@
private TupleSinkNode previousTupleSinkNode;
private TupleSinkNode nextTupleSinkNode;
-
- protected boolean tupleMemoryEnabled;
+ protected boolean tupleMemoryEnabled;
+
public FromNode(final int id,
final DataProvider dataProvider,
final TupleSource tupleSource,
@@ -54,20 +56,23 @@
public void assertTuple(final ReteTuple leftTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+ final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
- memory.getTupleMemory().add( leftTuple );
+ memory.betaMemory.getTupleMemory().add( leftTuple );
final LinkedList list = new LinkedList();
- this.betaConstraints.updateFromTuple( memory.getContext(),
+ this.betaConstraints.updateFromTuple( memory.betaMemory.getContext(),
workingMemory,
leftTuple );
for ( final java.util.Iterator it = this.dataProvider.getResults( leftTuple,
workingMemory,
- context ); it.hasNext(); ) {
+ context,
+ memory.providerContext ); it.hasNext(); ) {
final Object object = it.next();
- final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object, false, workingMemory );
+ final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object,
+ false,
+ workingMemory );
boolean isAllowed = true;
if ( this.alphaConstraints != null ) {
@@ -82,7 +87,7 @@
}
}
- if ( isAllowed && this.betaConstraints.isAllowedCachedLeft( memory.getContext(),
+ if ( isAllowed && this.betaConstraints.isAllowedCachedLeft( memory.betaMemory.getContext(),
handle ) ) {
list.add( new LinkedListEntry( handle ) );
@@ -94,12 +99,12 @@
workingMemory.getFactHandleFactory().destroyFactHandle( handle );
}
}
-
- this.betaConstraints.resetTuple( memory.getContext() );
-
+
+ this.betaConstraints.resetTuple( memory.betaMemory.getContext() );
+
if ( !list.isEmpty() ) {
- memory.getCreatedHandles().put( leftTuple,
- list );
+ memory.betaMemory.getCreatedHandles().put( leftTuple,
+ list );
}
}
@@ -108,10 +113,10 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
- final ReteTuple tuple = memory.getTupleMemory().remove( leftTuple );
+ final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
+ final ReteTuple tuple = memory.betaMemory.getTupleMemory().remove( leftTuple );
- final LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
+ final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
// if tuple was propagated
if ( list != null ) {
for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
@@ -145,12 +150,13 @@
}
public void remove(ReteooBuilder builder,
- final BaseNode node, final InternalWorkingMemory[] workingMemories) {
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
if ( !node.isInUse() ) {
removeTupleSink( (TupleSink) node );
}
- removeShare(builder);
+ removeShare( builder );
if ( !this.isInUse() ) {
for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
@@ -158,18 +164,19 @@
}
}
this.tupleSource.remove( builder,
- this, workingMemories );
+ this,
+ workingMemories );
}
public void updateSink(final TupleSink sink,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+ final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
- final Iterator tupleIter = memory.getTupleMemory().iterator();
+ final Iterator tupleIter = memory.betaMemory.getTupleMemory().iterator();
for ( ReteTuple tuple = (ReteTuple) tupleIter.next(); tuple != null; tuple = (ReteTuple) tupleIter.next() ) {
- final LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
+ final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
if ( list == null ) {
continue;
}
@@ -185,18 +192,20 @@
}
public Object createMemory(final RuleBaseConfiguration config) {
- return new BetaMemory( new TupleHashTable(),
- null,
- this.betaConstraints.createContext() );
+ BetaMemory beta = new BetaMemory( new TupleHashTable(),
+ null,
+ this.betaConstraints.createContext() );
+ return new FromMemory( beta,
+ this.dataProvider.createContext() );
}
-
+
public boolean isTupleMemoryEnabled() {
return tupleMemoryEnabled;
}
public void setTupleMemoryEnabled(boolean tupleMemoryEnabled) {
this.tupleMemoryEnabled = tupleMemoryEnabled;
- }
+ }
/**
* Returns the next node
@@ -234,4 +243,16 @@
this.previousTupleSinkNode = previous;
}
+ public static class FromMemory implements Serializable {
+ private static final long serialVersionUID = -5802345705144095216L;
+
+ public BetaMemory betaMemory;
+ public Object providerContext;
+
+ public FromMemory(BetaMemory betaMemory,
+ Object providerContext) {
+ this.betaMemory = betaMemory;
+ this.providerContext = providerContext;
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -65,13 +65,19 @@
public Declaration[] getRequiredDeclarations() {
return this.requiredDeclarations;
}
+
+ public Object createContext() {
+ return this.expression.createContext();
+ }
public boolean isAllowed(final Tuple tuple,
- final WorkingMemory workingMemory) {
+ final WorkingMemory workingMemory,
+ final Object context ) {
try {
return this.expression.evaluate( tuple,
this.requiredDeclarations,
- workingMemory );
+ workingMemory,
+ context );
} catch ( final Exception e ) {
throw new RuntimeDroolsException( e );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -1,8 +1,10 @@
package org.drools.spi;
import org.drools.WorkingMemory;
-import org.drools.rule.Dialectable;
public interface Action {
- void execute(WorkingMemory workingMemory) throws Exception ;
+
+ public Object createContext();
+
+ public void execute(final WorkingMemory workingMemory, final Object actionContext ) throws Exception ;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -9,9 +9,12 @@
public interface DataProvider extends Serializable {
public Declaration[] getRequiredDeclarations();
+
+ public Object createContext();
public Iterator getResults(Tuple tuple,
WorkingMemory wm,
- PropagationContext ctx);
+ PropagationContext ctx,
+ Object providerContext);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/EvalExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/EvalExpression.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/EvalExpression.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -22,7 +22,11 @@
public interface EvalExpression
extends
Invoker {
+
+ public Object createContext();
+
public boolean evaluate(Tuple tuple,
Declaration[] requiredDeclarations,
- WorkingMemory workingMemory) throws Exception;
+ WorkingMemory workingMemory,
+ Object context ) throws Exception;
}
\ No newline at end of file
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 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -21,6 +21,7 @@
import org.drools.RuleBaseFactory;
import org.drools.common.DefaultFactHandle;
import org.drools.common.PropagationContextImpl;
+import org.drools.reteoo.EvalConditionNode.EvalMemory;
import org.drools.reteoo.builder.BuildContext;
import org.drools.spi.PropagationContext;
import org.drools.util.TupleHashTable;
@@ -79,9 +80,9 @@
new MockEvalCondition( true ),
buildContext );
- final TupleHashTable memory = (TupleHashTable) workingMemory.getNodeMemory( node );
+ final EvalMemory memory = (EvalMemory) workingMemory.getNodeMemory( node );
- assertNotNull( memory );
+ assertNotNull( memory.tupleMemory );
}
/**
@@ -123,13 +124,13 @@
this.workingMemory );
// Check memory was populated
- final TupleHashTable memory = (TupleHashTable) this.workingMemory.getNodeMemory( node );
+ final EvalMemory memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
assertEquals( 2,
- memory.size() );
+ memory.tupleMemory.size() );
- assertTrue( memory.contains( tuple0 ) );
- assertTrue( memory.contains( tuple1 ) );
+ assertTrue( memory.tupleMemory.contains( tuple0 ) );
+ assertTrue( memory.tupleMemory.contains( tuple1 ) );
// make sure assertions were propagated
assertEquals( 2,
@@ -170,12 +171,12 @@
this.workingMemory );
// Check memory was populated
- final TupleHashTable memory = (TupleHashTable) this.workingMemory.getNodeMemory( node );
+ final EvalMemory memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
assertEquals( 2,
- memory.size() );
- assertTrue( memory.contains( tuple0 ) );
- assertTrue( memory.contains( tuple1 ) );
+ memory.tupleMemory.size() );
+ assertTrue( memory.tupleMemory.contains( tuple0 ) );
+ assertTrue( memory.tupleMemory.contains( tuple1 ) );
// make sure assertions were propagated
assertEquals( 2,
@@ -188,9 +189,9 @@
// Now test that the fact is retracted correctly
assertEquals( 1,
- memory.size() );
+ memory.tupleMemory.size() );
- assertTrue( memory.contains( tuple1 ) );
+ assertTrue( memory.tupleMemory.contains( tuple1 ) );
// make sure retractions were propagated
assertEquals( 1,
@@ -203,7 +204,7 @@
// Now test that the fact is retracted correctly
assertEquals( 0,
- memory.size() );
+ memory.tupleMemory.size() );
// make sure retractions were propagated
assertEquals( 2,
@@ -243,10 +244,10 @@
this.workingMemory );
// Check memory was not populated
- final TupleHashTable memory = (TupleHashTable) this.workingMemory.getNodeMemory( node );
+ final EvalMemory memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
assertEquals( 0,
- memory.size() );
+ memory.tupleMemory.size() );
// test no propagations
assertEquals( 0,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -24,6 +24,7 @@
import org.drools.common.InternalFactHandle;
import org.drools.common.PropagationContextImpl;
import org.drools.common.SingleBetaConstraints;
+import org.drools.reteoo.FromNode.FromMemory;
import org.drools.rule.Declaration;
import org.drools.rule.LiteralConstraint;
import org.drools.rule.Pattern;
@@ -283,15 +284,15 @@
assertEquals( 2,
asserted.size() );
- final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( from );
+ final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( from );
assertEquals( 1,
- memory.getTupleMemory().size() );
- assertNull( memory.getFactHandleMemory() );
+ memory.betaMemory.getTupleMemory().size() );
+ assertNull( memory.betaMemory.getFactHandleMemory() );
assertEquals( 2,
- ((LinkedList) memory.getCreatedHandles().get( tuple )).size() );
+ ((LinkedList) memory.betaMemory.getCreatedHandles().get( tuple )).size() );
- final InternalFactHandle handle1 = (InternalFactHandle) ((LinkedListEntry) ((LinkedList) memory.getCreatedHandles().get( tuple )).getFirst()).getObject();
- final InternalFactHandle handle2 = (InternalFactHandle) ((LinkedListEntry) ((LinkedList) memory.getCreatedHandles().get( tuple )).getLast()).getObject();
+ final InternalFactHandle handle1 = (InternalFactHandle) ((LinkedListEntry) ((LinkedList) memory.betaMemory.getCreatedHandles().get( tuple )).getFirst()).getObject();
+ final InternalFactHandle handle2 = (InternalFactHandle) ((LinkedListEntry) ((LinkedList) memory.betaMemory.getCreatedHandles().get( tuple )).getLast()).getObject();
assertEquals( handle1.getObject(),
cheese1 );
assertEquals( handle2.getObject(),
@@ -301,8 +302,8 @@
context,
workingMemory );
assertEquals( 0,
- memory.getTupleMemory().size() );
- assertNull( memory.getFactHandleMemory() );
+ memory.betaMemory.getTupleMemory().size() );
+ assertNull( memory.betaMemory.getFactHandleMemory() );
}
public static class MockDataProvider
@@ -321,9 +322,14 @@
public Iterator getResults(final Tuple tuple,
final WorkingMemory wm,
- final PropagationContext ctx) {
+ final PropagationContext ctx,
+ final Object providerContext ) {
return this.collection.iterator();
}
+
+ public Object createContext() {
+ return null;
+ }
}
public static class Person {
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockEvalCondition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockEvalCondition.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockEvalCondition.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -36,10 +36,13 @@
*
*/
private static final long serialVersionUID = 400L;
+
+ public Object createContext() { return null; }
public boolean evaluate(Tuple tuple,
Declaration[] requiredDeclarations,
- WorkingMemory workingMemory) {
+ WorkingMemory workingMemory,
+ Object context ) {
return MockEvalCondition.this.isAllowed.booleanValue();
}
};
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java 2008-01-31 20:45:17 UTC (rev 18229)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java 2008-01-31 22:22:32 UTC (rev 18230)
@@ -13,7 +13,8 @@
public class PackageCompilationDataTest extends TestCase {
public static class TestEvalExpression implements EvalExpression {
- public boolean evaluate(Tuple t, Declaration[] d, WorkingMemory w) {
+ public Object createContext() { return null; }
+ public boolean evaluate(Tuple t, Declaration[] d, WorkingMemory w, Object context ) {
return false;
}
}
More information about the jboss-svn-commits
mailing list