[jboss-svn-commits] JBL Code SVN: r26075 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 16 19:58:38 EDT 2009
Author: tirelli
Date: 2009-04-16 19:58:38 -0400 (Thu, 16 Apr 2009)
New Revision: 26075
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_modifyRetractEntryPoint.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/AgendaGroupImpl.java
Log:
JBRULES-2063: fixing modify/retract for facts from entry-points
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -225,6 +225,68 @@
}
+ public void testModifyRetracOnEntryPointFacts() throws Exception {
+ // read in the source
+ KnowledgeBase kbase = loadKnowledgeBase( "test_modifyRetractEntryPoint.drl" );
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+ final List<? extends Number> results = new ArrayList<Number>();
+ session.setGlobal( "results",
+ results );
+
+ StockTick tick5 = new StockTick( 5,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+ StockTick tick6 = new StockTick( 6,
+ "ACME",
+ 10,
+ System.currentTimeMillis() );
+ StockTick tick7 = new StockTick( 7,
+ "ACME",
+ 30,
+ System.currentTimeMillis() );
+ StockTick tick8 = new StockTick( 8,
+ "DROO",
+ 50,
+ System.currentTimeMillis() );
+
+ WorkingMemoryEntryPoint entry = session.getWorkingMemoryEntryPoint( "stream1" );
+
+ 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();
+
+ System.out.println(results);
+ assertEquals( 2,
+ results.size() );
+ assertEquals( 30,
+ ((Number)results.get( 0 )).intValue() );
+ assertEquals( 110,
+ ((Number)results.get( 1 )).intValue() );
+
+ // the 3 non-matched facts continue to exist in the entry point
+ assertEquals( 3,
+ entry.getObjects().size() );
+ // but no fact was inserted into the main session
+ assertEquals( 0,
+ session.getObjects().size() );
+
+ }
+
public void testGetEntryPointList() throws Exception {
// read in the source
KnowledgeBase kbase = loadKnowledgeBase( "test_EntryPointReference.drl" );
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_modifyRetractEntryPoint.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_modifyRetractEntryPoint.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_modifyRetractEntryPoint.drl 2009-04-16 23:58:38 UTC (rev 26075)
@@ -0,0 +1,24 @@
+package org.drools;
+
+global java.util.List results;
+
+declare StockTick
+ @role( event )
+end
+
+rule "Test entry point 1"
+when
+ $st : StockTick( company == "ACME", price > 10 ) from entry-point "stream1"
+then
+ results.add( Double.valueOf( $st.getPrice() ) );
+ modify( $st ) { setPrice( 110 ) }
+end
+
+rule "Test entry point 2"
+when
+ $st : StockTick( company == "ACME", price > 100 ) from entry-point "stream1"
+then
+ results.add( Double.valueOf( $st.getPrice() ) );
+ retract( $st );
+end
+
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -171,9 +171,7 @@
}
public void retract(final Object object) throws FactException {
- //Retract fact in the RHS will always look at the WM,
- //because you have special methods to retract facts from the entry point
- FactHandle handle = this.workingMemory.getObjectStore().getHandleForObject(object);
+ FactHandle handle = getIdentityMap().get( object );
if ( handle == null ) {
throw new FactException( "Retract error: handle not found for object: " + object + ". Is it in the working memory?" );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELCompilationUnit.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -356,10 +356,14 @@
Thread.currentThread().setContextClassLoader( classLoader );
AbstractParser.setLanguageLevel( languageLevel );
- Serializable expr = compiler.compile( parserContext );
+ Serializable expr = null;
+ try {
+ expr = compiler.compile( parserContext );
+ } finally {
+ // make sure that in case of exceptions the context classloader is properly restored
+ Thread.currentThread().setContextClassLoader( tempClassLoader );
+ }
- Thread.currentThread().setContextClassLoader( tempClassLoader );
-
return expr;
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -400,9 +400,13 @@
-1,
-1,
entryPoint );
+
+ ObjectTypeConf typeConf = this.typeConfReg.getObjectTypeConf( this.entryPoint,
+ handle.getObject() );
this.entryPointNode.assertObject( handle,
propagationContext,
+ typeConf,
this.wm );
this.wm.getWorkingMemoryEventSupport().fireObjectUpdated( propagationContext,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -164,7 +164,9 @@
public void assertObject(final InternalFactHandle factHandle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- // do nothing, dummy method to impl the interface
+ // this method was silently failing, so I am now throwing an exception to make
+ // sure no one calls it by mistake
+ throw new UnsupportedOperationException( "This method should NEVER EVER be called" );
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/AgendaGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/AgendaGroupImpl.java 2009-04-16 23:36:00 UTC (rev 26074)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/AgendaGroupImpl.java 2009-04-16 23:58:38 UTC (rev 26075)
@@ -5,7 +5,6 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.drools.Agenda;
import org.drools.common.InternalAgenda;
import org.drools.runtime.rule.AgendaGroup;
More information about the jboss-svn-commits
mailing list