@Override public Void call() { KieSession ksession = kbase.newKieSession(); assertThat(((InternalWorkingMemory) ksession).getAgenda().isParallelAgenda()).isTrue(); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); insertFacts(ksession, 11); ksession.fireAllRules(); assertThat(ksession.getObjects()).isEmpty(); assertThat(list.size()).isEqualTo(20); return null; } };
@Override public Void call() { KieSession ksession = kBase.newKieSession(); assertThat(((InternalWorkingMemory) ksession).getAgenda().isParallelAgenda()).as("Parallel agenda has to be enabled").isTrue(); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); FactHandle[] fhs = new FactHandle[10]; fhs = insertFacts(ksession, 10); ksession.fireAllRules(); assertThat(list.size()).isEqualTo(10); list.clear(); for (int i = 0; i < 10; i++) { ksession.update( fhs[i], i ); } ksession.fireAllRules(); assertThat(list.size()).isEqualTo(10); return null; } };
private Callable<Void> getMultipleParallelKieSessionsFireUntilHaltCallable(KieBase kBase, boolean asyncInsert) { return () -> { KieSession ksession = kBase.newKieSession(); assertThat(((InternalWorkingMemory) ksession).getAgenda().isParallelAgenda()).isTrue();
@Override public Void call() { KieSession ksession = kBase.newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); insertFacts(ksession, 10); ksession.fireAllRules(); assertEquals(ruleNr, list.size()); return null; } };
@Test(timeout = 40000L) public void testImmediateEventsExpiration() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); sb.append( "import " + MyEvent.class.getCanonicalName() + ";\n" ); sb.append( "declare MyEvent @role( event ) @expires( 1ms ) @timestamp( timestamp ) end\n" ); for (int i = 0; i < 10; i++) { sb.append( getRuleWithEvent( i ) ); } KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( EventProcessingOption.STREAM, MultithreadEvaluationOption.YES ) .newKieSession( sessionConfig, null ); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { ksession.insert( new MyEvent( i, i*2L ) ); } ksession.fireAllRules(); assertEquals(10, list.size()); }
@Test(timeout = 40000L) public void testDisableParallelismWithAgendaGroups() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); sb.append( "rule first\n" + "when\n" + "then\n" + " drools.getKnowledgeRuntime().getAgenda().getAgendaGroup(\"agenda\").setFocus();\n" + "end\n" ); for (int i = 0; i < 10; i++) { sb.append( getRule( i, "", "agenda-group \"agenda\"" ) ); } KieBase kbase = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ); KieSession ksession = kbase.newKieSession(); // multithread evaluation is not allowed when using agenda-groups assertFalse( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(10, list.size()); }
@Test(timeout = 40000L) public void testWithAsyncInsertions() { StringBuilder sb = new StringBuilder( 4000 ); sb.append( "global java.util.List list;\n" ); int ruleNr = 200; for (int i = 0; i < ruleNr; i++) { sb.append( getRule( i, "insertAsync( $i + 10 );\ninsertAsync( \"\" + ($i + 10) );\n" ) ); } KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); StatefulKnowledgeSessionImpl session = (StatefulKnowledgeSessionImpl) ksession; List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { session.insertAsync( i ); session.insertAsync( "" + i ); } ksession.fireAllRules(); assertEquals(ruleNr, list.size()); }
System.out.println("Starting loop " + loop); KieSession ksession = kbase.newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
@Test(timeout = 40000L) public void testDisableParallelismWithSalience() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); for (int i = 0; i < 10; i++) { sb.append( getRule( i, "", "salience " + i ) ); } KieBase kbase = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ); KieSession ksession = kbase.newKieSession(); // multithread evaluation is not allowed when using salience assertFalse( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(10, list.size()); assertEquals( list, Arrays.asList(9, 8, 7, 6, 5, 4, 3, 2, 1, 0) ); }
@Test(timeout = 40000L) public void testWithDeletes() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); for (int i = 1; i < 11; i++) { sb.append( getRule( i, "delete( $i );\n" ) ); } for (int i = 1; i < 11; i++) { sb.append( getNotRule( i ) ); } KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 1; i < 11; i++) { ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(20, list.size()); }
@Test(timeout = 40000L) public void testWithUpdates() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); for (int i = 0; i < 10; i++) { sb.append( getRule( i, "" ) ); } KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); FactHandle[] fhs = new FactHandle[10]; for (int i = 0; i < 10; i++) { fhs[i] = ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(10, list.size()); list.clear(); for (int i = 0; i < 10; i++) { ksession.update( fhs[i], i ); } ksession.fireAllRules(); assertEquals(10, list.size()); }
@Test(timeout = 40000L) public void testWithInsertions() { StringBuilder sb = new StringBuilder( 4000 ); sb.append( "global java.util.List list;\n" ); int ruleNr = 200; for (int i = 0; i < ruleNr; i++) { sb.append( getRule( i, "insert( $i + 10 );\ninsert( \"\" + ($i + 10) );\n" ) ); } KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(ruleNr, list.size()); }
.newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
.newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
@Test(timeout = 40000L) public void test() { StringBuilder sb = new StringBuilder( 400 ); sb.append( "global java.util.List list;\n" ); for (int i = 0; i < 10; i++) { sb.append( getRule( i, "" ) ); } KieBase kbase = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ); EntryPointNode epn = ((InternalKnowledgeBase) kbase).getRete().getEntryPointNode( EntryPointId.DEFAULT ); ObjectTypeNode otn = epn.getObjectTypeNodes().get( new ClassObjectType( Integer.class ) ); assertTrue( ( (CompositePartitionAwareObjectSinkAdapter) otn.getObjectSinkPropagator() ).isHashed() ); KieSession ksession = kbase.newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); List<Integer> list = new DebugList<Integer>(); ksession.setGlobal( "list", list ); for (int i = 0; i < 10; i++) { ksession.insert( i ); ksession.insert( "" + i ); } ksession.fireAllRules(); assertEquals(10, list.size()); }
@Test(timeout = 40000L) public void testDisableParallelismOnSinglePartition() { String drl = "rule R1 when\n" + " $i : Integer( this == 4 )" + " String( length > $i )\n" + "then end \n" + "rule R2 when\n" + " $i : Integer( this == 4 )" + " String( length == $i )\n" + "then end \n" + "rule R3 when\n" + " $i : Integer( this == 4 )" + " String( length < $i )\n" + "then end \n"; KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); InternalWorkingMemory session = (InternalWorkingMemory) ksession; // since there is only one partition the multithread evaluation should be disabled and run with the DefaultAgenda assertFalse( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); }
wm.flushPropagations(); InternalAgenda agenda = ( InternalAgenda ) wm.getAgenda(); InternalAgendaGroup group = (InternalAgendaGroup) agenda.getNextFocus(); AgendaItem item = (AgendaItem) group.remove();
assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
.newKieSession( sessionConfig, null ); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
assertEquals( 1, group1.size() ); RuleAgendaItem ruleItem1 = (RuleAgendaItem) group1.getActivations()[0]; ruleItem1.getRuleExecutor().evaluateNetwork(wm.getAgenda()); assertEquals(3, ruleItem1.getRuleExecutor().getLeftTupleList().size()); ruleItem1.getRuleExecutor().evaluateNetwork(wm.getAgenda()); assertEquals(2, ruleItem1.getRuleExecutor().getLeftTupleList().size()); assertEquals( 1, group2.size() ); RuleAgendaItem ruleItem2 = (RuleAgendaItem) group2.getActivations()[0]; ruleItem2.getRuleExecutor().evaluateNetwork(wm.getAgenda()); assertEquals(3, ruleItem2.getRuleExecutor().getLeftTupleList().size());