use of org.kie.api.event.rule.DefaultAgendaEventListener in project drools by kiegroup.
the class ExecutionFlowControlTest method testUpdateActivationCreationNoLoop.
@Test
public void testUpdateActivationCreationNoLoop() throws Exception {
// JBRULES-787, no-loop blocks all dependant tuples for update
KieBase kbase = loadKnowledgeBase("test_UpdateActivationCreationNoLoop.drl");
KieSession ksession = kbase.newKieSession();
final List created = new ArrayList();
final List cancelled = new ArrayList();
final AgendaEventListener l = new DefaultAgendaEventListener() {
@Override
public void matchCreated(MatchCreatedEvent event) {
created.add(event);
}
@Override
public void matchCancelled(MatchCancelledEvent event) {
cancelled.add(event);
}
};
ksession.addEventListener(l);
final Cheese stilton = new Cheese("stilton", 15);
final FactHandle stiltonHandle = ksession.insert(stilton);
final Person p1 = new Person("p1");
p1.setCheese(stilton);
ksession.insert(p1);
final Person p2 = new Person("p2");
p2.setCheese(stilton);
ksession.insert(p2);
final Person p3 = new Person("p3");
p3.setCheese(stilton);
ksession.insert(p3);
ksession.fireAllRules();
assertEquals(3, created.size());
assertEquals(0, cancelled.size());
// simulate a modify inside a consequence
ksession.update(stiltonHandle, stilton);
// with true modify, no reactivations should be triggered
assertEquals(3, created.size());
assertEquals(0, cancelled.size());
}
use of org.kie.api.event.rule.DefaultAgendaEventListener in project drools by kiegroup.
the class CepEspTest method testFireExpiredEventOnInactiveGroup.
@Test
public void testFireExpiredEventOnInactiveGroup() throws Exception {
// DROOLS-1523
String DRL = "global java.util.List list;\n" + "declare String @role(event) @expires( 6d ) end\n" + "declare Integer @role(event) @expires( 3d ) end\n" + "\n" + "rule \"RG_1\"\n" + " agenda-group \"rf-grp1\"\n" + " when\n" + " $event: Integer()\n" + " not String(this after [1ms, 48h] $event)\n" + " then\n" + " System.out.println(\"RG_1 fired\");\n" + " retract($event);\n" + " list.add(\"RG_1\");\n" + "end\n" + "\n" + "rule \"RG_2\"\n" + " agenda-group \"rf-grp1\"\n" + " when\n" + " $event: String()\n" + " not Integer(this after [1ms, 144h] $event)\n" + " then\n" + " System.out.println(\"RG_2 fired\");\n" + " list.add(\"RG_2\");\n" + "end\n";
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
sessionConfig.setOption(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
KieHelper helper = new KieHelper();
helper.addContent(DRL, ResourceType.DRL);
KieBase kbase = helper.build(EventProcessingOption.STREAM);
KieSession kieSession = kbase.newKieSession(sessionConfig, null);
kieSession.addEventListener(new DefaultAgendaEventListener() {
public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
if (event.getAgendaGroup().getName().equals("rf-grp0")) {
event.getKieRuntime().getAgenda().getAgendaGroup("rf-grp1").setFocus();
}
}
});
List<String> list = new ArrayList<>();
kieSession.setGlobal("list", list);
PseudoClockScheduler sessionClock = kieSession.getSessionClock();
kieSession.insert("DummyEvent");
// <- OtherDummyEvent
kieSession.insert(1);
kieSession.getAgenda().getAgendaGroup("rf-grp0").setFocus();
// OK nothing happens
kieSession.fireAllRules();
assertEquals(2, kieSession.getFactCount());
sessionClock.advanceTime(145, TimeUnit.HOURS);
kieSession.getAgenda().getAgendaGroup("rf-grp0").setFocus();
kieSession.fireAllRules();
assertEquals("Expiration occured => no more fact in WM", 0, kieSession.getFactCount());
assertEquals("RG_1 should fire once", 1, list.stream().filter(r -> r.equals("RG_1")).count());
assertEquals("RG_2 should fire once", 1, list.stream().filter(r -> r.equals("RG_2")).count());
}
use of org.kie.api.event.rule.DefaultAgendaEventListener in project drools by kiegroup.
the class Misc2Test method testMatchingEventsInStreamMode.
@Test
public void testMatchingEventsInStreamMode() {
// DROOLS-338
String drl = "import org.drools.compiler.integrationtests.Misc2Test.SimpleEvent\n" + "declare SimpleEvent\n" + " @role(event)\n" + "end\n" + "\n" + "rule \"RuleA\"\n" + "salience 5\n" + "when\n" + " $f : SimpleEvent( )\n" + "then\n" + " delete ($f);\n" + "end\n" + "\n" + "rule \"RuleB\"\n" + "when\n" + " $f : SimpleEvent( )\n" + "then\n" + "end\n";
KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kconf.setOption(EventProcessingOption.STREAM);
KieBase kbase = loadKnowledgeBaseFromString(kconf, drl);
KieSession ksession = kbase.newKieSession();
final AtomicInteger i = new AtomicInteger(0);
ksession.addEventListener(new DefaultAgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
i.incrementAndGet();
}
public void matchCancelled(MatchCancelledEvent event) {
i.decrementAndGet();
}
});
ksession.insert(new SimpleEvent());
ksession.fireAllRules();
assertEquals(1, i.get());
}
use of org.kie.api.event.rule.DefaultAgendaEventListener in project drools by kiegroup.
the class StrictAnnotationTest method testEagerEvaluation.
@Test
public void testEagerEvaluation() throws Exception {
String str = "package org.simple \n" + "@Propagation(EAGER) rule xxx \n" + "when \n" + " $s : String()\n" + "then \n" + "end \n" + "@Propagation(EAGER) rule yyy \n" + "when \n" + " $s : String()\n" + "then \n" + "end \n";
KieServices ks = KieServices.Factory.get();
KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption(ForceEagerActivationOption.YES);
KieSession ksession = new KieHelper().setKieModuleModel(ks.newKieModuleModel().setConfigurationProperty(LanguageLevelOption.PROPERTY_NAME, LanguageLevelOption.DRL6_STRICT.toString())).addContent(str, ResourceType.DRL).build().newKieSession(conf, null);
final List list = new ArrayList();
AgendaEventListener agendaEventListener = new DefaultAgendaEventListener() {
public void matchCreated(org.kie.api.event.rule.MatchCreatedEvent event) {
list.add("activated");
}
};
ksession.addEventListener(agendaEventListener);
ksession.insert("test");
assertEquals(2, list.size());
}
use of org.kie.api.event.rule.DefaultAgendaEventListener in project drools by kiegroup.
the class Misc2Test method testLockOnActive2.
@Test
public void testLockOnActive2() {
// the modify changes the hashcode of TradeHeader
// this forces the 'from' to think it's new. This results in an insert and a delete propagation from the 'from'
// With Property Reactivity enabled by default this also required adding a @watch(*) annotation
String drl = "" + "package org.drools.test; \n" + "import org.drools.compiler.integrationtests.Misc2Test.TradeBooking;\n" + "import org.drools.compiler.integrationtests.Misc2Test.TradeHeader;\n" + "rule \"Rule1\" \n" + "lock-on-active true\n" + "salience 1 \n" + "when\n" + " $booking: TradeBooking() @watch(*) \n" + " $trade: TradeHeader() from $booking.getTrade()\n" + "then\n" + " $trade.setAction(\"New\");\n" + " modify($booking) {}\n" + "end;\n" + "\n" + "rule \"Rule2\"\n" + "when\n" + " $booking: TradeBooking( ) @watch(*) \n" + " $trade: Object( ) from $booking.getTrade()\n" + "then\n" + "end";
KieBase kb = loadKnowledgeBaseFromString(drl);
KieSession ks = kb.newKieSession();
final List created = new ArrayList();
final List cancelled = new ArrayList();
final List fired = new ArrayList();
ks.addEventListener(new DefaultAgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
created.add(event.getMatch().getRule().getName());
}
public void matchCancelled(MatchCancelledEvent event) {
cancelled.add(event.getMatch().getRule().getName());
}
public void afterMatchFired(AfterMatchFiredEvent event) {
fired.add(event.getMatch().getRule().getName());
}
});
ks.fireAllRules();
TradeBooking tb = new TradeBookingImpl(new TradeHeaderImpl());
ks.insert(tb);
assertEquals(2, ks.fireAllRules());
assertEquals(3, created.size());
assertEquals(1, cancelled.size());
assertEquals(2, fired.size());
assertEquals("Rule1", created.get(0));
assertEquals("Rule1", created.get(1));
assertEquals("Rule2", created.get(2));
assertEquals("Rule1", cancelled.get(0));
assertEquals("Rule1", fired.get(0));
assertEquals("Rule2", fired.get(1));
}
Aggregations