@Test public void testRuleFlowGroup() throws Exception { KieBase kbase = loadKnowledgeBase("ruleflowgroup.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.insert( "Test" ); ksession.fireAllRules(); assertEquals( 0, list.size() ); ((InternalAgenda)ksession.getAgenda()).activateRuleFlowGroup("Group1"); ksession.fireAllRules(); assertEquals( 1, list.size() ); }
workingMemory.setGlobal( "list", list ); workingMemory.addEventListener( listener ); InternalAgenda agenda = (InternalAgenda) workingMemory.getAgenda(); workingMemory.fireAllRules(); agenda.evaluateEagerList(); agenda.sizeOfRuleFlowGroup( "flowgroup-1" ) ); agenda.getAgendaGroup( "MAIN" ).size() ); activations.size() ); ((InternalAgenda) workingMemory.getAgenda()).clearAndCancelRuleFlowGroup( "flowgroup-1" ); agenda.getAgendaGroup( "MAIN" ).size() ); assertEquals( 0, agenda.sizeOfRuleFlowGroup( "flowgroup-1" ) );
if (ruleFlowGroup != null && !agenda.getRuleFlowGroup(ruleFlowGroup).isActive()) { agenda.getRuleFlowGroup(ruleFlowGroup).setAutoDeactivate(false); agenda.activateRuleFlowGroup(ruleFlowGroup, getProcessInstance().getId(), getUniqueId()); .isRuleActiveInRuleFlowGroup(getRuleFlowGroupName(), rule, getProcessInstance().getId()); if (isActive) { triggerCompleted();
kBase = (InternalKnowledgeBase) map.get( "x" ); KieSession session = kBase.newKieSession(); kBase.addPackages(kpkgs); session.setGlobal( "list", new ArrayList() ); session.insert( bob ); ((InternalWorkingMemory)session).flushPropagations(); org.kie.api.definition.rule.Rule[] rules = (org.kie.api.definition.rule.Rule[]) kBase.getPackage("org.drools.compiler.test").getRules().toArray(new org.kie.api.definition.rule.Rule[0] ); session.getObjects().size()); assertEquals( bob, IteratorToList.convert( session.getObjects().iterator() ).get( 0 ) ); ((InternalAgenda) session.getAgenda()).agendaSize() );
final KieSession ksession = kbase.newKieSession(); ksession.setGlobal( "results", res ); ksession.addEventListener( agendaEventListener ); FactHandle fact1 = ksession.insert( new Person( "Mario", 38 ) ); ( (InternalAgenda) ksession.getAgenda() ).activateRuleFlowGroup( "test" ); ksession.fireAllRules(); assertEquals( 1, res.size() ); FactHandle fact2 = ksession.insert( new Person( "Mario", 48 ) ); try { ( (InternalAgenda) ksession.getAgenda() ).activateRuleFlowGroup( "test" ); ksession.fireAllRules(); fail( "should throw an Exception" ); FactHandle fact3 = ksession.insert( new Person( "Mario", 38 ) ); ( (InternalAgenda) ksession.getAgenda() ).activateRuleFlowGroup( "test" ); ksession.fireAllRules(); assertEquals( 1, res.size() );
KieSession ksession = kbase.newKieSession(); try { final Person a = new Person( "a" ); final Cheese cheese = new Cheese( "brie", 1 ); ksession.setGlobal( "cheese", cheese ); ksession.fireAllRules(); ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession(ksession, true); Collection list = ksession.getObjects(); assertEquals( "i was not asserted by not a => i.", 1, ((InternalAgenda)((StatefulKnowledgeSessionImpl) ksession).getAgenda()).agendaSize());
kbase.addPackages( Collections.singleton( kpkg ) ); kbase = map.get( "x" ); final org.kie.api.definition.rule.Rule[] rules = kbase.getKiePackages().iterator().next().getRules().toArray( new org.kie.api.definition.rule.Rule[0] ); assertEquals( 4, rules.length ); rules[3].getName() ); KieSession ksession = kbase.newKieSession(); ksession.setGlobal( "list", new ArrayList() ); ksession.insert( bob ); ksession.getFactCount() ); assertEquals( bob, ksession.getObjects().iterator().next() ); ((InternalAgenda) ksession.getAgenda()).agendaSize() ); ksession.fireAllRules();
@Test(timeout=10000) public void testRuleFlowGroupInActiveMode() throws Exception { KieBase kbase = loadKnowledgeBase("ruleflowgroup.drl"); final KieSession ksession = kbase.newKieSession(); ksession.setGlobal( "list", list ); ksession.addEventListener(new org.kie.api.event.rule.DefaultAgendaEventListener() { @Override public void afterMatchFired(AfterMatchFiredEvent event) { ksession.insert( "Test" ); assertEquals( 0, list.size() ); ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("Group1");
KieSession ksession = getSerialisedStatefulKnowledgeSession( kBase.newKieSession(), true ); ksession.setGlobal( "results", new ArrayList() ); ksession.insert( new Message() ); ksession = getSerialisedStatefulKnowledgeSession( ksession, true ); List results = (List) ksession.getGlobal( "results" ); ksession.insert( new Message() ); ((InternalAgenda) ksession.getAgenda()).agendaSize() ); ksession.fireAllRules(); assertEquals( 5,
@Test(timeout=10000) public void testJBRULES_2206() { KieBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); ((RuleBaseConfiguration) config).setRuleBaseUpdateHandler( null ); InternalKnowledgeBase kbase = (InternalKnowledgeBase) getKnowledgeBase( config ); KieSession session = createKnowledgeSession( kbase ); AgendaEventListener ael = mock( AgendaEventListener.class ); session.addEventListener( ael ); for ( int i = 0; i < 5; i++ ) { session.insert( new Cheese() ); } kbase.addPackages( loadKnowledgePackages( "test_JBRULES_2206_1.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // two matching rules were added, so 2 activations should have been created verify( ael, times( 2 ) ).matchCreated(any(MatchCreatedEvent.class)); int fireCount = session.fireAllRules(); // both should have fired assertEquals( 2, fireCount ); kbase.addPackages( loadKnowledgePackages( "test_JBRULES_2206_2.drl" )); ((InternalAgenda) session.getAgenda()).evaluateEagerList(); // one rule was overridden and should activate verify( ael, times( 3 ) ).matchCreated(any(MatchCreatedEvent.class)); fireCount = session.fireAllRules(); // that rule should fire again assertEquals( 1, fireCount ); session.dispose(); }
"\n"; KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL) .build() .newKieSession(); ksession.insert( new String( "" + i ) ); ((InternalWorkingMemory) ksession).flushPropagations(); ((InternalAgenda) ksession.getAgenda()).evaluateEagerList(); list ); ksession.fireAllRules();
pkg.addRule( rule ); kbase.addPackages( Collections.singleton(pkg) ); KieSession ksession = kbase.newKieSession(); final List agendaList = new ArrayList(); final AgendaEventListener agendaEventListener = new AgendaEventListener() { ksession.addEventListener( agendaEventListener ); assertEquals( 1, ksession.getAgendaEventListeners().size() ); FactHandle cheddarHandle = ksession.insert( cheddar ); InternalAgenda agenda = (InternalAgenda) ksession.getAgenda(); agenda.evaluateEagerList(); cheddar); agenda.evaluateEagerList();
ksession.setGlobal( "list", list ); mark.setCheese( brie ); wm.flushPropagations(); final AgendaGroup group1 = agenda.getAgendaGroup( "group1" ); agenda.setFocus( group1 ); assertEquals( 1, group1.size() ); RuleAgendaItem ruleItem1 = (RuleAgendaItem) group1.getActivations()[0]; ruleItem1.getRuleExecutor().evaluateNetwork(wm.getAgenda()); assertEquals(3, ruleItem1.getRuleExecutor().getLeftTupleList().size()); agenda.fireNextItem( null, 0, 0 ); assertEquals( 1, group1.size() ); assertEquals( 2, ruleItem1.getRuleExecutor().getLeftTupleList().size() ); AgendaGroup group2 = agenda.getAgendaGroup( "group2" ); agenda.setFocus( group2); assertEquals( 1, group2.size() ); RuleAgendaItem ruleItem2 = (RuleAgendaItem) group2.getActivations()[0]; assertEquals(3, ruleItem2.getRuleExecutor().getLeftTupleList().size()); agenda.fireNextItem( null, 0, 0 ); assertEquals( 1, group2.size() ); assertEquals( 2, ruleItem2.getRuleExecutor().getLeftTupleList().size() );
@Test public void testLockOnActive() throws Exception { KieBase kbase = loadKnowledgeBase("test_LockOnActive.drl"); KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal( "list", list ); // AgendaGroup "group1" is not active, so should receive activation final Cheese brie12 = new Cheese( "brie", 12 ); ksession.insert( brie12 ); ((InternalWorkingMemory)ksession).flushPropagations(); InternalAgenda agenda = ((InternalAgenda) ksession.getAgenda()); final AgendaGroup group1 = agenda.getAgendaGroup( "group1" ); assertEquals( 1, group1.size() ); ksession.getAgenda().getAgendaGroup("group1").setFocus( ); // AgendaqGroup "group1" is now active, so should not receive activations final Cheese brie10 = new Cheese( "brie", 10 ); ksession.insert( brie10 ); assertEquals( 1, group1.size() ); final Cheese cheddar20 = new Cheese( "cheddar", 20 ); ksession.insert( cheddar20 ); final AgendaGroup group2 = agenda.getAgendaGroup( "group1" ); assertEquals( 1, group2.size() ); agenda.setFocus(group2); final Cheese cheddar17 = new Cheese( "cheddar", 17 ); ksession.insert( cheddar17 ); assertEquals( 1, group2.size() ); }
@Test public void testAccumulate2() throws Exception { String str = "package org.drools\n" + "\n" + "import org.drools.compiler.Message\n" + "\n" + "rule MyRule\n" + " when\n" + " Number( intValue >= 5 ) from accumulate ( m: Message( ), count( m ) )\n" + " then\n" + " System.out.println(\"Found messages\");\n" + "end\n"; KieBase kBase = loadKnowledgeBaseFromString(str); KieSession ksession = kBase.newKieSession(); ksession = getSerialisedStatefulKnowledgeSession( ksession, true ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ksession.insert( new Message() ); ((InternalWorkingMemory)ksession).flushPropagations(); assertEquals( 1, ((InternalAgenda) ksession.getAgenda()).agendaSize() ); }
String decision = resolveVariable(ruleSetNode.getDecision()); DMNRuntime runtime = ((KieSession) kruntime).getKieRuntime(DMNRuntime.class); DMNModel dmnModel = runtime.getModel(namespace, model); if (dmnModel == null) { addRuleSetListener(); ((InternalAgenda) getProcessInstance().getKnowledgeRuntime().getAgenda()) .activateRuleFlowGroup(getRuleFlowGroup(), getProcessInstance().getId(), getUniqueId()); .activateRuleFlowGroup(getRuleFlowGroup(), getProcessInstance().getId(), getUniqueId()); int fired = ((KieSession) getProcessInstance().getKnowledgeRuntime()).fireAllRules(fireLimit); if (fired == fireLimit) { throw new RuntimeException("Fire rule limit reached " + fireLimit + ", limit can be set via system property " + FIRE_RULE_LIMIT_PROPERTY
final StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kBase.newStatefulKnowledgeSession(); final InternalAgenda agenda = (InternalAgenda) ksession.getAgenda(); buildContext); final RuleFlowGroup ruleFlowGroup0 = agenda.getRuleFlowGroup("rule-flow-group-0"); context0, ksession); agenda.unstageActivations(); agenda.activateRuleFlowGroup("rule-flow-group-0"); assertEquals(1, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertEquals(1, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertEquals(0, ruleFlowGroup0.size()); assertEquals(0, agenda.agendaSize());
public void activateRuleFlowGroup(String activateRuleFlowGroupName) { // mark does not want to make the following methods public, so for now we have to downcast ((InternalAgendaGroup) ksession.getAgenda().getRuleFlowGroup(activateRuleFlowGroupName)).setAutoDeactivate(false); // same for the following method ((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup(activateRuleFlowGroupName); }
final RuleFlowGroup ruleFlowGroup0 = agenda.getRuleFlowGroup("rule-flow-group-0"); assertTrue(ruleFlowGroup0.isAutoDeactivate()); ruleFlowGroup0.setAutoDeactivate(false); agenda.activateRuleFlowGroup("rule-flow-group-0"); assertEquals(1, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertEquals(0, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertFalse(ruleFlowGroup0.isActive()); context0, ksession); agenda.unstageActivations(); agenda.activateRuleFlowGroup("rule-flow-group-0"); assertEquals(1, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertEquals(0, ruleFlowGroup0.size()); ksession.executeQueuedActionsForRete(); assertEquals(0, ruleFlowGroup0.size()); agenda.fireNextItem(null, 0, -1); assertFalse(ruleFlowGroup0.isActive());
private void evaluateEagerList(KieSession ksession) { ((InternalWorkingMemory) ksession).flushPropagations(); ((InternalAgenda) ksession.getAgenda()).evaluateEagerList(); }