@Bean public KieContainer kieShippingDecisionContainer() { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); kieFileSystem.write(ResourceFactory.newClassPathResource(SHIPPING_DECISION)); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); KieModule kieModule = kieBuilder.getKieModule(); return kieServices.newKieContainer(kieModule.getReleaseId()); }
/** * @param releaseId never null * @param solverConfigResource never null, a classpath resource in the {@link KieContainer} * as defined by {@link ClassLoader#getResource(String)} * @return never null */ public static <Solution_> SolverFactory<Solution_> createFromKieContainerXmlResource( ReleaseId releaseId, String solverConfigResource) { KieContainer kieContainer = KieServices.Factory.get().newKieContainer(releaseId); return createFromKieContainerXmlResource(kieContainer, solverConfigResource); }
@Test public void testDeploymentDescriptorFromKieContainerNoDescInKjar() { DeploymentDescriptorManager manager = new DeploymentDescriptorManager("org.jbpm.domain"); KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); Map<String, String> resources = new HashMap<String, String>(); resources.put("src/main/resources/simple.drl", SIMPLE_DRL); InternalKieModule kJar1 = createKieJar(ks, releaseId, resources); installKjar(releaseId, kJar1); KieContainer kieContainer = ks.newKieContainer(releaseId); assertNotNull(kieContainer); List<DeploymentDescriptor> descriptorHierarchy = DeploymentDescriptorManagerUtil.getDeploymentDescriptorHierarchy(manager, kieContainer); assertNotNull(descriptorHierarchy); assertEquals(1, descriptorHierarchy.size()); DeploymentDescriptor descriptor = descriptorHierarchy.get(0); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, descriptor.getRuntimeStrategy()); assertEquals(0, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); }
@Test public void testDeployWithCustomDeploymentDescriptor() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.jbpm.test.dd", "-kjar-with-dd", "1.0.0"); assertEquals("org.jbpm.persistence.jpa", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.persistence.jpa", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.PER_REQUEST, descriptor.getRuntimeStrategy());
@Test @Ignore("RHPAM-1184, RHDM-601") public void testBuildPercentageAndWhiteSpaceInName() throws Exception { final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("src/main/resources/my rule 100% okay.rdrl", ResourceFactory.newInputStreamResource(this.getClass().getResourceAsStream("my rule 100% okay.rdrl"))); final KieBuilderSetImpl kieBuilderSet = new KieBuilderSetImpl(kieBuilder(ks, kfs)); kieBuilderSet.setFiles(new String[]{"src/main/resources/my rule 100% okay.rdrl"}); final IncrementalResults build = kieBuilderSet.build(); assertEquals(0, build.getAddedMessages().size()); assertEquals(0, build.getRemovedMessages().size()); }
@Test public void testInMemory() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; ReleaseId releaseId = KieServices.Factory.get().newReleaseId( namespace, "memory", "1.0" ); KieModuleModel kProj = createKieProject( namespace ); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generateAll( kfs, namespace, releaseId, kProj ); createAndTestKieContainer( releaseId, createKieBuilder( kfs ), namespace ); }
@Test public void testSetKieContainerTest() { KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.newKieContainer(releaseId); ExecutableRunner<RequestContext> runner = ExecutableRunner.create(0L); ExecutableBuilder f = ExecutableBuilder.create(); f.newApplicationContext("app1") .setKieContainer(kieContainer) .newSession() .insert("h1") .fireAllRules() .getGlobal("outS").out("outS1") .dispose(); RequestContext requestContext = runner.execute(f.getExecutable()); assertEquals("h1", requestContext.getOutputs().get("outS1")); }
@Test public void testSignalStartDynamic() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); ksession = createKnowledgeSession(kbase); // create KieContainer after session was created to make sure no runtime data // will be used during serialization (deep clone) KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kContainer.getKieBase(); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { logger.info("{}", event.getProcessInstance().getId()); list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); // now remove the process from kbase to make sure runtime based listeners are removed from signal manager kbase.removeProcess("Minimal"); assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> { ksession.signalEvent("MySignal", "NewValue"); }) .withMessageContaining("Unknown process ID: Minimal"); // must be still one as the process was removed assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); }
@Test public void testDSLExpansion_MessageImplNPE() throws Exception { final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "dsl-test", "1.0" ); final KieModuleModel kproj = ks.newKieModuleModel(); final KieFileSystem kfs = ks.newKieFileSystem(); kfs.writeKModuleXML( kproj.toXML() ) .writePomXML( generatePomXml( releaseId ) ) .write( "src/main/resources/KBase1/test-dsl.dsl", createDSL() ) .write( "src/main/resources/KBase1/test-rule.dslr", createDRL() ); final KieBuilder kieBuilder = ks.newKieBuilder( kfs ); final List<Message> messages = kieBuilder.buildAll().getResults().getMessages(); if ( !messages.isEmpty() ) { for ( final Message m : messages ) { System.out.println( m.getText() ); } } assertTrue( messages.isEmpty() ); }
@Test public void testNoPomAndProjectXml() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; ReleaseId releaseId = KieServices.Factory.get().getRepository().getDefaultReleaseId(); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); MemoryFileSystem mfs = ((KieFileSystemImpl)kfs).asMemoryFileSystem(); createAndTestKieContainer( releaseId, createKieBuilder( kfs ), null ); }
@Test public void testDeploymentDescriptorFromKieContainer() throws IOException { Map<String, String> resources = new HashMap<String, String>(); KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); String kmoduleString = IOUtils.toString(this.getClass() .getResourceAsStream("/kmodule-custom-wih.xml"), "UTF-8"); resources.put("src/main/resources/META-INF/kmodule.xml", kmoduleString); String processString = IOUtils.toString(this.getClass() .getResourceAsStream("/BPMN2-CustomTask.bpmn2"), "UTF-8"); resources.put("src/main/resources/BPMN2-CustomTask.bpmn2", processString); InternalKieModule kJar1 = createKieJar(ks, releaseId, resources); installKjar(releaseId, kJar1); Properties properties = new Properties(); UserGroupCallback userGroupCallback = new JBossUserGroupCallbackImpl( properties); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory .get().newDefaultBuilder(releaseId) .userGroupCallback(userGroupCallback).get(); manager = RuntimeManagerFactory.Factory.get() .newPerProcessInstanceRuntimeManager(environment); manager.getRuntimeEngine(ProcessInstanceIdContext.get()) .getKieSession().startProcess("customtask"); }
/** * Tests evaluation of a backward chaining family relationships example with * two KieSessions created from the same KieBase. * * KieSessions are constructed using different KieContainer instances. */ @Test public void testFamilyWithTwoKieSessionsFromKieContainer() throws Exception { final KieServices ks = KieServices.Factory.get(); final KieContainer kieContainer = ks.newKieContainer(kieModuleId); final KieSession ksession = kieContainer.newKieSession(); performTestAndDispose(ksession); final KieContainer kieContainerOther = ks.newKieContainer(kieModuleId); final KieSession ksessionOther = kieContainerOther.newKieSession(); performTestAndDispose(ksessionOther); }
@Test public void testInvalidPomXmlContent() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject(namespace); ReleaseId releaseId = KieServices.Factory.get().newReleaseId(namespace, "memory", "1.0"); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); kfs.write( "pom.xml", "xxxx" ); generateKProjectXML( kfs, namespace, kProj ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); KieBuilder kieBuilder = createKieBuilder(kfs); kieBuilder.buildAll(); assertTrue ( kieBuilder.getResults().hasMessages(Level.ERROR) ); }
@Test public void testInvalidProjectXml() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject( namespace ); ReleaseId releaseId = KieServices.Factory.get().newReleaseId( namespace, "memory", "1.0" ); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generatePomXML( kfs, releaseId ); kfs.writeKModuleXML( "xxxx" ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); KieBuilder kieBuilder = createKieBuilder(kfs); kieBuilder.buildAll(); assertTrue( kieBuilder.getResults().hasMessages( Level.ERROR ) ); }
@Test public void testInvalidPomXmlGAV() throws ClassNotFoundException, InterruptedException, IOException { String namespace = "org.kie.test"; KieModuleModel kProj = createKieProject(namespace); ReleaseId releaseId = new ReleaseIdImpl( "", "", "" ); KieFileSystem kfs = KieServices.Factory.get().newKieFileSystem(); generatePomXML( kfs, releaseId ); generateMessageClass( kfs, namespace ); generateRule( kfs, namespace ); MemoryFileSystem mfs = ((KieFileSystemImpl)kfs).asMemoryFileSystem(); KieBuilder kieBuilder = createKieBuilder( kfs ); kieBuilder.buildAll(); assertTrue( kieBuilder.getResults().hasMessages( Level.ERROR ) ); }
private void checkKModule( final String kmodule, final int expectedErrors ) { final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML( releaseId ).writeKModuleXML( kmodule ); final KieBuilder kieBuilder = ks.newKieBuilder( kfs ); kieBuilder.buildAll(); final Results results = kieBuilder.getResults(); assertEquals( expectedErrors, results.getMessages( org.kie.api.builder.Message.Level.ERROR ).size() ); assertNotNull(((InternalKieBuilder) kieBuilder ).getKieModuleIgnoringErrors()); }
@Bean public KieContainer kieManufacturerBasedPricingContainer() { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); kieFileSystem.write(ResourceFactory.newClassPathResource(MANUFACTURER_BASED_PRICING)); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); KieModule kieModule = kieBuilder.getKieModule(); return kieServices.newKieContainer(kieModule.getReleaseId()); }
@Test public void testDeploymentDescriptorFromKieContainer() { DeploymentDescriptorManager manager = new DeploymentDescriptorManager("org.jbpm.domain"); KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); installKjar(releaseId, kJar1); KieContainer kieContainer = ks.newKieContainer(releaseId); assertNotNull(kieContainer); assertEquals(2, descriptorHierarchy.size()); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode());
@Test public void testXStreamUnmarshalCustomObject() { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, "xstream-test", VERSION); File kjar = new File("src/test/resources/kjar/jbpm-module.jar"); File pom = new File("src/test/resources/kjar/pom.xml"); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); assertEquals("pv207.finepayment.Client", processClient.getClass().getName()); assertEquals("Pavel", valueOf(processClient, "name")); assertEquals("true", valueOf(processClient, "exists"));
@Test public void testBuild() throws Exception { final KieServices ks = KieServices.Factory.get(); final KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( "src/main/resources/rule%201.drl", ruleContent() ); final KieBuilderSetImpl kieBuilderSet = new KieBuilderSetImpl( kieBuilder( ks, kfs ) ); kieBuilderSet.setFiles( new String[]{ "src/main/resources/rule%201.drl" } ); final IncrementalResults build = kieBuilderSet.build(); assertEquals( 0, build.getAddedMessages().size() ); assertEquals( 0, build.getRemovedMessages().size() ); }