Search in sources :

Example 61 with FactHandle

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

the class Misc2Test method testReuseAgendaAfterException.

@Test
public void testReuseAgendaAfterException() throws Exception {
    // JBRULES-3677
    String str = "import org.drools.compiler.Person;\n" + "global java.util.List results;" + "rule R1\n" + "ruleflow-group \"test\"\n" + "when\n" + "   Person( $age : age ) \n" + "then\n" + "   if ($age > 40) throw new RuntimeException(\"Too old\");\n" + "   results.add(\"OK\");" + "end";
    KieBase kbase = loadKnowledgeBaseFromString(str);
    final KieSession ksession = kbase.newKieSession();
    List<String> res = new ArrayList<String>();
    ksession.setGlobal("results", res);
    AgendaEventListener agendaEventListener = new AgendaEventListener() {

        public void matchCreated(org.kie.api.event.rule.MatchCreatedEvent event) {
        }

        public void matchCancelled(org.kie.api.event.rule.MatchCancelledEvent event) {
        }

        public void beforeMatchFired(org.kie.api.event.rule.BeforeMatchFiredEvent event) {
        }

        public void afterMatchFired(org.kie.api.event.rule.AfterMatchFiredEvent event) {
        }

        public void agendaGroupPopped(org.kie.api.event.rule.AgendaGroupPoppedEvent event) {
        }

        public void agendaGroupPushed(org.kie.api.event.rule.AgendaGroupPushedEvent event) {
        }

        public void beforeRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
        }

        public void afterRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
            ksession.fireAllRules();
        }

        public void beforeRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
        }

        public void afterRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
        }
    };
    ksession.addEventListener(agendaEventListener);
    FactHandle fact1 = ksession.insert(new Person("Mario", 38));
    ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
    ksession.fireAllRules();
    assertEquals(1, res.size());
    res.clear();
    ksession.delete(fact1);
    FactHandle fact2 = ksession.insert(new Person("Mario", 48));
    try {
        ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
        ksession.fireAllRules();
        fail("should throw an Exception");
    } catch (Exception e) {
    }
    ksession.delete(fact2);
    assertEquals(0, res.size());
    // try to reuse the ksession after the Exception
    FactHandle fact3 = ksession.insert(new Person("Mario", 38));
    ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
    ksession.fireAllRules();
    assertEquals(1, res.size());
    ksession.delete(fact3);
    ksession.dispose();
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) ArrayList(java.util.ArrayList) AfterMatchFiredEvent(org.kie.api.event.rule.AfterMatchFiredEvent) DroolsParserException(org.drools.compiler.compiler.DroolsParserException) InternalAgenda(org.drools.core.common.InternalAgenda) KieBase(org.kie.api.KieBase) MatchCancelledEvent(org.kie.api.event.rule.MatchCancelledEvent) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) DebugAgendaEventListener(org.kie.api.event.rule.DebugAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) Person(org.drools.compiler.Person) Test(org.junit.Test)

Example 62 with FactHandle

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

the class Misc2Test method testPhreakInnerJoinNot.

@Test
public void testPhreakInnerJoinNot() {
    // DROOLS-7
    String str = "import org.drools.compiler.integrationtests.Misc2Test.Lecture\n" + "global java.util.List list;\n" + "rule \"curriculumCompactness\"\n" + "    when\n" + "        $lecture : Lecture(\n" + "            $day : day, $index : index\n" + "        )\n" + "        not Lecture(\n" + "            day == $day, index == ($index + 1)\n" + "        )\n" + "    then\n" + "        list.add($lecture.getId());\n" + "end\n";
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession ksession = kbase.newKieSession();
    ArrayList list = new ArrayList();
    ksession.setGlobal("list", list);
    Lecture lA = new Lecture("A", 0, 4);
    Lecture lB = new Lecture("B", 2, 2);
    Lecture lC = new Lecture("C", 2, 1);
    FactHandle fhA = ksession.insert(lA);
    FactHandle fhB = ksession.insert(lB);
    FactHandle fhC = ksession.insert(lC);
    // C gets blocked by B
    ksession.fireAllRules();
    assertEquals(2, list.size());
    assertTrue(list.containsAll(asList("A", "B")));
    list.clear();
    ksession.update(fhB, lB.setDay(0).setIndex(4));
    ksession.update(fhC, lC.setDay(0).setIndex(3));
    // B is still a valid blocker for C
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertTrue(list.contains("B"));
    list.clear();
    ksession.update(fhB, lB.setDay(2).setIndex(2));
    // C doesn't find A as blocker
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertTrue(list.contains("B"));
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) Test(org.junit.Test)

