diff --git a/jbpm-flow-builder/src/main/java/org/jbpm/compiler/ProcessBuilderImpl.java b/jbpm-flow-builder/src/main/java/org/jbpm/compiler/ProcessBuilderImpl.java index 2730744ff4..ad93178d3a 100644 --- a/jbpm-flow-builder/src/main/java/org/jbpm/compiler/ProcessBuilderImpl.java +++ b/jbpm-flow-builder/src/main/java/org/jbpm/compiler/ProcessBuilderImpl.java @@ -15,15 +15,6 @@ */ package org.jbpm.compiler; -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.xml.parsers.FactoryConfigurationError; - import org.drools.compiler.compiler.BaseKnowledgeBuilderResultImpl; import org.drools.compiler.compiler.Dialect; import org.drools.compiler.compiler.DialectCompiletimeRegistry; @@ -38,7 +29,6 @@ import org.drools.compiler.lang.descr.ProcessDescr; import org.drools.compiler.rule.builder.dialect.java.JavaDialect; import org.drools.core.RuntimeDroolsException; -import org.drools.core.io.internal.InternalResource; import org.jbpm.compiler.xml.ProcessSemanticModule; import org.jbpm.compiler.xml.XmlProcessReader; import org.jbpm.compiler.xml.processes.RuleFlowMigrator; @@ -56,7 +46,6 @@ import org.jbpm.process.core.validation.ProcessValidationError; import org.jbpm.process.core.validation.ProcessValidator; import org.jbpm.process.core.validation.ProcessValidatorRegistry; -import org.jbpm.process.instance.ProcessRuntimeImpl; import org.jbpm.workflow.core.Constraint; import org.jbpm.workflow.core.impl.ConnectionRef; import org.jbpm.workflow.core.impl.DroolsConsequenceAction; @@ -80,6 +69,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.parsers.FactoryConfigurationError; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * A ProcessBuilder can be used to build processes based on XML files * containing a process definition. @@ -108,7 +105,7 @@ public List getErrors() { } public void buildProcess(final Process process, Resource resource) { - if ( resource != null && ((InternalResource) resource).hasURL()) { + if ( resource != null ) { ((org.jbpm.process.core.Process) process).setResource(resource); } boolean hasErrors = false; @@ -260,11 +257,12 @@ private void processNodes( } } - public List addProcessFromXml(final Resource resource) throws IOException { + public List addProcessFromXml(final Resource resource) throws IOException { Reader reader = resource.getReader(); PackageBuilderConfiguration configuration = packageBuilder.getPackageBuilderConfiguration(); XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules(), packageBuilder.getRootClassLoader() ); - + + List processes = null; try { String portRuleFlow = System.getProperty( "drools.ruleflow.port", "false" ); Reader portedReader = null; @@ -273,7 +271,7 @@ public List addProcessFromXml(final Resource res } else { portedReader = reader; } - List processes = xmlReader.read(portedReader); + processes = xmlReader.read(portedReader); if (processes != null) { // it is possible an xml file could not be parsed, so we need to // stop null pointers @@ -293,7 +291,7 @@ public List addProcessFromXml(final Resource res reader.close(); } - return this.errors; + return processes; } diff --git a/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/test/KieScannerTest.java b/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/test/KieScannerTest.java new file mode 100644 index 0000000000..2107dab153 --- /dev/null +++ b/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/test/KieScannerTest.java @@ -0,0 +1,216 @@ +package org.jbpm.kie.services.test; + +import org.drools.compiler.kie.builder.impl.InternalKieModule; +import org.drools.core.util.FileManager; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.kie.api.KieServices; +import org.kie.api.builder.KieBuilder; +import org.kie.api.builder.KieFileSystem; +import org.kie.api.builder.KieScanner; +import org.kie.api.builder.ReleaseId; +import org.kie.api.builder.model.KieBaseModel; +import org.kie.api.builder.model.KieModuleModel; +import org.kie.api.builder.model.KieSessionModel; +import org.kie.api.conf.EqualityBehaviorOption; +import org.kie.api.conf.EventProcessingOption; +import org.kie.api.runtime.KieContainer; +import org.kie.api.runtime.KieSession; +import org.kie.api.runtime.conf.ClockTypeOption; +import org.kie.api.runtime.process.ProcessInstance; +import org.kie.scanner.MavenRepository; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.kie.scanner.MavenRepository.getMavenRepository; + +@Ignore +public class KieScannerTest { + + private FileManager fileManager; + private File kPom; + + private KieServices ks = KieServices.Factory.get(); + private ReleaseId releaseId = ks.newReleaseId("org.kie", "scanner-test", "1.0-SNAPSHOT"); + + @Before + public void setUp() throws Exception { + this.fileManager = new FileManager(); + this.fileManager.setUp(); + kPom = createKPom(fileManager, releaseId); + } + + @After + public void tearDown() throws Exception { + this.fileManager.tearDown(); + } + + @Test + public void testKScanner() throws Exception { + List results = new ArrayList(); + Map params = new HashMap(); + params.put("results", results); + + InternalKieModule kJar1 = createJbpmKieJar("Hello"); + KieContainer kieContainer = ks.newKieContainer(releaseId); + + MavenRepository repository = getMavenRepository(); + repository.deployArtifact(releaseId, kJar1, kPom); + + // create a ksesion and check it works as expected + KieSession ksession = kieContainer.newKieSession("KSession1"); + ProcessInstance processInstance = ksession.startProcess("Minimal", params); + assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED); + assertEquals(1, results.size()); + assertEquals("Hello", results.get(0)); + results.clear(); + + InternalKieModule kJar2 = createJbpmKieJar("Morning"); + + repository.deployArtifact(releaseId, kJar2, kPom); + + KieScanner scanner = ks.newKieScanner(kieContainer); + scanner.scanNow(); + + // create a ksesion and check it works as expected + KieSession ksession2 = kieContainer.newKieSession("KSession1"); + ProcessInstance processInstance2 = ksession2.startProcess("Minimal", params); + assertTrue(processInstance2.getState() == ProcessInstance.STATE_COMPLETED); + assertEquals(1, results.size()); + assertEquals("Morning", results.get(0)); + results.clear(); + + ks.getRepository().removeKieModule(releaseId); + } + + private InternalKieModule createJbpmKieJar(String message) { + KieFileSystem kfs = createKieFileSystemWithKProject(ks, true); + kfs.writePomXML(getPom(releaseId)); + + String file = "org/test/process.bpmn2"; + kfs.write("src/main/resources/KBase1/" + file, createBPMN(message)); + + KieBuilder kieBuilder = ks.newKieBuilder(kfs); + assertTrue(kieBuilder.buildAll().getResults().getMessages().isEmpty()); + + return (InternalKieModule) kieBuilder.getKieModule(); + } + + private String createBPMN(String message) { + return " \n" + + "\n" + + "\n" + + " \n" + + "\n" + + " \n" + + " \n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + + " \n" + + " \n" + + " \n" + + "\n" + + " \n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + + ""; + } + + protected String getPom(ReleaseId releaseId, ReleaseId... dependencies) { + String pom = + "\n" + + "\n" + + " 4.0.0\n" + + "\n" + + " " + releaseId.getGroupId() + "\n" + + " " + releaseId.getArtifactId() + "\n" + + " " + releaseId.getVersion() + "\n" + + "\n"; + if (dependencies != null && dependencies.length > 0) { + pom += "\n"; + for (ReleaseId dep : dependencies) { + pom += "\n"; + pom += " " + dep.getGroupId() + "\n"; + pom += " " + dep.getArtifactId() + "\n"; + pom += " " + dep.getVersion() + "\n"; + pom += "\n"; + } + pom += "\n"; + } + pom += ""; + return pom; + } + + protected File createKPom(FileManager fileManager, ReleaseId releaseId, ReleaseId... dependencies) throws IOException { + File pomFile = fileManager.newFile("pom.xml"); + fileManager.write(pomFile, getPom(releaseId, dependencies)); + return pomFile; + } + + protected KieFileSystem createKieFileSystemWithKProject(KieServices ks, boolean isdefault) { + KieModuleModel kproj = ks.newKieModuleModel(); + + KieBaseModel kieBaseModel1 = kproj.newKieBaseModel("KBase1").setDefault(isdefault) + .setEqualsBehavior(EqualityBehaviorOption.EQUALITY) + .setEventProcessingMode(EventProcessingOption.STREAM); + + KieSessionModel ksession1 = kieBaseModel1.newKieSessionModel("KSession1").setDefault(isdefault) + .setType(KieSessionModel.KieSessionType.STATEFUL) + .setClockType(ClockTypeOption.get("realtime")); + + KieFileSystem kfs = ks.newKieFileSystem(); + kfs.writeKModuleXML(kproj.toXML()); + return kfs; + } +}