[jboss-svn-commits] JBL Code SVN: r33955 - in labs/jbossrules/trunk: 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
Fri Jul 16 13:17:24 EDT 2010
Author: tirelli
Date: 2010-07-16 13:17:23 -0400 (Fri, 16 Jul 2010)
New Revision: 33955
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration2.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration3.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
Log:
JBRULES-2578: changing @expires behavior
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java 2010-07-16 16:34:47 UTC (rev 33954)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java 2010-07-16 17:17:23 UTC (rev 33955)
@@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
@@ -32,6 +33,7 @@
import org.drools.StatefulSession;
import org.drools.StockTick;
import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.base.ClassObjectType;
import org.drools.base.evaluators.TimeIntervalParser;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
@@ -54,6 +56,8 @@
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.io.ResourceFactory;
import org.drools.lang.descr.PackageDescr;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.rule.EntryPoint;
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -62,6 +66,7 @@
import org.drools.runtime.rule.Activation;
import org.drools.runtime.rule.FactHandle;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.spi.ObjectType;
import org.drools.time.SessionPseudoClock;
import org.drools.time.impl.DurationTimer;
import org.drools.time.impl.PseudoClockScheduler;
@@ -443,6 +448,46 @@
internal.getTypeDeclaration( StockTick.class ).getExpirationOffset() );
}
+ public void testEventExpiration2() throws Exception {
+ // read in the source
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_EventExpiration2.drl" ) );
+ final RuleBaseConfiguration conf = new RuleBaseConfiguration();
+ conf.setEventProcessingMode( EventProcessingOption.STREAM );
+ final RuleBase ruleBase = loadRuleBase( reader, conf );
+
+ final InternalRuleBase internal = (InternalRuleBase) ruleBase;
+ final TimeIntervalParser parser = new TimeIntervalParser();
+
+ Map<ObjectType, ObjectTypeNode> objectTypeNodes = internal.getRete().getObjectTypeNodes(EntryPoint.DEFAULT);
+ ObjectTypeNode node = objectTypeNodes.get( new ClassObjectType( StockTick.class ) );
+
+ assertNotNull( node );
+
+ // the expiration policy @expires(10m) should override the temporal operator usage
+ assertEquals( parser.parse( "10m" )[0].longValue()+1,
+ node.getExpirationOffset() );
+ }
+
+ public void testEventExpiration3() throws Exception {
+ // read in the source
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_EventExpiration3.drl" ) );
+ final RuleBaseConfiguration conf = new RuleBaseConfiguration();
+ conf.setEventProcessingMode( EventProcessingOption.STREAM );
+ final RuleBase ruleBase = loadRuleBase( reader, conf );
+
+ final InternalRuleBase internal = (InternalRuleBase) ruleBase;
+ final TimeIntervalParser parser = new TimeIntervalParser();
+
+ Map<ObjectType, ObjectTypeNode> objectTypeNodes = internal.getRete().getObjectTypeNodes(EntryPoint.DEFAULT);
+ ObjectTypeNode node = objectTypeNodes.get( new ClassObjectType( StockTick.class ) );
+
+ assertNotNull( node );
+
+ // the expiration policy @expires(10m) should override the temporal operator usage
+ assertEquals( parser.parse( "10m" )[0].longValue()+1,
+ node.getExpirationOffset() );
+ }
+
public void testTimeRelationalOperators() throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_TimeRelationalOperators.drl" ) );
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration2.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration2.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration2.drl 2010-07-16 17:17:23 UTC (rev 33955)
@@ -0,0 +1,27 @@
+package org.drools;
+
+import org.drools.StockTick;
+
+global java.util.List results;
+
+declare StockTick
+ @role( event )
+ @timestamp( dateTimestamp )
+ // this will override individual rule requirements
+ @expires( 10m )
+end
+
+rule "Check event"
+when
+ $st1 : StockTick( company == "ACME" )
+ $st2 : StockTick( company == "RHT", this after[0,15m] $st1 )
+then
+ results.add( $st1 );
+end
+
+rule "Check event2"
+when
+ $st1 : StockTick( company == "RHT" ) over window:time( 15m )
+then
+ results.add( $st1 );
+end
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration3.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration3.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_EventExpiration3.drl 2010-07-16 17:17:23 UTC (rev 33955)
@@ -0,0 +1,27 @@
+package org.drools;
+
+import org.drools.StockTick;
+
+global java.util.List results;
+
+declare StockTick
+ @role( event )
+ @timestamp( dateTimestamp )
+ // this will override individual rule requirements
+ @expires( 10m )
+end
+
+rule "Check event"
+when
+ $st1 : StockTick( company == "ACME" )
+ $st2 : StockTick( company == "RHT", this after[0,5m] $st1 )
+then
+ results.add( $st1 );
+end
+
+rule "Check event2"
+when
+ $st1 : StockTick( company == "RHT" ) over window:time( 5m )
+then
+ results.add( $st1 );
+end
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2010-07-16 16:34:47 UTC (rev 33954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2010-07-16 17:17:23 UTC (rev 33955)
@@ -73,7 +73,6 @@
ObjectSink,
Externalizable,
NodeMemory
-
{
// ------------------------------------------------------------
// Instance members
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-07-16 16:34:47 UTC (rev 33954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java 2010-07-16 17:17:23 UTC (rev 33955)
@@ -310,22 +310,28 @@
if ( objectType.isEvent() && EventProcessingOption.STREAM.equals( context.getRuleBase().getConfiguration().getEventProcessingMode() ) ) {
long expirationOffset = getExpiratioOffsetForType( context,
objectType );
- for ( Behavior behavior : pattern.getBehaviors() ) {
- if ( behavior.getExpirationOffset() != -1 ) {
- expirationOffset = Math.max( behavior.getExpirationOffset(),
- expirationOffset );
- }
- }
- long distance = context.getTemporalDistance().getExpirationOffset( pattern );
- if( distance == -1 ) {
- // it means the rules have no temporal constraints, or
- // the constraints require events to be hold forever. In this
- // case, we allow type declarations to override the implicit
- // expiration offset by defining an expiration policy with the
- // @expires tag
+ if( expirationOffset != -1 ) {
+ // expiration policy is set, so use it
otn.setExpirationOffset( expirationOffset );
} else {
- otn.setExpirationOffset( Math.max( distance, expirationOffset ) );
+ // otherwise calculate it based on behaviours and temporal constraints
+ for ( Behavior behavior : pattern.getBehaviors() ) {
+ if ( behavior.getExpirationOffset() != -1 ) {
+ expirationOffset = Math.max( behavior.getExpirationOffset(),
+ expirationOffset );
+ }
+ }
+ long distance = context.getTemporalDistance().getExpirationOffset( pattern );
+ if( distance == -1 ) {
+ // it means the rules have no temporal constraints, or
+ // the constraints require events to be hold forever. In this
+ // case, we allow type declarations to override the implicit
+ // expiration offset by defining an expiration policy with the
+ // @expires tag
+ otn.setExpirationOffset( expirationOffset );
+ } else {
+ otn.setExpirationOffset( Math.max( distance, expirationOffset ) );
+ }
}
}
More information about the jboss-svn-commits
mailing list