[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