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();
}
}
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());
}
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());
}
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));
}
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() );
}
Aggregations