[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