session.setGlobal("myList", myList); session.startProcess("org.drools.timer"); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size()); session.insert(new Message()); session.fireAllRules(); assertEquals(0, myList.size()); assertEquals(0, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size()); session.dispose();
actionNode ); final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( Arrays.asList(pkgBuilder.getPackages()) ); final KieSession wm = kbase.newKieSession(); wm.setGlobal( "list", list ); ProcessContext processContext = new ProcessContext( ((InternalWorkingMemory) wm).getKnowledgeRuntime() ); ((Action) actionNode.getAction().getMetaData("Action")).execute( processContext );
public ProcessRuntimeImpl(InternalWorkingMemory workingMemory) { TimerService timerService = workingMemory.getTimerService(); if ( !(timerService.getTimerJobFactoryManager() instanceof CommandServiceTimerJobFactoryManager) ) { timerService.setTimerJobFactoryManager( new ThreadSafeTrackableTimeJobFactoryManager() ); } this.kruntime = (InternalKnowledgeRuntime) workingMemory.getKnowledgeRuntime(); initProcessInstanceManager(); initSignalManager(); timerManager = new TimerManager(kruntime, kruntime.getTimerService()); processEventSupport = new ProcessEventSupport(); if (isActive()) { initProcessEventListeners(); initStartTimers(); } initProcessActivationListener(); }
public void deserialize(MarshallerReaderContext inCtx, Timer timer) throws ClassNotFoundException { JBPMMessages.ProcessTimer ptimer = timer.getExtension(JBPMMessages.procTimer); TimerService ts = inCtx.wm.getTimerService(); long processInstanceId = ptimer.getTimer().getProcessInstanceId(); Trigger trigger = ProtobufInputMarshaller.readTrigger(inCtx, ptimer.getTrigger()); TimerInstance timerInstance = ProtobufProcessMarshaller.readTimer(inCtx, ptimer.getTimer()); TimerManager tm = ((InternalProcessRuntime) inCtx.wm.getProcessRuntime()).getTimerManager(); // check if the timer instance is not already registered to avoid duplicated timers if (!tm.getTimerMap().containsKey(timerInstance.getId())) { ProcessJobContext pctx = new ProcessJobContext(timerInstance, trigger, processInstanceId, inCtx.wm.getKnowledgeRuntime(), false); Date date = trigger.hasNextFireTime(); if (date != null) { long then = date.getTime(); long now = pctx.getKnowledgeRuntime().getSessionClock().getCurrentTime(); // overdue timer if (then < now) { trigger = new OverdueTrigger(trigger, pctx.getKnowledgeRuntime()); } } JobHandle jobHandle = ts.scheduleJob(processJob, pctx, trigger); timerInstance.setJobHandle(jobHandle); pctx.setJobHandle(jobHandle); tm.getTimerMap().put(timerInstance.getId(), timerInstance); } } }
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); final KieSession workingMemory = kbase.newKieSession(); processInstance.setKnowledgeRuntime(((InternalWorkingMemory) workingMemory).getKnowledgeRuntime()); processInstance.setId(1234); InternalProcessRuntime processRuntime = ((InternalProcessRuntime) ((InternalWorkingMemory) workingMemory).getProcessRuntime()); processRuntime.getProcessInstanceManager().internalAddProcessInstance(processInstance); TimerManager timerManager = ((InternalProcessRuntime) ((InternalWorkingMemory) workingMemory).getProcessRuntime()).getTimerManager(); TimerInstance timer = new TimerInstance(); timerManager.registerTimer(timer, processInstance);
@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()); }
KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL ) .build( MultithreadEvaluationOption.YES ) .newKieSession(); assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() ); ksession.halt(); done.countDown(); }} ); ksession.setGlobal( "list", list ); ksession.insert( i ); ksession.insert( "" + i );
"end\n"; final KieBase kbase = new KieHelper().addContent( drl, ResourceType.DRL ).build(); final KieSession ksession = kbase.newKieSession(); final EntryPointNode epn = ( (InternalKnowledgeBase) ksession.getKieBase() ).getRete().getEntryPointNodes().values().iterator().next(); final ObjectTypeNode otn = epn.getObjectTypeNodes().values().iterator().next(); final LeftInputAdapterNode lian = (LeftInputAdapterNode)otn.getObjectSinkPropagator().getSinks()[0]; final ReactiveFromNode from3 = (ReactiveFromNode)from2.getSinkPropagator().getSinks()[0]; final BetaMemory betaMemory = ( (InternalWorkingMemory) ksession ).getNodeMemory(from3).getBetaMemory(); ksession.setGlobal( "list", list ); debbie.addToy( new Toy( "doll" ) ); ksession.insert( bob ); ksession.fireAllRules(); Iterator<LeftTuple> it = tupleMemory.iterator(); for ( LeftTuple next = it.next(); next != null; next = it.next() ) { final Object obj = next.getFactHandle().getObject(); Assertions.assertThat(obj == charlie || obj == debbie).isTrue();
"end\n"; KieBase kbase = new KieHelper().addContent( str, ResourceType.DRL ).build(); KieSession ksession = kbase.newKieSession(); ksession.fireAllRules(); FactHandle fh = ksession.insert( "this" ); ksession.fireAllRules(); ksession.delete( fh ); ksession.fireAllRules(); LeftInputAdapterNode.LiaNodeMemory memory = (LeftInputAdapterNode.LiaNodeMemory) wm.getNodeMemory( liaNode ); TupleSets<LeftTuple> stagedLeftTuples = memory.getSegmentMemory().getStagedLeftTuples(); assertNull( stagedLeftTuples.getDeleteFirst() );
@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; } };
session.setGlobal("myList", myList); params.put("x", 300); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.drools.timer", params); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size()); session.dispose();
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(Arrays.asList(builder.getPackages())); session = kbase.newKieSession(conf, null); SessionPseudoClock clock = ( SessionPseudoClock) session.getSessionClock(); clock.advanceTime( 300, TimeUnit.MILLISECONDS ); session.setGlobal("myList", myList); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.drools.timer"); assertEquals(0, myList.size()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(2, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size()); clock = ( SessionPseudoClock) session.getSessionClock();
ksession.setGlobal( "list", list ); mark.setCheese( brie ); wm.flushPropagations(); final InternalAgenda agenda = (InternalAgenda) ksession.getAgenda(); 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() ); ksession.update( brieHandle, brie ); assertEquals( 1, group1.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());
@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 testPopulatedSingleRuleNoSharingWithSubnetworkAtStart() throws Exception { InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); wm.insert(new A(1)); wm.insert(new A(2)); wm.insert(new D(1)); wm.insert(new E(1)); wm.insert(new C(2)); wm.fireAllRules(); kbase.addPackages( buildKnowledgePackage("r1", " A() not( B() and C() ) D() E()\n") ); List list = new ArrayList(); wm.setGlobal("list", list); wm.fireAllRules(); assertEquals(2, list.size() ); assertEquals( "r1", ((Match)list.get(0)).getRule().getName() ); assertEquals( "r1", ((Match)list.get(1)).getRule().getName() ); kbase.removeRule("org.kie", "r1"); wm.insert(new A(1)); wm.fireAllRules(); assertEquals(2, list.size() ); }
@Test public void testSingleEmptyLhs() throws Exception { KieBase kbase = buildKnowledgeBase(" "); InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession()); ObjectTypeNode aotn = getObjectTypeNode(kbase, InitialFactImpl.class ); LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0]; RuleTerminalNode rtn = ( RuleTerminalNode) liaNode.getSinkPropagator().getSinks()[0]; wm.insert( new LinkingTest.A() ); wm.flushPropagations(); // LiaNode and Rule are in same segment LiaNodeMemory liaMem = ( LiaNodeMemory ) wm.getNodeMemory( liaNode ); SegmentMemory smem = liaMem.getSegmentMemory(); assertEquals( liaNode, smem.getRootNode() ); assertEquals( rtn, smem.getTipNode() ); assertNull( smem.getNext() ); assertNull( smem.getFirst() ); }
session.setGlobal("myList", myList); ((InternalWorkingMemory) session).getProcessRuntime().signalEvent("myEvent", "Jack"); session.fireAllRules(); assertEquals(2, myList.size()); assertEquals("Jack", myList.get(0));
@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() ); }
builder.addRuleFlow(source); KieSession session = createKieSession(builder.getPackages()); ProcessInstance processInstance = session.startProcess("org.drools.core.event"); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); processInstance = session.getProcessInstance(processInstance.getId()); ((InternalWorkingMemory) session).getProcessRuntime().signalEvent("MyEvent", "MyValue"); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
@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() ); }