Search in sources :

Example 1 with Alarm

use of org.drools.compiler.Alarm in project drools by kiegroup.

the class ActivateAndDeleteOnListenerTest method testActivateOnMatchAndUpdate.

@Test
public void testActivateOnMatchAndUpdate() throws Exception {
    String str = "";
    str += "package org.drools.compiler.integrationtests \n";
    str += "import " + Alarm.class.getCanonicalName() + " \n";
    str += "import " + Sensor.class.getCanonicalName() + " \n";
    str += "rule StringRule  @Propagation(EAGER) ruleflow-group \"DROOLS_SYSTEM\"\n";
    str += " when \n";
    str += " $a : Alarm() \n";
    str += " $s : Sensor() \n";
    str += " then \n";
    str += "end \n";
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(ForceEagerActivationOption.YES);
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession(conf, null);
    ksession.addEventListener(new DefaultAgendaEventListener() {

        @Override
        public void matchCreated(MatchCreatedEvent event) {
            Collection<? extends FactHandle> alarms = event.getKieRuntime().getFactHandles(new ClassObjectFilter(Alarm.class));
            for (FactHandle alarm : alarms) {
                event.getKieRuntime().update(alarm, new Alarm());
            }
        }
    });
    // go !
    Alarm alarm = new Alarm();
    alarm.setMessage("test");
    alarm.setNumber(123);
    ksession.insert(alarm);
    Sensor sensor = new Sensor();
    sensor.setPressure(1);
    sensor.setTemperature(25);
    ksession.insert(sensor);
}
Also used : ClassObjectFilter(org.kie.api.runtime.ClassObjectFilter) FactHandle(org.kie.api.runtime.rule.FactHandle) Alarm(org.drools.compiler.Alarm) KieHelper(org.kie.internal.utils.KieHelper) DefaultAgendaEventListener(org.drools.core.event.DefaultAgendaEventListener) Collection(java.util.Collection) KieSession(org.kie.api.runtime.KieSession) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) Sensor(org.drools.compiler.Sensor) Test(org.junit.Test)

Example 2 with Alarm

use of org.drools.compiler.Alarm in project drools by kiegroup.

the class ActivateAndDeleteOnListenerTest method testActivateOnMatchAndDelete.

@Test
public void testActivateOnMatchAndDelete() throws Exception {
    String str = "";
    str += "package org.drools.compiler.integrationtests \n";
    str += "import " + Alarm.class.getCanonicalName() + " \n";
    str += "import " + Sensor.class.getCanonicalName() + " \n";
    str += "rule StringRule  @Propagation(EAGER) ruleflow-group \"DROOLS_SYSTEM\"\n";
    str += " when \n";
    str += " $a : Alarm() \n";
    str += " $s : Sensor() \n";
    str += " then \n";
    str += "end \n";
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(ForceEagerActivationOption.YES);
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession(conf, null);
    ksession.addEventListener(new DefaultAgendaEventListener() {

        @Override
        public void matchCreated(MatchCreatedEvent event) {
            Collection<? extends FactHandle> alarms = event.getKieRuntime().getFactHandles(new ClassObjectFilter(Alarm.class));
            for (FactHandle alarm : alarms) {
                event.getKieRuntime().delete(alarm);
            }
        }
    });
    // go !
    Alarm alarm = new Alarm();
    alarm.setMessage("test");
    alarm.setNumber(123);
    ksession.insert(alarm);
    Sensor sensor = new Sensor();
    sensor.setPressure(1);
    sensor.setTemperature(25);
    ksession.insert(sensor);
    ksession.fireAllRules();
}
Also used : ClassObjectFilter(org.kie.api.runtime.ClassObjectFilter) FactHandle(org.kie.api.runtime.rule.FactHandle) Alarm(org.drools.compiler.Alarm) KieHelper(org.kie.internal.utils.KieHelper) DefaultAgendaEventListener(org.drools.core.event.DefaultAgendaEventListener) Collection(java.util.Collection) KieSession(org.kie.api.runtime.KieSession) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) Sensor(org.drools.compiler.Sensor) Test(org.junit.Test)

Example 3 with Alarm

use of org.drools.compiler.Alarm in project drools by kiegroup.

the class TimerAndCalendarTest method testDurationMemoryLeakonRepeatedUpdate.

@Test(timeout = 10000)
public void testDurationMemoryLeakonRepeatedUpdate() throws Exception {
    String str = "";
    str += "package org.drools.compiler.test\n";
    str += "import org.drools.compiler.Alarm\n";
    str += "global java.util.List list;";
    str += "rule \"COMPTEUR\"\n";
    str += "  timer (int: 50s)\n";
    str += "  when\n";
    str += "    $alarm : Alarm( number < 5 )\n";
    str += "  then\n";
    str += "    $alarm.incrementNumber();\n";
    str += "    list.add( $alarm );\n";
    str += "    update($alarm);\n";
    str += "end\n";
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(ClockTypeOption.get("pseudo"));
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession ksession = createKnowledgeSession(kbase, conf);
    PseudoClockScheduler timeService = (PseudoClockScheduler) ksession.<SessionClock>getSessionClock();
    timeService.advanceTime(new Date().getTime(), TimeUnit.MILLISECONDS);
    List list = new ArrayList();
    ksession.setGlobal("list", list);
    ksession.insert(new Alarm());
    ksession.fireAllRules();
    for (int i = 0; i < 6; i++) {
        timeService.advanceTime(55, TimeUnit.SECONDS);
        ksession.fireAllRules();
    }
    assertEquals(5, list.size());
}
Also used : KieBase(org.kie.api.KieBase) Alarm(org.drools.compiler.Alarm) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) PseudoClockScheduler(org.drools.core.time.impl.PseudoClockScheduler) Date(java.util.Date) EntryPoint(org.kie.api.runtime.rule.EntryPoint) Test(org.junit.Test)

Aggregations

Alarm (org.drools.compiler.Alarm)3 Test (org.junit.Test)3 KieSession (org.kie.api.runtime.KieSession)3 KieSessionConfiguration (org.kie.api.runtime.KieSessionConfiguration)3 Collection (java.util.Collection)2 Sensor (org.drools.compiler.Sensor)2 DefaultAgendaEventListener (org.drools.core.event.DefaultAgendaEventListener)2 MatchCreatedEvent (org.kie.api.event.rule.MatchCreatedEvent)2 ClassObjectFilter (org.kie.api.runtime.ClassObjectFilter)2 FactHandle (org.kie.api.runtime.rule.FactHandle)2 KieHelper (org.kie.internal.utils.KieHelper)2 ArrayList (java.util.ArrayList)1 Arrays.asList (java.util.Arrays.asList)1 Date (java.util.Date)1 List (java.util.List)1 PseudoClockScheduler (org.drools.core.time.impl.PseudoClockScheduler)1 KieBase (org.kie.api.KieBase)1 EntryPoint (org.kie.api.runtime.rule.EntryPoint)1