use of org.kie.api.runtime.KieSession in project drools by kiegroup.
the class SharedSessionParallelTest method testLongRunningRule.
@Test(timeout = 20000)
public void testLongRunningRule() throws InterruptedException {
final int threadCount = 100;
final int seed = threadCount + 200;
final int objectCount = 1000;
final String longRunningDrl = "import " + BeanA.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule longRunning " + "when " + " $bean : BeanA($n : seed, seed > " + threadCount + ") " + "then " + " modify($bean) { setSeed($n-1) };" + " list.add(\"\" + $bean.getSeed());" + "end";
final String listDrl = "global java.util.List list2;\n" + "rule listRule " + "when " + " BeanA($n : seed, seed < " + threadCount + ") " + "then " + " list2.add(\"\" + $n);" + "end";
final KieSession kieSession = getKieBase(longRunningDrl, listDrl).newKieSession();
final CyclicBarrier barrier = new CyclicBarrier(threadCount);
final List<String> list = Collections.synchronizedList(new ArrayList<>());
final List<String> list2 = Collections.synchronizedList(new ArrayList<>());
final TestExecutor exec = counter -> {
try {
if (counter == 0) {
kieSession.setGlobal("list", list);
kieSession.setGlobal("list2", list2);
kieSession.insert(new BeanA(seed));
barrier.await();
kieSession.fireAllRules();
return true;
} else {
barrier.await();
for (int i = 0; i < objectCount; i++) {
kieSession.insert(new BeanA(counter));
}
kieSession.fireAllRules();
return true;
}
} catch (final Exception ex) {
throw new RuntimeException(ex);
}
};
parallelTest(threadCount, exec);
kieSession.dispose();
checkList(threadCount, seed, list);
checkList(1, threadCount, list2, (threadCount - 1) * objectCount);
}
use of org.kie.api.runtime.KieSession in project drools by kiegroup.
the class SharedSessionParallelTest method testCorrectFirings2.
@Test(timeout = 20000)
public void testCorrectFirings2() throws InterruptedException {
final int threadCount = 100;
final String drl = "import " + BeanA.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule R1 " + "when " + " BeanA($n : seed, seed == 0) " + "then " + " list.add(\"\" + $n);" + "end";
final KieSession kieSession = getKieBase(drl).newKieSession();
final List<String> list = Collections.synchronizedList(new ArrayList<>());
final TestExecutor exec = counter -> {
kieSession.setGlobal("list", list);
kieSession.insert(new BeanA(counter % 2));
kieSession.fireAllRules();
return true;
};
parallelTest(threadCount, exec);
kieSession.dispose();
Assertions.assertThat(list).contains("" + 0);
Assertions.assertThat(list).doesNotContain("" + 1);
final int expectedListSize = ((threadCount - 1) / 2) + 1;
Assertions.assertThat(list).hasSize(expectedListSize);
}
use of org.kie.api.runtime.KieSession in project drools by kiegroup.
the class SharedSessionParallelTest method testOneRulePerThread.
@Test(timeout = 20000)
public void testOneRulePerThread() throws InterruptedException {
final int threadCount = 1000;
final String[] drls = new String[threadCount];
for (int i = 0; i < threadCount; i++) {
drls[i] = "import " + BeanA.class.getCanonicalName() + ";\n" + "global java.util.List list;\n" + "rule R" + i + " " + "when " + " $bean : BeanA( seed == " + i + " ) " + "then " + " list.add(\"" + i + "\");" + "end";
}
final KieSession kieSession = getKieBase(drls).newKieSession();
final List<String> list = Collections.synchronizedList(new ArrayList<>());
final TestExecutor exec = counter -> {
kieSession.setGlobal("list", list);
kieSession.insert(new BeanA(counter));
kieSession.fireAllRules();
return true;
};
parallelTest(threadCount, exec);
kieSession.dispose();
checkList(threadCount, list);
}
use of org.kie.api.runtime.KieSession in project drools by kiegroup.
the class DRLTest method testEventsInDifferentPackages.
@Test
public void testEventsInDifferentPackages() {
final String str = "package org.drools.compiler.test\n" + "import org.drools.compiler.*\n" + "declare StockTick\n" + " @role( event )\n" + "end\n" + "rule r1\n" + "when\n" + "then\n" + " StockTick st = new StockTick();\n" + " st.setCompany(\"RHT\");\n" + "end\n";
final KieBase kbase = loadKnowledgeBaseFromString(str);
final KieSession ksession = createKnowledgeSession(kbase);
final int rules = ksession.fireAllRules();
assertEquals(1, rules);
}
use of org.kie.api.runtime.KieSession in project drools by kiegroup.
the class ImportsTest method testImportFunctions.
@Test
public void testImportFunctions() throws Exception {
final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_ImportFunctions.drl"));
KieSession session = createKnowledgeSession(kbase);
final Cheese cheese = new Cheese("stilton", 15);
session.insert(cheese);
List list = new ArrayList();
session.setGlobal("list", list);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, true);
final int fired = session.fireAllRules();
list = (List) session.getGlobal("list");
assertEquals(4, fired);
assertEquals(4, list.size());
assertEquals("rule1", list.get(0));
assertEquals("rule2", list.get(1));
assertEquals("rule3", list.get(2));
assertEquals("rule4", list.get(3));
}
Aggregations