Search in sources :

Example 71 with KieSession

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);
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) Arrays(java.util.Arrays) List(java.util.List) CyclicBarrier(java.util.concurrent.CyclicBarrier) BeanA(org.drools.compiler.integrationtests.facts.BeanA) RunWith(org.junit.runner.RunWith) Assertions(org.assertj.core.api.Assertions) Test(org.junit.Test) KieSession(org.kie.api.runtime.KieSession) Collections(java.util.Collections) Parameterized(org.junit.runners.Parameterized) ArrayList(java.util.ArrayList) BeanA(org.drools.compiler.integrationtests.facts.BeanA) KieSession(org.kie.api.runtime.KieSession) CyclicBarrier(java.util.concurrent.CyclicBarrier) Test(org.junit.Test)

Example 72 with KieSession

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);
}
Also used : BeanA(org.drools.compiler.integrationtests.facts.BeanA) CountDownLatch(java.util.concurrent.CountDownLatch) Arrays(java.util.Arrays) List(java.util.List) CyclicBarrier(java.util.concurrent.CyclicBarrier) BeanA(org.drools.compiler.integrationtests.facts.BeanA) RunWith(org.junit.runner.RunWith) Assertions(org.assertj.core.api.Assertions) Test(org.junit.Test) KieSession(org.kie.api.runtime.KieSession) Collections(java.util.Collections) Parameterized(org.junit.runners.Parameterized) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 73 with KieSession

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);
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) Arrays(java.util.Arrays) List(java.util.List) CyclicBarrier(java.util.concurrent.CyclicBarrier) BeanA(org.drools.compiler.integrationtests.facts.BeanA) RunWith(org.junit.runner.RunWith) Assertions(org.assertj.core.api.Assertions) Test(org.junit.Test) KieSession(org.kie.api.runtime.KieSession) Collections(java.util.Collections) Parameterized(org.junit.runners.Parameterized) ArrayList(java.util.ArrayList) BeanA(org.drools.compiler.integrationtests.facts.BeanA) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 74 with KieSession

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);
}
Also used : KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 75 with KieSession

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));
}
Also used : KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Aggregations

KieSession (org.kie.api.runtime.KieSession)5328 Test (org.junit.Test)4824 KieBase (org.kie.api.KieBase)2414 ArrayList (java.util.ArrayList)2317 List (java.util.List)1105 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)769 FactHandle (org.kie.api.runtime.rule.FactHandle)598 Person (org.drools.modelcompiler.domain.Person)519 HashMap (java.util.HashMap)416 ProcessInstance (org.kie.api.runtime.process.ProcessInstance)415 KieServices (org.kie.api.KieServices)382 KieHelper (org.kie.internal.utils.KieHelper)355 KieContainer (org.kie.api.runtime.KieContainer)298 RuntimeEngine (org.kie.api.runtime.manager.RuntimeEngine)265 InternalFactHandle (org.drools.core.common.InternalFactHandle)259 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)234 AbstractBaseTest (org.jbpm.test.util.AbstractBaseTest)234 ReleaseId (org.kie.api.builder.ReleaseId)232 KieSessionConfiguration (org.kie.api.runtime.KieSessionConfiguration)229 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)207