@Test public void testCreationOfSessionWithPersistence() throws ParseException { Account accountClosed = new Account("C"); FactHandle accountOpen_FH = ksession.insert( accountOpen ); FactHandle accountClosed_FH = ksession.insert(accountClosed); OrderEligibility thisYearEligibility = new OrderEligibility(thisYearOrder); FactHandle lye_FH = ksession.insert( lastYearEligibility ); FactHandle tye_FH = ksession.insert(thisYearEligibility); ksession.fireAllRules(); ksession.delete(accountOpen_FH); ksession.delete(accountClosed_FH); ksession.delete(lye_FH); ksession.delete(tye_FH);
@Test public void deleteFactTwiceTest() { FactHandle george = ksession.insert(new Person("George", 19)); QueryResults results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(1L); ksession.delete(george); results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); ksession.delete(george); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); }
final FactHandle[] stringFacts = new FactHandle[objectCount]; for (int i = 0; i < objectCount; i++) { facts[i] = ksession.insert(new AtomicInteger(i)); stringFacts[i] = ksession.insert("test_" + i); ksession.delete(facts[i]); ksession.delete(stringFacts[i]); ksession.fireAllRules();
if (assocationFact == null) { LOG.debug("Inserting alarm association into session: {}", association); final FactHandle fact = getKieSession().insert(association); associationFacts.put(alarmId, new AlarmAssociationAndFact(association, fact)); } else { if (associationAndFact != null) { LOG.debug("Deleting AlarmAssociationAndFact from session: {}", associationAndFact.getAlarmAssociation()); getKieSession().delete(associationAndFact.getFact());
private void checkKieSession(KieSession ksession) { final List<String> events = new ArrayList<String>(); ksession.setGlobal("events", events); // phase 1 Room room1 = new Room("Room 1"); ksession.insert(room1); FactHandle fireFact1 = ksession.insert(new Fire(room1)); ksession.fireAllRules(); assertEquals(1, events.size()); // phase 2 Sprinkler sprinkler1 = new Sprinkler(room1); ksession.insert(sprinkler1); ksession.fireAllRules(); assertEquals(2, events.size()); // phase 3 ksession.delete(fireFact1); ksession.fireAllRules(); assertEquals(5, events.size()); }
@Test public void deleteFactTest() { ksession.insert(new Person("Petr", 25)); FactHandle george = ksession.insert(new Person("George", 19)); QueryResults results = ksession.getQueryResults("informationAboutPersons"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$countOfPerson")).isEqualTo(2L); ksession.delete(george); results = ksession.getQueryResults("informationAboutPersons"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$countOfPerson")).isEqualTo(1L); }
FactHandle[] facts = new FactHandle[objectCount]; for (int i = 0; i < objectCount; i++) { facts[i] = ksession.insert(new Bean(i)); ksession.delete(fact); ksession.fireAllRules();
private void handleNewOrUpdatedAlarmNoLock(OnmsAlarm alarm) { final KieSession kieSession = getKieSession(); // Initialize any related objects that are needed for rule execution Hibernate.initialize(alarm.getRelatedAlarms()); if (alarm.getLastEvent() != null) { // The last event may be null in unit tests Hibernate.initialize(alarm.getLastEvent().getEventParameters()); } final AlarmAndFact alarmAndFact = alarmsById.get(alarm.getId()); if (alarmAndFact == null) { LOG.debug("Inserting alarm into session: {}", alarm); final FactHandle fact = getKieSession().insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } else { // Updating the fact doesn't always give us to expected results so we resort to deleting it // and adding it again instead LOG.trace("Deleting alarm from session (for re-insertion): {}", alarm); kieSession.delete(alarmAndFact.getFact()); // Reinsert LOG.trace("Re-inserting alarm into session: {}", alarm); final FactHandle fact = kieSession.insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
@Test(timeout = 10000 ) public void testPrimeJustificationWithEqualityMode() { String droolsSource = FactHandle handle1 = session.insert( 10 ); FactHandle handle2 = session.insert( 20 ); assertEquals( 4, session.fireAllRules() ); session.delete( handle1 ); assertEquals( 0, session.fireAllRules() );
@Test public void deleteUpdatedFactTest() { FactHandle person = ksession.insert(new Person("George", 18)); ksession.update(person, new Person("John", 21)); QueryResults results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(1L); ksession.delete(person); results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); }
@Override public int evaluate(Message message, boolean retractFacts) { if (kieSession == null) { throw new IllegalStateException("Session already disposed"); } final FactHandle handle = kieSession.insert(message); final int rulesFired = kieSession.fireAllRules(); if (retractFacts) { kieSession.delete(handle); } return rulesFired; }
private void handleNewOrUpdatedAlarmNoLock(OnmsAlarm alarm) { final KieSession kieSession = getKieSession(); // Initialize any related objects that are needed for rule execution Hibernate.initialize(alarm.getAssociatedAlarms()); if (alarm.getLastEvent() != null) { // The last event may be null in unit tests Hibernate.initialize(alarm.getLastEvent().getEventParameters()); } final AlarmAndFact alarmAndFact = alarmsById.get(alarm.getId()); if (alarmAndFact == null) { LOG.debug("Inserting alarm into session: {}", alarm); final FactHandle fact = getKieSession().insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } else { // Updating the fact doesn't always give us to expected results so we resort to deleting it // and adding it again instead LOG.trace("Deleting alarm from session (for re-insertion): {}", alarm); kieSession.delete(alarmAndFact.getFact()); // Reinsert LOG.trace("Re-inserting alarm into session: {}", alarm); final FactHandle fact = kieSession.insert(alarm); alarmsById.put(alarm.getId(), new AlarmAndFact(alarm, fact)); } handleRelatedAlarms(alarm); stateTracker.trackNewOrUpdatedAlarm(alarm.getId(), alarm.getReductionKey()); }
@Test(timeout = 10000 ) public void testRetractNegativeDefeaters() { String drl = "declare Foo end " + "rule Def " + " @Defeater " + "when " + " String() " + "then " + " insertLogical( new Foo(), 'neg' ); " + "end "; KieSession session = getSessionFromString( drl ); FactHandle h = session.insert( "foo" ); session.fireAllRules(); assertEquals( 1, session.getObjects().size() ); session.delete( h ); session.fireAllRules(); assertEquals( 0, session.getObjects().size() ); }
@Test public void deleteUpdatedFactDifferentClassTest() { FactHandle fact = ksession.insert(new Person("George", 18)); Assertions.assertThat(ksession.getObjects()).hasSize(1); Assertions.assertThat(ksession.getObjects().iterator().next()).isInstanceOf(Person.class); ksession.update(fact, new Cheese("Cheddar", 50)); Assertions.assertThat(ksession.getObjects()).hasSize(1); Assertions.assertThat(ksession.getObjects().iterator().next()).isInstanceOf(Cheese.class); ksession.delete(fact); Assertions.assertThat(ksession.getObjects()).isEmpty(); }
protected void handleStatefull(WorkItem workItem, String kieSessionName, Map<String, Object> parameters, Map<String, Object> results) { logger.debug("Evaluating rules in statefull session with name {}", kieSessionName); Map<String, FactHandle> factHandles = new HashMap<String, FactHandle>(); KieSession kieSession = kieContainer.newKieSession(kieSessionName); for (Entry<String, Object> entry : parameters.entrySet()) { String inputKey = workItem.getId() + "_" + entry.getKey(); factHandles.put(inputKey, kieSession.insert(entry.getValue())); } int fired = kieSession.fireAllRules(); logger.debug("{} rules fired", fired); for (Entry<String, FactHandle> entry : factHandles.entrySet()) { Object object = kieSession.getObject(entry.getValue()); String key = entry.getKey().replaceAll(workItem.getId() + "_", ""); results.put(key, object); kieSession.delete(entry.getValue()); } factHandles.clear(); }
@Test public void testPrimeJustificationWithEqualityMode() { String droolsSource = FactHandle handle1 = session.insert( 10 ); FactHandle handle2 = session.insert( 20 ); assertEquals( 4, session.fireAllRules() ); session.delete( handle1 ); assertEquals( 0, session.fireAllRules() );
@Test public void testEventModel() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_EventModel.drl")); final KieSession wm = createKnowledgeSession(kbase); final RuleRuntimeEventListener wmel = mock(RuleRuntimeEventListener.class); wm.addEventListener(wmel); final Cheese stilton = new Cheese("stilton", 15); final FactHandle stiltonHandle = wm.insert(stilton); final ArgumentCaptor<ObjectInsertedEvent> oic = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectInsertedEvent.class); verify(wmel).objectInserted(oic.capture()); assertSame(stiltonHandle, oic.getValue().getFactHandle()); wm.update(stiltonHandle, stilton); final ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> ouc = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectUpdatedEvent.class); verify(wmel).objectUpdated(ouc.capture()); assertSame(stiltonHandle, ouc.getValue().getFactHandle()); wm.delete(stiltonHandle); final ArgumentCaptor<ObjectDeletedEvent> orc = ArgumentCaptor.forClass(ObjectDeletedEvent.class); verify(wmel).objectDeleted(orc.capture()); assertSame(stiltonHandle, orc.getValue().getFactHandle()); }
@Override public void start(BundleContext context) throws Exception { KieServices ks = KieServices.Factory.get(); KieContainer kcont = ks.newKieClasspathContainer(getClass() .getClassLoader()); KieBase kbase = kcont.getKieBase("SimpleRuleKBase"); logger.info("KieSession newKieSession."); ksession = kbase.newKieSession(); ksession.addEventListener(new DebugAgendaEventListener()); ksession.addEventListener(new DebugRuleRuntimeEventListener()); Customer customer = customerPoor(); logger.info("KieSession fireAllRules. {}", customer); FactHandle fh = ksession.insert(customer); ksession.fireAllRules(); ksession.delete(fh); logger.info("After rule {}", customer); customer = customerNormal(); logger.info("KieSession fireAllRules. {}", customer); fh = ksession.insert(customer); ksession.fireAllRules(); ksession.delete(fh); logger.info("After rule {}", customer); customer = customerVip(); logger.info("KieSession fireAllRules. {}", customer); fh = ksession.insert(customer); ksession.fireAllRules(); ksession.delete(fh); logger.info("After rule {}", customer); }
@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 ) ); }