[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