Example 63 with FactHandle

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

the class Misc2Test method testPhreakWith2Nots.

@Test
public void testPhreakWith2Nots() {
    // DROOLS-7
    String str = "import org.drools.compiler.Person\n" + "global java.util.List list;\n" + "rule R when\n" + "  Person( $age : age, $name : name )\n" + "  not Person( name == $name, age == $age + 1 )\n" + "  not Person( name == $name, age == $age - 1 )\n" + "then\n" + "  list.add($age);\n" + "end\n";
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession ksession = kbase.newKieSession();
    List<Integer> list = new ArrayList<Integer>();
    ksession.setGlobal("list", list);
    Person p1 = new Person("AAA", 31);
    Person p2 = new Person("AAA", 34);
    Person p3 = new Person("AAA", 33);
    FactHandle fh1 = ksession.insert(p1);
    FactHandle fh3 = ksession.insert(p3);
    FactHandle fh2 = ksession.insert(p2);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertEquals(31, (int) list.get(0));
    list.clear();
    p1.setAge(35);
    ksession.update(fh1, p1);
    p3.setAge(31);
    ksession.update(fh3, p3);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertEquals(31, (int) list.get(0));
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) Person(org.drools.compiler.Person) Test(org.junit.Test)

Example 64 with FactHandle

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

the class Misc2Test method testDeletedRightTupleInChangedBucket.

@Test
public void testDeletedRightTupleInChangedBucket() {
    // PLANNER-488
    String drl = "import " + Person.class.getCanonicalName() + "\n" + "rule R when\n" + "    Person( $name: name, $age: age )\n" + "    not Person( happy, name == $name, age == $age-1 )\n" + "then\n" + "end";
    KieSession kieSession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
    Person p1 = new Person("C", 1, true);
    Person p2 = new Person("B", 1, true);
    Person p3 = new Person("B", 2, true);
    Person p4 = new Person("A", 2);
    FactHandle fh1 = kieSession.insert(p1);
    FactHandle fh2 = kieSession.insert(p2);
    FactHandle fh3 = kieSession.insert(p3);
    FactHandle fh4 = kieSession.insert(p4);
    kieSession.fireAllRules();
    p4.setName("B");
    p4.setHappy(true);
    kieSession.update(fh4, p4);
    kieSession.fireAllRules();
    p3.setName("A");
    p3.setHappy(false);
    kieSession.update(fh3, p3);
    p1.setName("B");
    kieSession.update(fh1, p1);
    p2.setName("C");
    kieSession.update(fh2, p2);
    kieSession.fireAllRules();
}
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) Person(org.drools.compiler.Person) Test(org.junit.Test)

Example 65 with FactHandle

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

the class Misc2Test method testNotNodeUpdateBlocker.

@Test
public void testNotNodeUpdateBlocker() {
    String str = "import org.drools.compiler.integrationtests.Misc2Test.Conversation;\n" + "global java.util.List list;" + "\n" + "rule \"familyEnd\" when\n" + "   $conversation : Conversation(\n" + "       family != null, $family: family, \n" + "       $timeslot: timeslot)\n" + "\n" + "   not Conversation(\n" + "       family == $family, \n" + "       timeslot > $timeslot);\n" + "then\n" + "   list.add($conversation);\n" + "end\n";
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession ksession = kbase.newKieSession();
    List<Conversation> conversations = new ArrayList<Conversation>();
    ksession.setGlobal("list", conversations);
    Conversation c0 = new Conversation(0, "Fusco", 2);
    Conversation c1 = new Conversation(1, "Fusco", 3);
    Conversation c2 = new Conversation(2, "Fusco", 4);
    FactHandle fh0 = ksession.insert(c0);
    FactHandle fh1 = ksession.insert(c1);
    FactHandle fh2 = ksession.insert(c2);
    ksession.fireAllRules();
    assertEquals(1, conversations.size());
    conversations.clear();
    c2.setTimeslot(0);
    ksession.update(fh2, c2);
    ksession.fireAllRules();
    c2.setTimeslot(4);
    ksession.update(fh2, c2);
    ksession.fireAllRules();
    conversations.clear();
    c0.setTimeslot(3);
    ksession.update(fh0, c0);
    ksession.fireAllRules();
    c0.setTimeslot(2);
    ksession.update(fh0, c0);
    ksession.fireAllRules();
    conversations.clear();
    c2.setTimeslot(1);
    ksession.update(fh2, c2);
    ksession.fireAllRules();
    assertEquals(1, conversations.size());
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) 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