[jboss-svn-commits] JBL Code SVN: r25753 - in labs/jbossrules/branches/salaboy_streams: drools-compiler/src/test/resources/org/drools/integrationtests and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Mar 19 12:49:43 EDT 2009
Author: tirelli
Date: 2009-03-19 12:49:43 -0400 (Thu, 19 Mar 2009)
New Revision: 25753
Added:
labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPoint_ModifyEvent.drl
Modified:
labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
Log:
Reapplying commit 25714 into the branch
Modified: labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java 2009-03-19 16:33:41 UTC (rev 25752)
+++ labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java 2009-03-19 16:49:43 UTC (rev 25753)
@@ -242,4 +242,99 @@
assertTrue( eps.contains( s2 ) );
assertTrue( eps.contains( s3 ) );
}
+
+ public void testEventModify() throws Exception {
+ // read in the source
+ KnowledgeBase kbase = loadKnowledgeBase( "test_EntryPoint_ModifyEvent.drl" );
+ //final RuleBase ruleBase = loadRuleBase( reader );
+
+ KnowledgeSessionConfiguration conf = new SessionConfiguration();
+ ((SessionConfiguration) conf).setClockType( ClockType.PSEUDO_CLOCK );
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( conf, null );
+
+ final List results = new ArrayList();
+
+ session.setGlobal( "results",
+ results );
+
+ StockTick tick1 = new StockTick( 1,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+ StockTick tick2 = new StockTick( 2,
+ "ACME",
+ 10,
+ System.currentTimeMillis() );
+ StockTick tick3 = new StockTick( 3,
+ "ACME",
+ 10,
+ System.currentTimeMillis() );
+ StockTick tick4 = new StockTick( 4,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+
+ InternalFactHandle handle1 = (InternalFactHandle) session.insert( tick1 );
+ InternalFactHandle handle2 = (InternalFactHandle) session.insert( tick2 );
+ InternalFactHandle handle3 = (InternalFactHandle) session.insert( tick3 );
+ InternalFactHandle handle4 = (InternalFactHandle) session.insert( tick4 );
+
+ assertNotNull( handle1 );
+ assertNotNull( handle2 );
+ assertNotNull( handle3 );
+ assertNotNull( handle4 );
+
+ assertTrue( handle1.isEvent() );
+ assertTrue( handle2.isEvent() );
+ assertTrue( handle3.isEvent() );
+ assertTrue( handle4.isEvent() );
+
+ session.fireAllRules();
+
+ assertEquals( 0,
+ results.size() );
+
+ StockTick tick5 = new StockTick( 5,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+ StockTick tick6 = new StockTick( 6,
+ "ACME",
+ 10,
+ System.currentTimeMillis() );
+ StockTick tick7 = new StockTick( 7,
+ "ACME",
+ 15,
+ System.currentTimeMillis() );
+ StockTick tick8 = new StockTick( 8,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+
+ WorkingMemoryEntryPoint entry = session.getWorkingMemoryEntryPoint( "StockStream" );
+
+ InternalFactHandle handle5 = (InternalFactHandle) entry.insert( tick5 );
+ InternalFactHandle handle6 = (InternalFactHandle) entry.insert( tick6 );
+ InternalFactHandle handle7 = (InternalFactHandle) entry.insert( tick7 );
+ InternalFactHandle handle8 = (InternalFactHandle) entry.insert( tick8 );
+
+ assertNotNull( handle5 );
+ assertNotNull( handle6 );
+ assertNotNull( handle7 );
+ assertNotNull( handle8 );
+
+ assertTrue( handle5.isEvent() );
+ assertTrue( handle6.isEvent() );
+ assertTrue( handle7.isEvent() );
+ assertTrue( handle8.isEvent() );
+
+ session.fireAllRules();
+
+ assertEquals( 1,
+ results.size() );
+ assertSame( tick7,
+ results.get( 0 ) );
+
+
+ }
}
Copied: labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPoint_ModifyEvent.drl (from rev 25748, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPoint_ModifyEvent.drl)
===================================================================
--- labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPoint_ModifyEvent.drl (rev 0)
+++ labs/jbossrules/branches/salaboy_streams/drools-compiler/src/test/resources/org/drools/integrationtests/test_EntryPoint_ModifyEvent.drl 2009-03-19 16:49:43 UTC (rev 25753)
@@ -0,0 +1,23 @@
+package org.drools;
+
+import org.drools.StockTick;
+
+global java.util.List results;
+
+declare StockTick
+ @role( event )
+end
+
+rule "Test entry point modify event"
+ #dialect "mvel"
+when
+ $st : StockTick( company == "ACME", price > 10 ) from entry-point StockStream
+then
+ modify( $st ){
+ setPrice(10)
+ }
+ #modify ( $st ){
+ # price = 10
+ #}
+ results.add( $st );
+end
Modified: labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-03-19 16:33:41 UTC (rev 25752)
+++ labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-03-19 16:49:43 UTC (rev 25753)
@@ -21,16 +21,14 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Collections;
+import java.util.IdentityHashMap;
import java.util.Map;
import org.drools.FactException;
-import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemoryActions;
import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooStatefulSession;
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.Declaration;
-import org.drools.rule.EntryPoint;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
import org.drools.runtime.ExitPoint;
@@ -55,12 +53,19 @@
private Tuple tuple;
private InternalWorkingMemoryActions workingMemory;
+ private IdentityHashMap<Object,FactHandle> identityMap;
+
public DefaultKnowledgeHelper() {
+
+ this.identityMap = new IdentityHashMap<Object,FactHandle>();
}
public DefaultKnowledgeHelper(final WorkingMemory workingMemory) {
this.workingMemory = (InternalWorkingMemoryActions) workingMemory;
+
+ this.identityMap = new IdentityHashMap<Object,FactHandle>();
+
}
public void readExternal(ObjectInput in) throws IOException,
@@ -101,25 +106,28 @@
public void insert(final Object object,
final boolean dynamic) throws FactException {
- this.workingMemory.insert( object,
+ FactHandle handle = this.workingMemory.insert( object,
dynamic,
false,
this.rule,
this.activation );
+ this.identityMap.put(object, handle);
}
public void insertLogical(final Object object) throws FactException {
insertLogical( object,
false );
+
}
public void insertLogical(final Object object,
final boolean dynamic) throws FactException {
- this.workingMemory.insert( object,
+ FactHandle handle = this.workingMemory.insert( object,
dynamic,
true,
this.rule,
this.activation );
+ this.identityMap.put(object, handle);
}
public void update(final FactHandle handle,
@@ -152,7 +160,7 @@
}
public void retract(final Object object) throws FactException {
- FactHandle handle = this.workingMemory.getFactHandleByIdentity( object );
+ FactHandle handle = identityMap.get( object );
if ( handle == null ) {
throw new FactException( "Retract error: handle not found for object: " + object + ". Is it in the working memory?" );
}
@@ -161,10 +169,12 @@
true,
this.rule,
this.activation );
+ this.identityMap.remove(object);
+
}
public void modifyRetract(final Object object) {
- FactHandle handle = this.workingMemory.getFactHandleByIdentity( object );
+ FactHandle handle = identityMap.get( object );
this.workingMemory.modifyRetract( handle,
rule,
activation );
@@ -177,11 +187,13 @@
}
public void modifyInsert(final Object object) {
- FactHandle handle = this.workingMemory.getFactHandleByIdentity( object );
+ FactHandle handle = identityMap.get( object );
+
this.workingMemory.modifyInsert( handle,
object,
rule,
activation );
+ this.identityMap.put(object, handle);
}
public void modifyInsert(final FactHandle factHandle,
@@ -190,6 +202,7 @@
object,
rule,
activation );
+ this.identityMap.put(object, factHandle);
}
public Rule getRule() {
@@ -251,7 +264,9 @@
}
public Declaration getDeclaration(final String identifier) {
- return (Declaration) this.subrule.getOuterDeclarations().get( identifier );
+ Declaration declaration = (Declaration) this.subrule.getOuterDeclarations().get( identifier );
+ identityMap.put(tuple.get(declaration).getObject(), tuple.get(declaration));
+ return declaration;
}
public void halt() {
Modified: labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-03-19 16:33:41 UTC (rev 25752)
+++ labs/jbossrules/branches/salaboy_streams/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-03-19 16:49:43 UTC (rev 25753)
@@ -102,6 +102,7 @@
import org.drools.time.SessionClock;
import org.drools.time.TimerService;
import org.drools.time.TimerServiceFactory;
+import org.drools.util.ObjectHashMap;
import org.drools.workflow.core.node.EventTrigger;
import org.drools.workflow.core.node.StartNode;
import org.drools.workflow.core.node.Trigger;
@@ -329,7 +330,7 @@
initPartitionManagers();
initTransient();
}
-
+
public static class GlobalsAdapter implements GlobalResolver {
private Globals globals;
@@ -1260,11 +1261,13 @@
// the hashCode and equality has changed, so we must update the
// EqualityKey
EqualityKey key = handle.getEqualityKey();
- key.removeFactHandle( handle );
+ if(key != null){
+ key.removeFactHandle( handle );
- // If the equality key is now empty, then remove it
- if ( key.isEmpty() ) {
- this.tms.remove( key );
+ // If the equality key is now empty, then remove it
+ if ( key.isEmpty() ) {
+ this.tms.remove( key );
+ }
}
}
} finally {
@@ -1292,20 +1295,22 @@
final Object originalObject = handle.getObject();
if ( this.maintainTms ) {
- int status = handle.getEqualityKey().getStatus();
+ if(handle.getEqualityKey() != null ){
+ int status = handle.getEqualityKey().getStatus();
- // now use an existing EqualityKey, if it exists, else create a
- // new one
- EqualityKey key = this.tms.get( object );
- if ( key == null ) {
- key = new EqualityKey( handle,
- status );
- this.tms.put( key );
- } else {
- key.addFactHandle( handle );
+ // now use an existing EqualityKey, if it exists, else create a
+ // new one
+ EqualityKey key = this.tms.get( object );
+ if ( key == null ) {
+ key = new EqualityKey( handle,
+ status );
+ this.tms.put( key );
+ } else {
+ key.addFactHandle( handle );
+ }
+
+ handle.setEqualityKey( key );
}
-
- handle.setEqualityKey( key );
}
this.handleFactory.increaseFactHandleRecency( handle );
More information about the jboss-svn-commits
mailing list