[jboss-svn-commits] JBL Code SVN: r33273 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 31 20:09:30 EDT 2010


Author: tirelli
Date: 2010-05-31 20:09:29 -0400 (Mon, 31 May 2010)
New Revision: 33273

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EventExpirationSetToZero.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/reteoo/builder/PatternBuilder.java
Log:
JBRULES-2531: fixing event expiration for declared expiration of 0 (zero)

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	2010-05-31 23:48:35 UTC (rev 33272)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2010-06-01 00:09:29 UTC (rev 33273)
@@ -45,6 +45,9 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DroolsParserException;
 import org.drools.conf.EventProcessingOption;
+import org.drools.event.rule.ActivationCreatedEvent;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.ObjectRetractedEvent;
 import org.drools.event.rule.WorkingMemoryEventListener;
 import org.drools.io.ResourceFactory;
 import org.drools.rule.EntryPoint;
@@ -375,4 +378,56 @@
                     equalTo( 0 ) );
     }
 
+    public void testEventExpirationSetToZero() throws Exception {
+        KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+        kconf.setOption( EventProcessingOption.STREAM );
+        KnowledgeBase kbase = loadKnowledgeBase( "test_EventExpirationSetToZero.drl",
+                                                 kconf );
+
+        KnowledgeSessionConfiguration ksessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+        ksessionConfig.setOption( ClockTypeOption.get( "pseudo" ) );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( ksessionConfig,
+                                                                               null );
+
+        WorkingMemoryEventListener wml = mock( WorkingMemoryEventListener.class );
+        ksession.addEventListener( wml );
+        AgendaEventListener ael = mock( AgendaEventListener.class );
+        ksession.addEventListener( ael );
+
+        PseudoClockScheduler clock = ksession.getSessionClock();
+
+        final StockTick st1 = new StockTick( 1,
+                                             "RHT",
+                                             100,
+                                             1000 );
+        final StockTick st2 = new StockTick( 2,
+                                             "RHT",
+                                             100,
+                                             1000 );
+
+        ksession.insert( st1 );
+        ksession.insert( st2 );
+
+        verify( wml,
+                times( 2 ) ).objectInserted( any( org.drools.event.rule.ObjectInsertedEvent.class ) );
+        verify( ael,
+                times( 2 ) ).activationCreated( any( ActivationCreatedEvent.class ) );
+        assertThat( ksession.getObjects().size(),
+                    equalTo( 2 ) );
+        assertThat( ksession.getObjects(),
+                    hasItems( (Object) st1,
+                              st2 ) );
+
+        int fired = ksession.fireAllRules();
+
+        assertThat( fired,
+                    equalTo( 2 ) );
+
+        clock.advanceTime( 3,
+                           TimeUnit.SECONDS );
+        ksession.fireAllRules();
+
+        assertThat( ksession.getObjects().size(),
+                    equalTo( 0 ) );
+    }
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EventExpirationSetToZero.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EventExpirationSetToZero.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_EventExpirationSetToZero.drl	2010-06-01 00:09:29 UTC (rev 33273)
@@ -0,0 +1,15 @@
+package org.drools
+
+declare StockTick
+    @role( event )
+    @expires( 0 )
+end
+
+rule X
+when
+    StockTick()
+then 
+    // no-op
+end
+
+

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2010-05-31 23:48:35 UTC (rev 33272)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2010-06-01 00:09:29 UTC (rev 33273)
@@ -312,10 +312,13 @@
                                                  expirationOffset );
                 }
             }
-            if ( expirationOffset == 0 ) {
-                otn.setExpirationOffset( context.getTemporalDistance().getExpirationOffset( pattern ) );
+            long distance = context.getTemporalDistance().getExpirationOffset( pattern );
+            if( distance == Long.MAX_VALUE ) {
+                // it means the rules have no closed temporal constraints, 
+                // so use whatever is set for the OTN or on temporal behaviors
+                otn.setExpirationOffset( expirationOffset );
             } else {
-                otn.setExpirationOffset( expirationOffset );
+                otn.setExpirationOffset( Math.max( distance, expirationOffset ) );
             }
         }
 



More information about the jboss-svn-commits mailing list