use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.
the class IncrementalCompilationTest method createKJarWIthPackages.
private void createKJarWIthPackages(KieServices ks, ReleaseId releaseId1, String... pkgs) {
String drl1 = "global java.util.List list;\n" + "rule R1 when\n" + " String()\n" + "then\n" + " list.add(\"R1\");" + "end\n";
String drl2 = "global java.util.List list;\n" + "rule R2 when\n" + " String()\n" + "then\n" + " list.add(\"R2\");" + "end\n";
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("kbase1").setDefault(true);
for (String pkg : pkgs) {
kieBaseModel1.addPackage(pkg);
}
KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("ksession1").setDefault(true);
KieFileSystem kfs = ks.newKieFileSystem();
kfs.writeKModuleXML(kproj.toXML());
kfs.generateAndWritePomXML(releaseId1);
kfs.write("src/main/resources/pkg1/r1.drl", drl1);
kfs.write("src/main/resources/pkg2/r2.drl", drl2);
KieModule km = deployJar(ks, buildKJar(ks, kfs, releaseId1));
}
use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.
the class IncrementalCompilationTest method testRemoveRuleWithNonInitializedPath.
@Test
public void testRemoveRuleWithNonInitializedPath() {
// DROOLS-1177
String drl1 = "import " + MyEvent.class.getCanonicalName() + "\n" + "declare MyEvent @role( event ) end\n" + "rule \"RG_TEST_1\"\n" + " when\n" + " $dummy: MyEvent (id == 1)\n" + " $other: MyEvent (this != $dummy)\n" + " then\n" + " retract($other);\n" + "end\n" + "rule \"RG_TEST_2\"\n" + " when\n" + " $dummy: MyEvent (id == 1)\n" + " then\n" + " retract($dummy);\n" + "end\n";
String drl2 = "import " + MyEvent.class.getCanonicalName() + "\n" + "declare IMyEvent @role( event ) end\n" + "rule \"RG_TEST_2\"\n" + " when\n" + " $dummy: MyEvent (id == 1)\n" + " then\n" + " retract($dummy);\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);
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 ksession = kc.newKieSession();
ksession.insert(new MyEvent(0));
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.0");
deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl2));
kc.updateToVersion(releaseId2);
}
use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.
the class IncrementalCompilationTest method testIncrementalCompilationWithSlidingWindow.
@Test
public void testIncrementalCompilationWithSlidingWindow() {
// DROOLS-881
String drl1 = "import " + MyEvent.class.getCanonicalName() + "\n" + "declare MyEvent @role( event ) end\n" + "rule A when\n" + " Number($number : intValue)\n" + " from accumulate( MyEvent($id : id) over window:time(10s), sum($id) )\n" + "then\n" + " System.out.println(\"1. SUM : \" + $number);\n" + "end\n" + "\n" + "rule B when\n" + " Number($number : intValue)\n" + " from accumulate( MyEvent($id : id) over window:time(10s), count($id) )\n" + "then\n" + " System.out.println(\"1. CNT : \" + $number);\n" + "end";
String drl2 = "import " + MyEvent.class.getCanonicalName() + "\n" + "declare MyEvent @role( event ) end\n" + "rule A when\n" + " Number($number : intValue)\n" + " from accumulate( MyEvent($id : id) over window:time(10s), sum($id) )\n" + "then\n" + " System.out.println(\"2. SUM : \" + $number);\n" + "end\n" + "\n" + "rule B when\n" + " Number($number : intValue)\n" + " from accumulate( MyEvent($id : id) over window:time(10s), count($id) )\n" + "then\n" + " System.out.println(\"2. CNT : \" + $number);\n" + "end";
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));
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.0");
deployJar(ks, createKJar(ks, kproj, releaseId2, null, drl2));
KieContainer kc = ks.newKieContainer(releaseId1);
KieSession ksession = kc.newKieSession();
PseudoClockScheduler clock = ksession.getSessionClock();
ksession.insert(new MyEvent(1));
ksession.fireAllRules();
clock.advanceTime(7, TimeUnit.SECONDS);
kc.updateToVersion(releaseId2);
ksession.fireAllRules();
clock.advanceTime(7, TimeUnit.SECONDS);
kc.updateToVersion(releaseId1);
ksession.fireAllRules();
}
use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.
the class AbstractKieProject method indexKieModule.
private void indexKieModule(Map<String, InternalKieModule> kJarFromKBaseName, InternalKieModule kJar, boolean isMainModule) {
boolean defaultKieBaseFromMain = false;
boolean defaultKieSessionFromMain = false;
boolean defaultStatelessKieSessionFromMain = false;
KieModuleModel kieProject = kJar.getKieModuleModel();
for (KieBaseModel kieBaseModel : kieProject.getKieBaseModels().values()) {
if (kieBaseModel.isDefault()) {
if (defaultKieBase == null || (isMainModule && !defaultKieBaseFromMain)) {
defaultKieBase = kieBaseModel;
defaultKieBaseFromMain = isMainModule;
} else {
defaultKieBase = null;
log.warn("Found more than one default KieBase: disabling all. KieBases will be accessible only by name");
}
}
kBaseModels.put(kieBaseModel.getName(), kieBaseModel);
// should already be set, but just in case
((KieBaseModelImpl) kieBaseModel).setKModule(kieProject);
kJarFromKBaseName.put(kieBaseModel.getName(), kJar);
for (KieSessionModel kieSessionModel : kieBaseModel.getKieSessionModels().values()) {
if (kieSessionModel.isDefault()) {
if (kieSessionModel.getType() == KieSessionModel.KieSessionType.STATEFUL) {
if (defaultKieSession == null || (isMainModule && !defaultKieSessionFromMain)) {
defaultKieSession = kieSessionModel;
defaultKieSessionFromMain = isMainModule;
} else {
defaultKieSession = null;
log.warn("Found more than one default KieSession: disabling all. KieSessions will be accessible only by name");
}
} else {
if (defaultStatelessKieSession == null || (isMainModule && !defaultStatelessKieSessionFromMain)) {
defaultStatelessKieSession = kieSessionModel;
defaultStatelessKieSessionFromMain = isMainModule;
} else {
defaultStatelessKieSession = null;
log.warn("Found more than one default StatelessKieSession: disabling all. StatelessKieSessions will be accessible only by name");
}
}
}
// should already be set, but just in case
((KieSessionModelImpl) kieSessionModel).setKBase(kieBaseModel);
kSessionModels.put(kieSessionModel.getName(), kieSessionModel);
}
}
}
use of org.kie.api.builder.model.KieSessionModel in project drools by kiegroup.
the class KieBaseModelImpl method newKieSessionModel.
/* (non-Javadoc)
* @see org.kie.kproject.KieBaseModel#addKSession(org.kie.kproject.KieSessionModelImpl)
*/
public KieSessionModel newKieSessionModel(String name) {
KieSessionModel kieSessionModel = new KieSessionModelImpl(this, name);
Map<String, KieSessionModel> newMap = new HashMap<String, KieSessionModel>();
newMap.putAll(this.kSessions);
newMap.put(kieSessionModel.getName(), kieSessionModel);
setKSessions(newMap);
return kieSessionModel;
}
Aggregations