Search in sources :

Example 6 with DefaultAgendaEventListener

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());
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) MatchCancelledEvent(org.kie.api.event.rule.MatchCancelledEvent) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Cheese(org.drools.compiler.Cheese) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) Person(org.drools.compiler.Person) Test(org.junit.Test)

Example 7 with DefaultAgendaEventListener

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());
}
Also used : AgendaGroupPoppedEvent(org.kie.api.event.rule.AgendaGroupPoppedEvent) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) PseudoClockScheduler(org.drools.core.time.impl.PseudoClockScheduler) Test(org.junit.Test)

Example 8 with DefaultAgendaEventListener

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());
}
Also used : KieBaseConfiguration(org.kie.api.KieBaseConfiguration) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) KieBase(org.kie.api.KieBase) MatchCancelledEvent(org.kie.api.event.rule.MatchCancelledEvent) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) Test(org.junit.Test)

Example 9 with DefaultAgendaEventListener

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());
}
Also used : ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieServices(org.kie.api.KieServices) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) Test(org.junit.Test)

Example 10 with DefaultAgendaEventListener

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));
}
Also used : KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) MatchCancelledEvent(org.kie.api.event.rule.MatchCancelledEvent) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) Arrays.asList(java.util.Arrays.asList) ArrayList(java.util.ArrayList) List(java.util.List) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) AfterMatchFiredEvent(org.kie.api.event.rule.AfterMatchFiredEvent) Test(org.junit.Test)

Aggregations

DefaultAgendaEventListener (org.kie.api.event.rule.DefaultAgendaEventListener)11 Test (org.junit.Test)10 KieBase (org.kie.api.KieBase)9 KieSession (org.kie.api.runtime.KieSession)9 ArrayList (java.util.ArrayList)8 List (java.util.List)7 AgendaEventListener (org.kie.api.event.rule.AgendaEventListener)5 KieSessionConfiguration (org.kie.api.runtime.KieSessionConfiguration)5 MatchCancelledEvent (org.kie.api.event.rule.MatchCancelledEvent)4 MatchCreatedEvent (org.kie.api.event.rule.MatchCreatedEvent)4 Arrays.asList (java.util.Arrays.asList)3 AfterMatchFiredEvent (org.kie.api.event.rule.AfterMatchFiredEvent)3 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)3 Ignore (org.junit.Ignore)2 KieHelper (org.kie.internal.utils.KieHelper)2 CyclicBarrier (java.util.concurrent.CyclicBarrier)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Cheese (org.drools.compiler.Cheese)1 Person (org.drools.compiler.Person)1