Skip to content

Commit

Permalink
[DROOLS-620] invoke fireAllRules after execution of a timed rule's co…
Browse files Browse the repository at this point in the history
…nsequence
  • Loading branch information
mariofusco committed Nov 11, 2014
1 parent a1dea47 commit a0df4a8
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 35 deletions.
Expand Up @@ -2802,7 +2802,7 @@ public void run() {
this.populateSessionWithStocks(ksession, stockFactory);
}
// let the engine finish its job
Thread.sleep(5000);
Thread.sleep(2000);

} finally {
ksession.halt();
Expand Down
@@ -1,55 +1,50 @@
package org.drools.compiler.integrationtests;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import org.drools.compiler.Alarm;
import org.drools.compiler.Cheese;
import org.drools.compiler.CommonTestMethodBase;
import org.drools.compiler.FactA;
import org.drools.compiler.StockTick;
import org.kie.api.runtime.rule.FactHandle;
import org.drools.compiler.Foo;
import org.drools.compiler.Pet;
import org.drools.compiler.StockTick;
import org.drools.core.base.UndefinedCalendarExcption;
import org.drools.core.common.TimedRuleExecution;
import org.drools.core.time.SessionPseudoClock;
import org.junit.Ignore;
import org.kie.api.event.rule.DefaultAgendaEventListener;
import org.kie.api.runtime.conf.TimedRuleExectionOption;
import org.kie.api.runtime.conf.TimedRuleExecutionFilter;
import org.drools.core.time.impl.PseudoClockScheduler;
import org.drools.core.util.DateUtils;
import org.junit.Ignore;
import org.junit.Test;
import org.kie.api.definition.rule.Rule;
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.api.event.rule.DefaultAgendaEventListener;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.KieSessionConfiguration;
import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.api.runtime.conf.TimedRuleExectionOption;
import org.kie.api.runtime.rule.EntryPoint;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.api.time.Calendar;
import org.kie.api.time.SessionClock;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.builder.conf.RuleEngineOption;
import org.kie.internal.io.ResourceFactory;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSessionConfiguration;
import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.api.time.Calendar;
import org.kie.api.time.SessionClock;
import org.kie.internal.runtime.StatefulKnowledgeSession;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

public class TimerAndCalendarTest extends CommonTestMethodBase {

@Test(timeout=15000)
Expand Down Expand Up @@ -1822,4 +1817,35 @@ public void testSharedTimers() throws Exception {
ksession.fireAllRules();
assertEquals(2, list.size());
}

@Test
public void testIntervalRuleInsertion() throws Exception {
// DROOLS-620
// Does not fail when using pseudo clock due to the subsequent call to fireAllRules
String str =
"package org.simple\n" +
"global java.util.List list\n" +
"import org.drools.compiler.Alarm\n" +
"rule \"Interval Alarm\"\n" +
"timer(int: 1s 1s)\n" +
"when " +
" not Alarm()\n" +
"then\n" +
" insert(new Alarm());\n" +
" list.add(\"fired\"); \n" +
"end\n";

KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption(TimedRuleExectionOption.YES);
KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
KieSession ksession = createKnowledgeSession(kbase, conf);

List list = new ArrayList();
ksession.setGlobal("list", list);

ksession.fireAllRules();
assertEquals( 0, list.size() );
Thread.sleep( 3000 );
assertEquals( 1, list.size() );
}
}
@@ -1,16 +1,11 @@
package org.drools.core.phreak;

import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.List;

import org.drools.core.common.InternalAgenda;
import org.drools.core.common.InternalWorkingMemory;
import org.drools.core.common.LeftTupleSets;
import org.drools.core.common.LeftTupleSetsImpl;
import org.drools.core.common.NetworkNode;
import org.drools.core.common.TimedRuleExecution;
import org.kie.api.runtime.conf.TimedRuleExecutionFilter;
import org.drools.core.marshalling.impl.MarshallerReaderContext;
import org.drools.core.marshalling.impl.MarshallerWriteContext;
import org.drools.core.marshalling.impl.PersisterHelper;
Expand Down Expand Up @@ -41,11 +36,17 @@
import org.drools.core.util.index.LeftTupleList;
import org.kie.api.definition.rule.Rule;
import org.kie.api.runtime.Calendars;
import org.kie.api.runtime.conf.TimedRuleExecutionFilter;
import org.kie.api.runtime.rule.PropagationContext;
import org.kie.internal.concurrent.ExecutorProviderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.List;

public class PhreakTimerNode {
private static final Logger log = LoggerFactory.getLogger( PhreakTimerNode.class );

Expand Down Expand Up @@ -481,6 +482,7 @@ public void evauateAndFireRule() {
pmem.getRuleAgendaItem().getRuleExecutor());

pmem.getRuleAgendaItem().getRuleExecutor().fire(wm, outerStack);
((InternalAgenda) wm.getAgenda()).fireAllRules(null, -1);
}
}

Expand Down

0 comments on commit a0df4a8

Please sign in to comment.