use of org.kie.api.builder.model.KieBaseModel in project drools by kiegroup.
the class IncrementalCompilationTest method testEventDeclarationInSeparatedDRL.
@Test
public void testEventDeclarationInSeparatedDRL() throws Exception {
// DROOLS-1241
String drl1 = "import " + SimpleEvent.class.getCanonicalName() + ";\n" + "declare SimpleEvent\n" + " @role( event )\n" + " @timestamp( timestamp )\n" + " @expires( 2d )\n" + "end\n";
String drl2 = "import " + SimpleEvent.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule R1 when\n" + " $s:SimpleEvent(code==\"MY_CODE\") over window:time( 1s )\n" + "then\n" + " list.add(\"MY_CODE\");\n" + "end\n";
String drl3 = "import " + SimpleEvent.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule R2 when\n" + " $s:SimpleEvent(code==\"YOUR_CODE\") over window:time( 1s )\n" + "then\n" + " list.add(\"YOUR_CODE\");\n" + "end\n";
KieServices ks = KieServices.Factory.get();
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-cep-upgrade", "1.1.1");
KieModule km = deployJar(ks, createKJar(ks, kproj, releaseId1, null, drl1, drl2));
KieContainer kc = ks.newKieContainer(km.getReleaseId());
KieSession ksession = kc.newKieSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
ksession.insert(new SimpleEvent("1", "MY_CODE", 0));
ksession.insert(new SimpleEvent("2", "YOUR_CODE", 0));
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals("MY_CODE", list.get(0));
list.clear();
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-cep-upgrade", "1.1.2");
// the null drl placeholder is used to have the same drl with a different file name
// this causes the removal and readdition of both rules
km = deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl1, drl2, drl3));
Results results = kc.updateToVersion(releaseId2);
assertEquals(0, results.getMessages().size());
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals("YOUR_CODE", list.get(0));
}
use of org.kie.api.builder.model.KieBaseModel in project drools by kiegroup.
the class IncrementalCompilationTest method testIncrementalCompilationWithNewEvent.
@Test
public void testIncrementalCompilationWithNewEvent() throws Exception {
// DROOLS-1395
String drl1 = "package fr.edf.distribution.brms.common.test\n" + "import " + DummyEvent.class.getCanonicalName() + "\n" + "declare DummyEvent\n" + " @role( event )\n" + " @timestamp( eventTimestamp )\n" + "end\n" + "rule \"RG_TEST_1\"\n" + " when\n" + " $event: DummyEvent ()\n" + " then\n" + " System.out.println(\"RG_TEST_1 fired\");\n" + " retract($event);\n" + "end";
String drl2 = "package fr.edf.distribution.brms.common.test\n" + "import " + DummyEvent.class.getCanonicalName() + "\n" + "import " + OtherDummyEvent.class.getCanonicalName() + "\n" + "declare DummyEvent\n" + " @role( event )\n" + " @timestamp( eventTimestamp )\n" + "end\n" + "declare OtherDummyEvent\n" + " @role( event )\n" + " @timestamp( eventTimestamp )\n" + "end\n" + "rule \"RG_TEST_2\"\n" + " when\n" + " $event: DummyEvent ()\n" + " $other : OtherDummyEvent(id == $event.id, this after $event)\n" + " then\n" + " System.out.println(\"RG_TEST_2 fired\");\n" + " retract($other);\n" + "end\n" + "\n" + "rule \"RG_TEST_1\"\n" + " when\n" + " $event: DummyEvent ()\n" + " then\n" + " System.out.println(\"RG_TEST_1 fired\");\n" + " retract($event);\n" + "end\n";
KieServices ks = KieServices.Factory.get();
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId1, null, drl1));
KieContainer kc = ks.newKieContainer(releaseId1);
KieSession kieSession = kc.newKieSession();
DummyEvent evt = new DummyEvent("evt");
kieSession.insert(evt);
assertEquals(1, kieSession.fireAllRules());
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "2.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl2));
kc.updateToVersion(releaseId2);
evt = new DummyEvent("evt");
kieSession.insert(evt);
OtherDummyEvent other = new OtherDummyEvent("evt");
kieSession.insert(other);
assertEquals(1, kieSession.fireAllRules());
}
use of org.kie.api.builder.model.KieBaseModel in project drools by kiegroup.
the class IncrementalCompilationTest method testIncrementalCompilationWithTimerNode.
@Test
public void testIncrementalCompilationWithTimerNode() throws Exception {
// DROOLS-1195
String drl1 = "package fr.edf.distribution.brms.common.test\n" + "import " + DummyEvent.class.getCanonicalName() + "\n" + "declare DummyEvent\n" + " @role( event )\n" + " @timestamp( eventTimestamp )\n" + "end\n" + "rule \"RG_TEST_TIMER\"\n" + "timer (int: 0 1; start=$expirationTimestamp , repeat-limit=0 )\n" + " when\n" + " $dummy: DummyEvent (id == 'timer', $expirationTimestamp : systemTimestamp )\n" + " then\n " + "System.out.println(\"1\");\n" + "end\n";
String drl2 = "package fr.edf.distribution.brms.common.test\n" + "import " + DummyEvent.class.getCanonicalName() + "\n" + "declare DummyEvent\n" + " @role( event )\n" + " @timestamp( eventTimestamp )\n" + "end\n" + "rule \"RG_TEST_TIMER_NEW\"\n" + "timer (int: 0 1; start=$expirationTimestamp , repeat-limit=0 )\n" + " when\n" + " $dummy: DummyEvent (id == 'timer', $expirationTimestamp : systemTimestamp )\n" + " DummyEvent (id == 'timer_match')\n" + " then\n " + "System.out.println(\"1\");\n" + "end\n" + "rule \"RG_OTHER_RULE\"\n" + " when\n" + " $dummy: DummyEvent ( id == 'timer' )\n" + " then\n " + "System.out.println(\"2\");\n" + "end\n";
long now = System.currentTimeMillis();
KieServices ks = KieServices.Factory.get();
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId1, null, drl1));
KieContainer kc = ks.newKieContainer(releaseId1);
KieSession kieSession = kc.newKieSession();
DummyEvent dummyEvent = new DummyEvent();
dummyEvent.setId("timer");
dummyEvent.setEventTimestamp(now);
dummyEvent.setSystemTimestamp(now + TimeUnit.HOURS.toMillis(1));
DummyEvent other = new DummyEvent();
other.setId("timer_match");
other.setEventTimestamp(now);
kieSession.insert(dummyEvent);
kieSession.insert(other);
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "2.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl2));
kc.updateToVersion(releaseId2);
PseudoClockScheduler scheduler = kieSession.getSessionClock();
scheduler.setStartupTime(now);
scheduler.advanceTime(1, TimeUnit.DAYS);
assertEquals(2, kieSession.fireAllRules());
}
use of org.kie.api.builder.model.KieBaseModel in project drools by kiegroup.
the class IncrementalCompilationTest method testAddRuleWithSlidingWindows.
@Test
public void testAddRuleWithSlidingWindows() throws Exception {
// DROOLS-2292
String drl1 = "package org.drools.compiler\n" + "import " + List.class.getCanonicalName() + "\n" + "import " + BooleanEvent.class.getCanonicalName() + "\n" + "rule R1 when\n" + " $e : BooleanEvent(!enabled)\n" + " List(size >= 1) from collect ( BooleanEvent(!enabled) over window:time(1) )\n" + " $toEdit : List() from collect( BooleanEvent(!enabled) over window:time(2) )\n" + "then\n" + " modify( (BooleanEvent)$toEdit.get(0) ){ setEnabled( true ) }\n" + "end\n";
KieServices ks = KieServices.Factory.get();
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId1, null));
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "2.0.0");
deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl1));
KieContainer kc = ks.newKieContainer(releaseId1);
KieSession kieSession = kc.newKieSession();
kieSession.insert(new BooleanEvent());
kieSession.fireAllRules();
kc.updateToVersion(releaseId2);
kieSession.fireAllRules();
KieMarshallers marshallers = ks.getMarshallers();
Marshaller marshaller = marshallers.newMarshaller(kieSession.getKieBase());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
marshaller.marshall(outputStream, kieSession);
}
use of org.kie.api.builder.model.KieBaseModel in project drools by kiegroup.
the class IncrementalCompilationTest method testDrlRenamingWithEvents.
@Test
public void testDrlRenamingWithEvents() throws Exception {
// DROOLS-965
String drl1 = "import " + SimpleEvent.class.getCanonicalName() + ";\n" + "\n" + "global java.util.concurrent.atomic.AtomicInteger counter1;\n" + "global java.util.concurrent.atomic.AtomicInteger counter2;\n" + "\n" + "declare SimpleEvent\n" + " @role( event )\n" + " @timestamp( timestamp )\n" + " @expires( 2d )\n" + "end\n" + "\n" + "rule R1 when\n" + " $s:SimpleEvent(code==\"MY_CODE\")\n" + "then\n" + " counter1.incrementAndGet();\n" + "end\n" + "\n" + "rule R2 when\n" + " $s:SimpleEvent(code==\"MY_CODE\")\n" + " not SimpleEvent(this != $s, this after [0,10s] $s)\n" + "then\n" + " counter2.incrementAndGet();\n" + "end\n";
KieServices ks = KieServices.Factory.get();
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(true).setEventProcessingMode(EventProcessingOption.STREAM);
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL).setClockType(ClockTypeOption.get(ClockType.PSEUDO_CLOCK.getId()));
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.1");
KieModule km = deployJar(ks, createKJar(ks, kproj, releaseId1, null, drl1));
KieContainer kc = ks.newKieContainer(km.getReleaseId());
KieSession ksession = kc.newKieSession();
PseudoClockScheduler clock = ksession.getSessionClock();
AtomicInteger counter1 = new AtomicInteger(0);
AtomicInteger counter2 = new AtomicInteger(0);
ksession.setGlobal("counter1", counter1);
ksession.setGlobal("counter2", counter2);
ksession.insert(new SimpleEvent("1", "MY_CODE", 0));
ksession.fireAllRules();
clock.advanceTime(5, TimeUnit.SECONDS);
ksession.insert(new SimpleEvent("2", "MY_CODE", 5));
ksession.fireAllRules();
assertEquals(2, counter1.get());
assertEquals(0, counter2.get());
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.2");
// the null drl placeholder is used to have the same drl with a different file name
// this causes the removal and readdition of both rules
km = deployJar(ks, createKJar(ks, kproj, releaseId2, null, (String) null, drl1));
kc.updateToVersion(releaseId2);
clock = ksession.getSessionClock();
clock.advanceTime(16, TimeUnit.SECONDS);
ksession.insert(new SimpleEvent("3", "MY_CODE", 21));
ksession.fireAllRules();
assertEquals(5, counter1.get());
assertEquals(1, counter2.get());
}
Aggregations