Author: tirelli Date: 2006-05-17 20:34:24 -0400 (Wed, 17 May 2006) New Revision: 4306 Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 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/BetaMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.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/NodeMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkListFactory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.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/beta/BetaMemoryFactoryTest.java Log: Partial implementation for JBRULES-233 and JBRULES-266 Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -0,0 +1,71 @@ +/* + * Copyright 2005 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. + */ + +package org.drools; + +import java.util.Properties; + +/** + * RuleBaseConfiguration + * A class to store RuleBase related configuration + * + * Created: 16/05/2006 + * @author <a href="mailto:ti...@po...">Edson Tirelli</a> + * + * @version $Id$ + */ +public class RuleBaseConfiguration extends Properties { + /** + * Property to enable/disable left beta memory indexing + * Defaults to false + */ + public static final String INDEX_LEFT_BETA_MEMORY = "org.drools.reteoo.beta.index-left"; + /** + * Property to enable/disable right beta memory indexing + * Defaults to true + */ + public static final String INDEX_RIGHT_BETA_MEMORY = "org.drools.reteoo.beta.index-right"; + /** + * Property to enable/disable alpha node hashing inside object type nodes + * Defaults to true + */ + public static final String HASH_OBJECT_TYPE_NODES = "org.drools.reteoo.alpha.hash-type-node"; + /** + * Property to enable/disable alpha node hashing inside alpha nodes + * Defaults to false + */ + public static final String HASH_ALPHA_NODES = "org.drools.reteoo.alpha.hash-alpha-node"; + + // a generated serial version id + private static final long serialVersionUID = 2989084670778336973L; + + public RuleBaseConfiguration() { + // default values + this.setProperty( INDEX_LEFT_BETA_MEMORY, + System.getProperty( INDEX_LEFT_BETA_MEMORY, "false" ) ); + this.setProperty( INDEX_RIGHT_BETA_MEMORY, + System.getProperty( INDEX_RIGHT_BETA_MEMORY, "true" ) ); + this.setProperty( HASH_OBJECT_TYPE_NODES, + System.getProperty( HASH_OBJECT_TYPE_NODES, "true" ) ); + this.setProperty( HASH_ALPHA_NODES, + System.getProperty( HASH_ALPHA_NODES, "false" ) ); + } + + public boolean getBooleanProperty(String prop) { + return Boolean.valueOf( prop ).booleanValue(); + } + +} Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + id author date revision Name: svn:eol-style + native 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -21,6 +21,7 @@ import java.util.Set; import org.drools.FactException; +import org.drools.RuleBaseConfiguration; import org.drools.common.PropagationContextImpl; import org.drools.spi.FieldConstraint; import org.drools.spi.PropagationContext; @@ -61,7 +62,23 @@ AlphaNode(int id, FieldConstraint constraint, ObjectSource objectSource) { - super( id ); + this( id, null, constraint, objectSource ); + } + + /** + * Construct an <code>AlphaNode</code> with a unique id using the provided + * <code>ObjectSinkList</code> and <code>FieldConstraint</code>. + * + * @param id Node unique id + * @param sinklist An object sink list. If null, a default will be used. + * @param constraint Node's constraints + * @param objectSource Node's object source + */ + AlphaNode(int id, + ObjectSinkList sinklist, + FieldConstraint constraint, + ObjectSource objectSource) { + super( id, sinklist ); this.constraint = constraint; this.objectSource = objectSource; setHasMemory( true ); @@ -175,7 +192,7 @@ /** * Creates a HashSet for the AlphaNode's memory. */ - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new HashSet(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -21,6 +21,7 @@ import java.util.Iterator; import java.util.Map; +import org.drools.RuleBaseConfiguration; import org.drools.WorkingMemory; import org.drools.common.BetaNodeBinder; import org.drools.reteoo.beta.BetaLeftMemory; @@ -66,9 +67,9 @@ * Construct a BetaMemory with a LinkedList for the <code>Tuples</code> and a <code>LinkedHashMap</code> for the * <code>FactHandle</code>s */ - BetaMemory(BetaNodeBinder binder) { - this.leftMemory = BetaMemoryFactory.newLeftMemory( binder ); - this.rightMemory = BetaMemoryFactory.newRightMemory( binder ); + BetaMemory(RuleBaseConfiguration config, BetaNodeBinder binder) { + this.leftMemory = BetaMemoryFactory.newLeftMemory( config, binder ); + this.rightMemory = BetaMemoryFactory.newRightMemory( config, binder ); this.rightObjectMap = new HashMap(); } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -16,6 +16,7 @@ * limitations under the License. */ +import org.drools.RuleBaseConfiguration; import org.drools.common.BetaNodeBinder; import org.drools.common.PropagationContextImpl; import org.drools.spi.PropagationContext; @@ -174,8 +175,8 @@ /** * Creates a BetaMemory for the BetaNode's memory. */ - public Object createMemory() { - return new BetaMemory( this.getJoinNodeBinder() ); + public Object createMemory( RuleBaseConfiguration config ) { + return new BetaMemory( config, this.getJoinNodeBinder() ); } } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -20,6 +20,7 @@ import java.util.Iterator; import java.util.List; +import org.drools.RuleBaseConfiguration; import org.drools.common.PropagationContextImpl; import org.drools.rule.EvalCondition; import org.drools.spi.PropagationContext; @@ -248,7 +249,7 @@ } } - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new LinkedList(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -391,6 +391,6 @@ } } return propagatedTuples; - } + } } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; +import org.drools.RuleBaseConfiguration; import org.drools.common.BetaNodeBinder; import org.drools.common.PropagationContextImpl; import org.drools.rule.EvalCondition; @@ -280,7 +281,7 @@ * LeftInputAdapter uses a HashMap for memory. The key is the received <code>FactHandleImpl</code> and the * created <code>ReteTuple</code> is the value. */ - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new HashMap(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeMemory.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeMemory.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -1,5 +1,7 @@ package org.drools.reteoo; +import org.drools.RuleBaseConfiguration; + /* * Copyright 2005 JBoss Inc * @@ -19,6 +21,6 @@ public interface NodeMemory { public int getId(); - public Object createMemory(); + public Object createMemory( RuleBaseConfiguration config ); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkListFactory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkListFactory.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSinkListFactory.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -16,6 +16,8 @@ package org.drools.reteoo; +import org.drools.RuleBaseConfiguration; + /** * ObjectSinkListFactory * A factory for ObjectSinkLists @@ -25,19 +27,25 @@ * Created: 06/march/2006 */ public class ObjectSinkListFactory { - public static final String TYPE_NODE_ALPHA_HASHING = "org.drools.alpha-hash.type-node"; - public static final String ALPHA_NODE_ALPHA_HASHING = "org.drools.alpha-hash.alpha-node"; - - private static final String DISABLED = "false"; - private static final String ENABLED = "true"; - - public static final ObjectSinkList newObjectSinkList(Object owner) { - if ( (!DISABLED.equalsIgnoreCase( System.getProperty( TYPE_NODE_ALPHA_HASHING ) )) && (owner instanceof ObjectTypeNode) ) { + private final RuleBaseConfiguration config; + + public ObjectSinkListFactory(RuleBaseConfiguration config) { + this.config = config; + } + + public final ObjectSinkList newObjectSinkList(Class owner) { + if ( config.getBooleanProperty( RuleBaseConfiguration.HASH_OBJECT_TYPE_NODES) && + (ObjectTypeNode.class.isAssignableFrom( owner )) ) { return new HashedObjectSinkList(); - } else if ( ENABLED.equalsIgnoreCase( System.getProperty( ALPHA_NODE_ALPHA_HASHING ) ) && (owner instanceof AlphaNode) ) { + } else if ( config.getBooleanProperty( RuleBaseConfiguration.HASH_ALPHA_NODES ) && + (AlphaNode.class.isAssignableFrom( owner )) ) { return new HashedObjectSinkList(); } return new DefaultObjectSinkList( 1 ); } + + public static final ObjectSinkList newDefaultObjectSinkList() { + return new DefaultObjectSinkList( 1 ); + } } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -43,7 +43,7 @@ // ------------------------------------------------------------ /** The destination for <code>FactHandleImpl</code>. */ - protected ObjectSinkList objectSinks = ObjectSinkListFactory.newObjectSinkList( this ); + protected ObjectSinkList objectSinks; // ------------------------------------------------------------ // Constructors @@ -55,7 +55,21 @@ * @param id */ ObjectSource(int id) { + this( id, + null ); + } + + /** + * Single parameter constructor that specifies the unique id of the node. + * + * @param id + */ + ObjectSource(int id, + ObjectSinkList objectSinks) { super( id ); + this.objectSinks = (objectSinks != null) ? + objectSinks : + ObjectSinkListFactory.newDefaultObjectSinkList(); } // ------------------------------------------------------------ @@ -151,7 +165,7 @@ public ObjectSinkList getObjectSinks() { return this.objectSinks; } - + /** * Returns the object sinks as an unmodifiable list * @return 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -19,6 +19,7 @@ import java.io.Serializable; import java.util.Iterator; +import org.drools.RuleBaseConfiguration; import org.drools.common.PropagationContextImpl; import org.drools.spi.ObjectType; import org.drools.spi.PropagationContext; @@ -76,7 +77,23 @@ public ObjectTypeNode(int id, ObjectType objectType, Rete rete) { - super( id ); + this( id, null, objectType, rete ); + } + + /** + * Construct given a semantic <code>ObjectType</code> and the provided + * unique id. All <code>ObjectTypdeNode</code> have node memory. + * + * @param id The unique id for the node + * @param sinklist An object sink list for the node. If null, a default will be created. + * @param objectType The semantic object-type differentiator + * @param rete The rete network reference + */ + public ObjectTypeNode(int id, + ObjectSinkList sinklist, + ObjectType objectType, + Rete rete) { + super( id, sinklist ); this.rete = rete; this.objectType = objectType; setHasMemory( true ); @@ -237,7 +254,7 @@ * However PrimitiveLongMap is not ideal for spase data. So it should be monitored incase its more optimal * to switch back to a standard HashMap. */ - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new PrimitiveLongMap( 32, 8 ); } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -18,6 +18,7 @@ import java.util.LinkedList; +import org.drools.RuleBaseConfiguration; import org.drools.common.PropagationContextImpl; import org.drools.rule.Rule; import org.drools.spi.PropagationContext; @@ -151,7 +152,7 @@ // There are no child nodes to update, do nothing. } - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { //return new QueryTerminalNodeMemory(); return new LinkedList(); } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -25,6 +25,7 @@ import java.util.Map; import org.drools.FactException; +import org.drools.RuleBaseConfiguration; import org.drools.spi.ObjectType; import org.drools.spi.ObjectTypeResolver; import org.drools.spi.PropagationContext; @@ -273,7 +274,7 @@ //@todo: we really should attempt to clear the memory cache for this ObjectTypeNode } - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new HashMap(); } 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -92,6 +92,10 @@ private Map objectType; private int currentOffsetAdjustment; + + /** A factory for object sink lists */ + private transient ObjectSinkListFactory sinklistFactory; + // ------------------------------------------------------------ // Constructors @@ -111,6 +115,9 @@ //Set to 1 as Rete node is set to 0 this.id = 1; + + // creating factory + this.sinklistFactory = new ObjectSinkListFactory(this.ruleBase.getConfiguration()); } /** @@ -281,6 +288,7 @@ this.currentOffsetAdjustment = 1; ObjectSource objectSource = attachNode( new ObjectTypeNode( this.id++, + this.sinklistFactory.newObjectSinkList( ObjectTypeNode.class ), new ClassObjectType( InitialFact.class ), this.rete ) ); @@ -321,6 +329,7 @@ private void attachQuery(String queryName) { ClassObjectType queryObjectType = new ClassObjectType( DroolsQuery.class ); ObjectTypeNode queryObjectTypeNode = new ObjectTypeNode( this.id++, + this.sinklistFactory.newObjectSinkList( ObjectTypeNode.class ), queryObjectType, rete ); queryObjectTypeNode.attach(); @@ -338,6 +347,7 @@ evaluator ); AlphaNode alphaNode = new AlphaNode( this.id++, + this.sinklistFactory.newObjectSinkList( AlphaNode.class ), constraint, queryObjectTypeNode ); alphaNode.attach(); @@ -384,6 +394,7 @@ Class thisClass = ((ClassObjectType) column.getObjectType()).getClassType(); this.objectSource = attachNode( new ObjectTypeNode( this.id++, + this.sinklistFactory.newObjectSinkList( ObjectTypeNode.class ), column.getObjectType(), this.rete ) ); @@ -419,6 +430,7 @@ FieldConstraint fieldConstraint = (FieldConstraint) object; if ( fieldConstraint instanceof LiteralConstraint ) { this.objectSource = attachNode( new AlphaNode( this.id++, + this.sinklistFactory.newObjectSinkList( AlphaNode.class ), fieldConstraint, objectSource ) ); } else { Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -36,10 +36,12 @@ import org.drools.FactHandle; import org.drools.PackageIntegrationException; import org.drools.RuleBase; +import org.drools.RuleBaseConfiguration; import org.drools.RuleIntegrationException; import org.drools.WorkingMemory; import org.drools.common.ObjectInputStreamWithLoader; import org.drools.common.PropagationContextImpl; +import org.drools.reteoo.beta.BetaMemoryFactory; import org.drools.rule.CompositePackageClassLoader; import org.drools.rule.InvalidPatternException; import org.drools.rule.Package; @@ -65,6 +67,7 @@ // ------------------------------------------------------------ // Instance members // ------------------------------------------------------------ + private RuleBaseConfiguration config; private Map pkgs; @@ -89,7 +92,7 @@ /** Special value when adding to the underlying map. */ private static final Object PRESENT = new Object(); - + // ------------------------------------------------------------ // Constructors // ------------------------------------------------------------ @@ -101,16 +104,31 @@ * The rete network. */ public RuleBaseImpl() { - this( new DefaultFactHandleFactory() ); + this( null, new DefaultFactHandleFactory() ); } /** + * @param factHandleFactory + */ + public RuleBaseImpl(FactHandleFactory factHandleFactory) { + this( null, factHandleFactory ); + } + + /** + * @param config + */ + public RuleBaseImpl(RuleBaseConfiguration config) { + this( config, new DefaultFactHandleFactory() ); + } + + /** * Construct. * * @param rete * The rete network. */ - public RuleBaseImpl(FactHandleFactory factHandleFactory) { + public RuleBaseImpl(RuleBaseConfiguration config, FactHandleFactory factHandleFactory) { + this.config = ( config != null ) ? config : new RuleBaseConfiguration(); ObjectTypeResolver resolver = new ClassObjectTypeResolver(); this.rete = new Rete( resolver ); this.reteooBuilder = new ReteooBuilder( this, @@ -120,7 +138,7 @@ this.packageClassLoader = new CompositePackageClassLoader( Thread.currentThread().getContextClassLoader() ); this.pkgs = new HashMap(); this.globals = new HashMap(); - this.workingMemories = new WeakHashMap(); + this.workingMemories = new WeakHashMap(); } /** @@ -139,6 +157,7 @@ out.writeObject( this.reteooBuilder ); out.writeObject( this.factHandleFactory ); out.writeObject( this.globals ); + out.writeObject( this.config ); stream.writeObject( bos.toByteArray() ); } @@ -174,6 +193,8 @@ this.factHandleFactory = (FactHandleFactory) streamWithLoader.readObject(); this.globals = (Map) streamWithLoader.readObject(); + + this.config = (RuleBaseConfiguration) streamWithLoader.readObject(); this.workingMemories = new WeakHashMap(); } @@ -474,6 +495,10 @@ public Set getWorkingMemories() { return this.workingMemories.keySet(); } + + public RuleBaseConfiguration getConfiguration() { + return this.config; + } // /** // * This is to allow the RuleBase to be serializable. Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -16,10 +16,9 @@ * limitations under the License. */ -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; +import org.drools.RuleBaseConfiguration; import org.drools.common.Agenda; import org.drools.common.AgendaGroupImpl; import org.drools.common.AgendaItem; @@ -27,12 +26,10 @@ import org.drools.common.ScheduledAgendaItem; import org.drools.rule.Rule; import org.drools.spi.Activation; +import org.drools.spi.ActivationGroup; import org.drools.spi.AgendaGroup; import org.drools.spi.Duration; import org.drools.spi.PropagationContext; -import org.drools.spi.ActivationGroup; -import org.drools.util.LinkedListObjectWrapper; -import org.drools.util.Queueable; /** * Leaf Rete-OO node responsible for enacting <code>Action</code> s on a @@ -295,7 +292,7 @@ // There are no child nodes to update, do nothing. } - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new TerminalNodeMemory(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -780,7 +780,7 @@ Object memory = this.nodeMemories.get( node.getId() ); if ( memory == null ) { - memory = node.createMemory(); + memory = node.createMemory( this.ruleBase.getConfiguration() ); this.nodeMemories.put( node.getId(), memory ); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -18,6 +18,7 @@ import javax.naming.OperationNotSupportedException; +import org.drools.RuleBaseConfiguration; import org.drools.common.BetaNodeBinder; import org.drools.rule.BoundVariableConstraint; import org.drools.spi.Evaluator; @@ -32,12 +33,7 @@ * Created: 12/02/2006 */ public class BetaMemoryFactory { - private static final String INDEX_DISABLED = "false"; - private static final String INDEX_ENABLED = "true"; - public static final String INDEX_LEFT_BETA_MEMORY = "org.drools.reteoo.beta.index-left"; - public static final String INDEX_RIGHT_BETA_MEMORY = "org.drools.reteoo.beta.index-right"; - protected BetaMemoryFactory() { } @@ -50,11 +46,11 @@ * * @return the newly created BetaLeftMemory */ - public static BetaLeftMemory newLeftMemory(BetaNodeBinder binder) { + public static BetaLeftMemory newLeftMemory(RuleBaseConfiguration config, BetaNodeBinder binder) { BetaLeftMemory memory = null; BetaLeftMemory innerMostMemory = null; FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null; - if ( (constraints != null) && (INDEX_ENABLED.equalsIgnoreCase( System.getProperty( INDEX_LEFT_BETA_MEMORY ) )) ) { + if ( (constraints != null) && (config.getBooleanProperty( RuleBaseConfiguration.INDEX_LEFT_BETA_MEMORY ))) { for ( int i = 0; i < constraints.length; i++ ) { if ( constraints[i] instanceof BoundVariableConstraint ) { BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i]; @@ -113,11 +109,11 @@ * * @return the newly created BetaRightMemory */ - public static BetaRightMemory newRightMemory(BetaNodeBinder binder) { + public static BetaRightMemory newRightMemory(RuleBaseConfiguration config, BetaNodeBinder binder) { BetaRightMemory memory = null; BetaRightMemory innerMostMemory = null; FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null; - if ( (constraints != null) && (!INDEX_DISABLED.equalsIgnoreCase( System.getProperty( INDEX_RIGHT_BETA_MEMORY ) )) ) { + if ( (constraints != null) && ( config.getBooleanProperty( RuleBaseConfiguration.INDEX_RIGHT_BETA_MEMORY ))) { for ( int i = 0; i < constraints.length; i++ ) { if ( constraints[i] instanceof BoundVariableConstraint ) { BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i]; 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 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -23,6 +23,7 @@ import java.util.List; import org.drools.FactException; +import org.drools.RuleBaseConfiguration; import org.drools.spi.PropagationContext; public class MockTupleSink extends TupleSource @@ -85,7 +86,7 @@ return this.id; } - public Object createMemory() { + public Object createMemory( RuleBaseConfiguration config ) { return new HashMap(); } Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BetaMemoryFactoryTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BetaMemoryFactoryTest.java 2006-05-18 00:32:47 UTC (rev 4305) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BetaMemoryFactoryTest.java 2006-05-18 00:34:24 UTC (rev 4306) @@ -19,6 +19,7 @@ import junit.framework.Assert; import junit.framework.TestCase; +import org.drools.RuleBaseConfiguration; import org.drools.common.BetaNodeBinder; import org.drools.spi.FieldConstraint; import org.drools.spi.MockConstraint; @@ -34,9 +35,11 @@ */ public class BetaMemoryFactoryTest extends TestCase { BetaNodeBinder binder = null; + RuleBaseConfiguration config; protected void setUp() throws Exception { super.setUp(); + config = new RuleBaseConfiguration(); FieldConstraint[] constraints = new FieldConstraint[]{new MockConstraint()}; binder = new BetaNodeBinder( constraints ); } @@ -50,14 +53,14 @@ */ public void testNewLeftMemory() { try { - BetaLeftMemory memory = BetaMemoryFactory.newLeftMemory( null ); + BetaLeftMemory memory = BetaMemoryFactory.newLeftMemory( config, null ); Assert.assertNotNull( "BetaMemoryFactory should not return null", memory ); Assert.assertTrue( "Without constraints, BetaMemoryFactory should " + "return an instance of DefaultLeftMemory", memory instanceof DefaultLeftMemory ); - memory = BetaMemoryFactory.newLeftMemory( binder ); + memory = BetaMemoryFactory.newLeftMemory( config, binder ); Assert.assertNotNull( "BetaMemoryFactory should not return null", memory ); @@ -71,14 +74,14 @@ */ public void testNewRightMemory() { try { - BetaRightMemory memory = BetaMemoryFactory.newRightMemory( null ); + BetaRightMemory memory = BetaMemoryFactory.newRightMemory( config, null ); Assert.assertNotNull( "BetaMemoryFactory should not return null", memory ); Assert.assertTrue( "Without constraints, BetaMemoryFactory should " + "return an instance of DefaultRightMemory", memory instanceof DefaultRightMemory ); - memory = BetaMemoryFactory.newRightMemory( binder ); + memory = BetaMemoryFactory.newRightMemory( config, binder ); Assert.assertNotNull( "BetaMemoryFactory should not return null", memory ); |