Search in sources :

Example 66 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class Misc2Test method testDynamicAddRule.

@Test
public void testDynamicAddRule() {
    // DROOLS-17
    String str = "import " + Misc2Test.A.class.getCanonicalName() + "\n" + "rule r1 when\n" + "    $a : A( f1 == 1 )\n" + "then\n" + "end\n" + "\n" + "rule r2 when\n" + "    $a : A( f2 == 1 )\n" + "then\n" + "end\n" + "\n" + "rule r3 when\n" + "    $a : A( f3 == 1 )" + "then\n" + "end";
    String str2 = "import " + Misc2Test.A.class.getCanonicalName() + "\n" + "rule r4 when\n" + "    $a : A( f2 == 1, f4 == 1 )" + "then\n" + "end";
    InternalKnowledgeBase kbase = (InternalKnowledgeBase) loadKnowledgeBaseFromString(str);
    KieSession ksession = kbase.newKieSession();
    FactHandle fh = ksession.insert(new A(1, 1, 1, 1));
    ksession.fireAllRules();
    kbase.addPackages(loadKnowledgePackagesFromString(str2));
    ksession.fireAllRules();
    // this second insert forces the regeneration of the otnIds
    ksession.insert(new A(2, 2, 2, 2));
    LeftTuple leftTuple = ((DefaultFactHandle) fh).getFirstLeftTuple();
    ObjectTypeNode.Id letTupleOtnId = leftTuple.getInputOtnId();
    leftTuple = leftTuple.getHandleNext();
    while (leftTuple != null) {
        assertTrue(letTupleOtnId.before(leftTuple.getInputOtnId()));
        letTupleOtnId = leftTuple.getInputOtnId();
        leftTuple = leftTuple.getHandleNext();
    }
}
Also used : DefaultFactHandle(org.drools.core.common.DefaultFactHandle) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) LeftTuple(org.drools.core.reteoo.LeftTuple) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Test(org.junit.Test)

Example 67 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class Misc2Test method testSubnetworkAccumulate.

@Test
public void testSubnetworkAccumulate() {
    String drl = "import " + StringWrapper.class.getCanonicalName() + ";\n" + "global StringBuilder sb;" + "rule R when\n" + "  $s : String()\n" + "  Number( $i : intValue ) from accumulate ($sw : StringWrapper( $value : value ) " + "                                       and eval( $sw.contains($s) ), " + "                                 sum($value) )\n" + "then\n" + "  sb.append($i);\n" + "end\n";
    KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
    StringBuilder sb = new StringBuilder();
    ksession.setGlobal("sb", sb);
    ksession.insert("test");
    StringWrapper sw = new StringWrapper();
    FactHandle swFH = ksession.insert(sw);
    ksession.fireAllRules();
    sw.setWrapped("test");
    ksession.update(swFH, sw);
    ksession.fireAllRules();
    sw.setWrapped(null);
    ksession.update(swFH, sw);
    ksession.fireAllRules();
    sw.setWrapped("test");
    ksession.update(swFH, sw);
    ksession.fireAllRules();
    sw.setWrapped(null);
    ksession.update(swFH, sw);
    ksession.fireAllRules();
    sw.setWrapped("test");
    ksession.update(swFH, sw);
    ksession.fireAllRules();
    assertEquals("040404", sb.toString());
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) Test(org.junit.Test)

Example 68 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class NamedConsequencesTest method testMvelInsertWithNamedConsequence.

@Test
public void testMvelInsertWithNamedConsequence() {
    // DROOLS-726
    String drl2 = "package org.drools.compiler\n" + "global java.util.concurrent.atomic.AtomicInteger counter\n" + "declare Output\n" + "    feedback: String\n" + "end\n" + "rule \"Move to next\" dialect \"mvel\"\n" + "   when\n" + "          $i: Integer()\n" + "          if ($i == 1) break[nextStep1]\n" + "   then\n" + "           insert(new Output(\"defualt\"));\n" + "   then[nextStep1]\n" + "           insert(new Output(\"step 1\"));\n" + "end\n" + "\n" + "rule \"Produce output\"\n" + "    when\n" + "        $output: Output()\n" + "    then\n" + "        System.out.println($output);\n" + "        retract($output);" + "        counter.incrementAndGet();\n" + "end\n";
    KieSession kSession = new KieHelper().addContent(drl2, ResourceType.DRL).build().newKieSession();
    AtomicInteger counter = new AtomicInteger(0);
    kSession.setGlobal("counter", counter);
    FactHandle messageHandle = kSession.insert(1);
    kSession.fireAllRules();
    kSession.delete(messageHandle);
    kSession.insert(2);
    kSession.fireAllRules();
    assertEquals(2, counter.get());
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) FactHandle(org.kie.api.runtime.rule.FactHandle) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 69 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class NamedConsequencesTest method testDeleteWithBreakingBranch.

