@Test public void testSubProcess() throws Exception { KieSession workingMemory = createStatefulKnowledgeSessionFromRule(true); ProcessInstance processInstance = ( ProcessInstance ) workingMemory.startProcess("com.sample.ruleflow"); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); assertEquals(2, workingMemory.getProcessInstances().size()); workingMemory.insert(new Person()); workingMemory.fireAllRules(); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); assertEquals(0, workingMemory.getProcessInstances().size()); }
context.loadTaskVariables(task); kieSession.insert(task); kieSession.fireAllRules(); Set<Assignment> assignments = new TreeSet<>(); String queryName = System.getProperty("org.jbpm.task.assignment.rules.query"); if (queryName != null) { logger.debug("Query {} is going to be used to retrieve results from working memory", queryName); QueryResults results = kieSession.getQueryResults(queryName); results.forEach(row -> assignments.add((Assignment)row.get("assignment"))); } else { logger.debug("No query defined, retrieving all facts of type Assignment"); Collection<Assignment> results = (Collection<Assignment>) kieSession.getObjects(new ClassObjectFilter(Assignment.class)); kieSession.dispose(); logger.debug("KieSession in BusinessRule disposed");
@Test public void testSingleActionNode() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ClassPathResource( "ActionNodeTest.xml", ActionNodeTest.class ), ResourceType.DRF ); KieBase kbase = kbuilder.newKieBase(); KieSession ksession = kbase.newKieSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal( "list", list ); ksession.startProcess( "process name" ); assertEquals( 1, list.size() ); assertEquals( "action node was here", list.get(0) ); } }
@Override public void afterProblemFactAdded(Object problemFact) { if (kieSession.getFactHandle(problemFact) != null) { throw new IllegalArgumentException("The problemFact (" + problemFact + ") was already added to this ScoreDirector.\n" + "Maybe that specific instance is already in the " + PlanningSolution.class.getSimpleName() + "'s problem fact members (" + getSolutionDescriptor().getProblemFactMemberAndProblemFactCollectionMemberNames() + ").\n" + "Maybe use before/afterProblemPropertyChanged() instead of before/afterProblemFactAdded()."); } kieSession.insert(problemFact); super.afterProblemFactAdded(problemFact); }
@Test public void testGetListeners() { // JBRULES-3378 KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); if (kbuilder.hasErrors()) { throw new RuntimeException(kbuilder.getErrors().toString()); } KieSession ksession = kbuilder.newKieBase().newKieSession(); ksession.getAgendaEventListeners(); ksession.getProcessEventListeners(); ksession.getRuleRuntimeEventListeners(); ksession.dispose(); } }
private void testScenarioBindString(final String drl, final String... expectedResults) { final KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build() .newKieSession(); final List<String> list = new ArrayList<>(); ksession.setGlobal( "list", list ); final Man bob = new Man( "Bob", 40 ); final Woman alice = new Woman( "Alice", 38 ); ksession.insert(bob); ksession.insert(alice); ksession.fireAllRules(); Assertions.assertThat(list).containsExactlyInAnyOrder(expectedResults); }
private void checkPrice( String drl, double expectedPrice ) { KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); sessionConfig.setOption( ClockTypeOption.get( ClockType.PSEUDO_CLOCK.getId() ) ); KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build( EventProcessingOption.STREAM ) .newKieSession( sessionConfig, null ); List<Double> list = new ArrayList<Double>(); ksession.setGlobal( "list", list ); ksession.insert( "RHT" ); ksession.insert( new StockTick( 1L, "RHT", 10.0 ) ); ksession.insert( new StockTick( 2L, "RHT", 10.0 ) ); ksession.insert( new StockTick( 3L, "ABC", 20.0 ) ); ksession.insert( new StockTick( 4L, "RHT", 10.0 ) ); ksession.insert( new StockTick( 5L, "XYZ", 20.0 ) ); ksession.insert( new StockTick( 6L, "XYZ", 20.0 ) ); ksession.insert( new StockTick( 7L, "RHT", 10.0 ) ); ksession.fireAllRules(); assertEquals( 1, list.size() ); assertEquals( expectedPrice, (double)list.get(0), 0.01 ); }
private void testJitting(final String drl) { final KieBase kbase = loadKnowledgeBaseFromString(drl); final KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("mark", 37)); ksession.insert(new Person("mario", 38)); ksession.fireAllRules(); ksession.dispose(); }
rule += "end"; KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); builder.add( new ReaderResource( new StringReader( rule )), ResourceType.DRL ); " </connections>\n" + "</process>"; builder.add( new ReaderResource( new StringReader( process )), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( builder.getKnowledgePackages() ); KieSession session = kbase.newKieSession(); TestWorkItemHandler handler = new TestWorkItemHandler(); session.getWorkItemManager().registerWorkItemHandler("Human Task", handler); session.setGlobal( "list", list ); session.insert( p ); ProcessInstance processInstance = ( ProcessInstance ) session.startProcess("org.test.ruleflow"); assertEquals(1, session.getProcessInstances().size()); assertEquals("org.test.ruleflow2", processInstance.getProcessId()); session.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), null);
"</process>"); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newReaderResource(source), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); KieSession ksession = createSession(kbase); final List<WorkItem> workItems = new ArrayList<WorkItem>(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession.startProcess("org.drools.humantask"); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); int state = processInstance.getState(); switch(state) { case ProcessInstance.STATE_ABORTED: processInstanceInfoMadeInThisTest.getProcessInstanceByteArray().length > 0); assertEquals(1, workItems.size()); ksession.getWorkItemManager().completeWorkItem(workItems.get(0).getId(), null); ProcessInstance pi = ksession.getProcessInstance(processInstance.getId()); assertNull(pi);
@Test public void compensationViaEventSubProcess() throws Exception { KieSession ksession = createKnowledgeSession("compensation/BPMN2-Compensation-EventSubProcess.bpmn2"); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "0"); ProcessInstance processInstance = ksession.startProcess("CompensationEventSubProcess", params); assertProcessInstanceActive(processInstance.getId(), ksession); ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItem().getId(), null); assertProcessVarValue(processInstance, "x", "1"); }
@Test public void testSplitWithProcessInstanceConstraint2() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<process xmlns=\"http://drools.org/drools-5.0/process\"" + Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages(); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kpkgs ); KieSession ksession = kbase.newKieSession(); List<Long> list = new ArrayList<Long>(); ksession.setGlobal("list", list); ksession.insert(john); ksession.insert(jane); ksession.startProcess("org.jbpm.process-split", params); ksession.startProcess("org.jbpm.process-split", params); ksession.startProcess("org.jbpm.process-split", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance1.getState()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance2.getState()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance3.getState()); assertEquals(2, list.size());
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-MultiThreadServiceProcess-Task.bpmn", getClass()), ResourceType.BPMN2); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ksession.addEventListener(listener); ksession.startProcess("user-task"); } catch (Throwable t) { t.printStackTrace(); for (WorkItem item : items) { try { ksession.getWorkItemManager().completeWorkItem(item.getId(), null); } catch (Throwable t) { t.printStackTrace();
@Test public void testRuleFlowUpgrade() throws Exception { final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); // Set the system property so that automatic conversion can happen System.setProperty( "drools.ruleflow.port", "true" ); kbuilder.add( ResourceFactory.newClassPathResource("ruleflow.drl", ExecutionFlowControlTest.class), ResourceType.DRL); kbuilder.add( ResourceFactory.newClassPathResource("ruleflow40.rfm", ExecutionFlowControlTest.class), ResourceType.DRF); KieBase kbase = kbuilder.newKieBase(); final KieSession ksession = kbase.newKieSession(); final List list = new ArrayList(); ksession.setGlobal("list", list); ksession.fireAllRules(); assertEquals(0, list.size()); final ProcessInstance processInstance = ksession.startProcess("0"); assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() ); assertEquals( 4, list.size() ); assertEquals( "Rule1", list.get( 0 ) ); list.subList(1,2).contains( "Rule2" ); list.subList(1,2).contains( "Rule3" ); assertEquals( "Rule4", list.get( 3 ) ); assertEquals( ProcessInstance.STATE_COMPLETED, processInstance.getState() ); // Reset the system property so that automatic conversion should not happen System.setProperty("drools.ruleflow.port", "false"); }
@Test(timeout=10000) public void testTimerBoundaryEvent() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 1); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventDuration.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); countDownListener.waitTillCompleted(); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test public void testWorkItemImmediateCompletion() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "\n" + "</process>"); kbuilder.add( ResourceFactory.newReaderResource( source ), ResourceType.DRF ); Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages(); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kpkgs ); KieSession ksession = kbase.newKieSession(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("UserName", "John Doe"); parameters.put("Person", person); WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess("org.drools.actions", parameters); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
@Test(timeout=10000) public void testTimerBoundaryEventCycle2() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 3); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventCycle2.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); }
@Test public void testNullConstraint() throws Exception { final KieBase kbase = loadKnowledgeBase("null_constraint.drl"); KieSession session = kbase.newKieSession(); final List foo = new ArrayList(); session.setGlobal("messages", foo); final PersonInterface p1 = new Person(null, "food", 40); final Primitives p2 = new Primitives(); p2.setArrayAttribute(null); session.insert(p1); session.insert(p2); session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, true); session.fireAllRules(); assertEquals(2, ((List) session.getGlobal("messages")).size()); }
@Test public void testCallActivity() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.bpmn2"), ResourceType.BPMN2); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.bpmn2"), ResourceType.BPMN2); if (!kbuilder.getErrors().isEmpty()) { for (KnowledgeBuilderError error : kbuilder.getErrors()) { logger.error("{}", error); } throw new IllegalArgumentException("Errors while parsing knowledge base"); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); KieSession ksession = createKnowledgeSession(kbase); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "oldValue"); ProcessInstance processInstance = ksession.startProcess("ParentProcess", params); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED); assertThat(((WorkflowProcessInstance) processInstance).getVariable("y")).isEqualTo("new value"); }
@Test public void testEvaluationProcess3() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess3.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler()); Map<String, Object> params = new HashMap<String, Object>(); params.put("employee", "john2"); ProcessInstance processInstance = ksession.startProcess("Evaluation", params); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED); }