public void initialize() { try { Resource addTask = ResourceFactory.newClassPathResource(DEFAULT_ADD_TASK_RULES); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(addTask, ResourceType.DRL); kieBases.put(TaskRuleService.ADD_TASK_SCOPE, kbuilder.newKieBase()); } catch (Exception e) { } try { Resource completeTask = ResourceFactory.newClassPathResource(DEFAULT_COMPLETE_TASK_RULES); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(completeTask, ResourceType.DRL); kieBases.put(TaskRuleService.COMPLETE_TASK_SCOPE, kbuilder.newKieBase()); } catch (Exception e) { } }
private static KieBase loadKnowledgeBase(String bpmn2FileName) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource(bpmn2FileName, UnmarshallingOverdueTimersTest.class), ResourceType.BPMN2); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
@Test public void addAssetCsvXlsTest() { doNothing().when(this.kbuilder).add(any(Resource.class), any(ResourceType.class), any(ResourceConfiguration.class)); // This is to verify that 2-argument method is never called doThrow(new IllegalStateException("CSV resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); Resource resource = ResourceFactory.newClassPathResource("/data/resource.csv", getClass()); environment.addAsset(resource, ResourceType.DTABLE); doThrow(new IllegalStateException("XLS resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); environment.addAsset(resource, ResourceType.DTABLE); // control test doThrow(new IllegalStateException("BPMN2 resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class), any(ResourceConfiguration.class)); doNothing().when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); resource = ResourceFactory.newClassPathResource("/data/resource.bpmn2", getClass()); environment.addAsset(resource, ResourceType.BPMN2); }
private KieBase createBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("processinstance/HelloWorld.rf"), ResourceType.DRF); assertFalse(kbuilder.getErrors().toString(), kbuilder.hasErrors()); return kbuilder.newKieBase(); }
@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) ); } }
@Test public void testKnowledgeProviderWithProcesses() { KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); str += " <connections><connection from=\"1\" to=\"2\"/></connections>"; str += "</process>"; builder.add(ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRF ); str += " <connections><connection from=\"1\" to=\"2\"/></connections>"; str += "</process>"; builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRF ); Collection<KiePackage> pkgs = builder.getKnowledgePackages(); assertNotNull( pkgs ); assertEquals( 2, pkgs.size() );
public void loadPackages( Resource res, ResourceType type ) { kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( res, type ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error : errors) { System.err.println( error ); } throw new IllegalArgumentException( "Could not parse knowledge." ); } }
public static KieBase createKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF); kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF); kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages(kbuilder.getKnowledgePackages()); return kbase; }
@Test public void testAgendaFilter() { "</process>"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource(drl.getBytes()), ResourceType.DRL ); kbuilder.add( ResourceFactory.newByteArrayResource(rf.getBytes()), ResourceType.DRF ); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); KieSession ksession = createKieSession(kbuilder.getKnowledgePackages().toArray(new KiePackage[0]));
@Test public void testMultiThreadProcessInstanceWorkItem() throws Exception { final ConcurrentHashMap<Long, Long> workItems = new ConcurrentHashMap<Long, Long>(); final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-MultiThreadServiceProcess.bpmn"), ResourceType.BPMN2 ); KieBase kbase = kbuilder.newKieBase();
@Test public void addAssetXLSDtableWithOwnConfigTest() { Resource resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); DecisionTableConfigurationImpl config = new DecisionTableConfigurationImpl(); config.setInputType(DecisionTableInputType.XLS); String worksheetName = "test-worksheet-name"; config.setWorksheetName(worksheetName); resource.setConfiguration(config); environment.addAsset(resource, ResourceType.DTABLE); verify(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); } }
@Test @SuppressWarnings("unchecked") public void testMarshallingProcessInstancesAndGlobals() throws Exception { "</process>"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newReaderResource(new StringReader(rule)), ResourceType.DRL ); kbuilder.add( ResourceFactory.newReaderResource( new StringReader( process ) ), ResourceType.DRF ); KieSession ksession = createKieSession(kbuilder.getKnowledgePackages().toArray(new KiePackage[0])); ksession.getEnvironment().set("org.jbpm.rule.task.waitstate", true);
private KieBase createKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("processinstance/Subprocess.rf"), ResourceType.DRF); kbuilder.add(ResourceFactory.newClassPathResource("processinstance/HelloWorld.rf"), ResourceType.DRF); return kbuilder.newKieBase(); }
private KieBase createKnowledgeBase(String flowFile) { KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(); conf.setProperty("drools.dialect.java.compiler", "JANINO"); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf); kbuilder.add( new ClassPathResource( flowFile ), ResourceType.DRF ); if(kbuilder.hasErrors()){ StringBuilder errorMessage = new StringBuilder(); for (KnowledgeBuilderError error: kbuilder.getErrors()) { errorMessage.append( error.getMessage() ); errorMessage.append( System.getProperty( "line.separator" ) ); } fail( errorMessage.toString()); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); return kbase; }
@Test public void testActionContextMVEL() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); Reader source = new StringReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "\n" + "</process>"); kbuilder.add(new ReaderResource(source), ResourceType.DRF); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() );
@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 public void addAssetCsvXlsReplaceConfigTest() { // config preserved ArgumentCaptor<ResourceConfiguration> resourceConfigCaptor = ArgumentCaptor.forClass(ResourceConfiguration.class); doThrow(new IllegalStateException("XLS resource not handled correctly!")).when(this.kbuilder).add(any(Resource.class), any(ResourceType.class)); Resource resource = ResourceFactory.newClassPathResource("/data/resource.xls", getClass()); DecisionTableConfigurationImpl config = new DecisionTableConfigurationImpl(); config.setInputType(DecisionTableInputType.CSV); String worksheetName = "test-worksheet-name"; config.setWorksheetName(worksheetName); resource.setConfiguration(config); // do method environment.addAsset(resource, ResourceType.DTABLE); verify(this.kbuilder).add(any(Resource.class), any(ResourceType.class), resourceConfigCaptor.capture()); ResourceConfiguration replacedConfig = resourceConfigCaptor.getValue(); assertTrue("Not a DecisionTableConfiguration, but a " + replacedConfig.getClass().getSimpleName(), replacedConfig instanceof DecisionTableConfiguration); assertEquals("Incorrect file type", DecisionTableInputType.XLS, ((DecisionTableConfiguration) replacedConfig).getInputType()); assertEquals("Worksheet name not preserved", worksheetName, ((DecisionTableConfiguration) replacedConfig).getWorksheetName()); }
private KieBase loadKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ClassPathResource( RF_FILE ), ResourceType.DRF ); KieBase kbase = kbuilder.newKieBase(); return kbase; }
@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"); }