@Test
public void testDeleteWithBreakingBranch() throws Exception {
    // DROOLS-1068
    String drl = "global java.util.List list;\n" + "rule R when\n" + "  Integer()\n" + "  if (true) break[branch]\n" + "  not Integer()\n" + "then\n" + "  list.add(\"main\");\n" + "then[branch]\n" + "  list.add(\"branch\");\n" + "end\n";
    KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
    List<String> list = new ArrayList<String>();
    ksession.setGlobal("list", list);
    FactHandle fh = ksession.insert(1);
    ksession.fireAllRules();
    ksession.delete(fh);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertEquals("branch", list.get(0));
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 70 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class OutOfMemoryTest method testMemoryLeak.

@Test
@Ignore
public void testMemoryLeak() {
    final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("test_MemoryLeak.drl", OutOfMemoryTest.class), ResourceType.DRL);
    assertFalse(kbuilder.getErrors().toString(), kbuilder.hasErrors());
    final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addPackages(kbuilder.getKnowledgePackages());
    final KieSession ksession = createKnowledgeSession(kbase);
    final int pcount = 5;
    Person[] persons = new Person[pcount];
    FactHandle[] pHandles = new FactHandle[pcount];
    for (int i = 0; i < persons.length; i++) {
        persons[i] = new Person("person-0-" + i);
        pHandles[i] = ksession.insert(persons[i]);
    }
    Cheese[] cheeses = new Cheese[pcount];
    FactHandle[] cHandles = new FactHandle[pcount];
    for (int i = 0; i < cheeses.length; i++) {
        cheeses[i] = new Cheese("cheese-0-" + i);
        cHandles[i] = ksession.insert(cheeses[i]);
    }
    ksession.fireAllRules();
    for (int j = 1; j <= 5; j++) {
        for (int i = 0; i < pcount; i++) {
            cheeses[i].setType("cheese-" + j + "-" + i);
            ksession.update(cHandles[i], cheeses[i]);
            persons[i].setName("person-" + j + "-" + i);
            ksession.update(pHandles[i], persons[i]);
        }
        ksession.fireAllRules();
        logger.info("DONE");
    }
    SessionInspector inspector = new SessionInspector(ksession);
    SessionReporter.addNamedTemplate("dump_tuples", getClass().getResourceAsStream("/org/drools/core/util/debug/dump_tuples.mvel"));
    String report = SessionReporter.generateReport("dump_tuples", inspector.getSessionInfo(), new HashMap<String, Object>());
    try {
        FileWriter out = new FileWriter("tupleDump.txt");
        out.write(report);
        out.close();
        logger.info(report);
    } catch (Exception e) {
        e.printStackTrace();
    }
// logicals = getLogicallyInserted( ksession );
// assertEquals( pcount, logicals.size() );
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) FileWriter(java.io.FileWriter) Cheese(org.drools.compiler.Cheese) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) KieSession(org.kie.api.runtime.KieSession) Person(org.drools.compiler.Person) SessionInspector(org.drools.core.util.debug.SessionInspector) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Ignore(org.junit.Ignore) Test(org.junit.Test)

Aggregations

FactHandle (org.kie.api.runtime.rule.FactHandle)650 Test (org.junit.Test)547 KieSession (org.kie.api.runtime.KieSession)506 KieBase (org.kie.api.KieBase)304 ArrayList (java.util.ArrayList)298 InternalFactHandle (org.drools.core.common.InternalFactHandle)192 List (java.util.List)165 DefaultFactHandle (org.drools.core.common.DefaultFactHandle)119 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)66 KieHelper (org.kie.internal.utils.KieHelper)50 Person (org.drools.modelcompiler.domain.Person)46 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)43 HashMap (java.util.HashMap)41 Person (org.drools.compiler.Person)41 InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)39 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)39 Person (org.drools.mvel.compiler.Person)38 Ignore (org.junit.Ignore)36 Match (org.kie.api.runtime.rule.Match)36 Collection (java.util.Collection)34