BAEL-379 A Guide to jBPM with Java (#6619)
* BAEL-379 A Guide to jBPM with Java * BAEL-379 * BAEL-379 A Guide to jBPM with Java * BAEL-379 A Guide to jBPM with Java * BAEL-379 A Guide to jBPM with Java * BAEL-379 A Guide to jBPM with Java
This commit is contained in:
parent
6003634ad5
commit
8a9cfe80e9
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>libraries2</artifactId>
|
||||
<name>libraries2</name>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung</groupId>
|
||||
<artifactId>parent-modules</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<jbpm.version>6.0.0.Final</jbpm.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jboss-public-repository-group</id>
|
||||
<name>JBoss Public Repository Group</name>
|
||||
<url>http://repository.jboss.org/nexus/content/groups/public/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>never</updatePolicy>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>daily</updatePolicy>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jbpm</groupId>
|
||||
<artifactId>jbpm-test</artifactId>
|
||||
<version>${jbpm.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,19 @@
|
|||
package com.baeldung.jbpm;
|
||||
|
||||
import org.kie.api.runtime.manager.Context;
|
||||
import org.kie.internal.runtime.manager.context.EmptyContext;
|
||||
|
||||
import com.baeldung.jbpm.engine.WorkflowEngine;
|
||||
import com.baeldung.jbpm.engine.WorkflowEngineImpl;
|
||||
|
||||
public class WorkflowProcessMain {
|
||||
|
||||
public static void main(String[] args) {
|
||||
WorkflowEngine workflowEngine = new WorkflowEngineImpl();
|
||||
String processId = "com.baeldung.bpmn.helloworld";
|
||||
String kbaseId = "kbase";
|
||||
String persistenceUnit = "org.jbpm.persistence.jpa";
|
||||
Context<String> initialContext = EmptyContext.get();
|
||||
workflowEngine.runjBPMEngineForProcess(processId, initialContext, kbaseId, persistenceUnit);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.baeldung.jbpm.engine;
|
||||
|
||||
import org.kie.api.runtime.manager.Context;
|
||||
import org.kie.api.runtime.process.ProcessInstance;
|
||||
|
||||
public interface WorkflowEngine {
|
||||
|
||||
public ProcessInstance runjBPMEngineForProcess(String processId, Context<String> initialContext, String kbaseId, String persistenceUnit);
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package com.baeldung.jbpm.engine;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.Persistence;
|
||||
|
||||
import org.jbpm.test.JBPMHelper;
|
||||
import org.kie.api.KieBase;
|
||||
import org.kie.api.KieServices;
|
||||
import org.kie.api.runtime.KieContainer;
|
||||
import org.kie.api.runtime.KieSession;
|
||||
import org.kie.api.runtime.manager.Context;
|
||||
import org.kie.api.runtime.manager.RuntimeEngine;
|
||||
import org.kie.api.runtime.manager.RuntimeEnvironment;
|
||||
import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder;
|
||||
import org.kie.api.runtime.manager.RuntimeManager;
|
||||
import org.kie.api.runtime.manager.RuntimeManagerFactory;
|
||||
import org.kie.api.runtime.process.ProcessInstance;
|
||||
|
||||
public class WorkflowEngineImpl implements WorkflowEngine {
|
||||
|
||||
@Override
|
||||
public ProcessInstance runjBPMEngineForProcess(String processId, Context<String> initialContext, String kbaseId, String persistenceUnit) {
|
||||
RuntimeManager manager = null;
|
||||
RuntimeEngine engine = null;
|
||||
ProcessInstance pInstance = null;
|
||||
try {
|
||||
KieBase kbase = getKieBase(kbaseId);
|
||||
manager = createJBPMRuntimeManager(kbase, persistenceUnit);
|
||||
engine = manager.getRuntimeEngine(initialContext);
|
||||
pInstance = executeProcessInstance(processId, manager, initialContext, engine);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (manager != null && engine != null)
|
||||
manager.disposeRuntimeEngine(engine);
|
||||
System.exit(0);
|
||||
}
|
||||
return pInstance;
|
||||
}
|
||||
|
||||
private ProcessInstance executeProcessInstance(String processId, RuntimeManager manager, Context<String> initialContext, RuntimeEngine engine) {
|
||||
KieSession ksession = engine.getKieSession();
|
||||
ProcessInstance pInstance = ksession.startProcess(processId);
|
||||
return pInstance;
|
||||
}
|
||||
|
||||
private KieBase getKieBase(String kbaseId) {
|
||||
KieServices ks = KieServices.Factory.get();
|
||||
KieContainer kContainer = ks.getKieClasspathContainer();
|
||||
KieBase kbase = kContainer.getKieBase(kbaseId);
|
||||
return kbase;
|
||||
}
|
||||
|
||||
private RuntimeManager createJBPMRuntimeManager(KieBase kbase, String persistenceUnit) {
|
||||
JBPMHelper.startH2Server();
|
||||
JBPMHelper.setupDataSource();
|
||||
EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit);
|
||||
RuntimeEnvironmentBuilder runtimeEnvironmentBuilder = RuntimeEnvironmentBuilder.Factory.get()
|
||||
.newDefaultBuilder();
|
||||
RuntimeEnvironment runtimeEnvironment = runtimeEnvironmentBuilder.entityManagerFactory(emf)
|
||||
.knowledgeBase(kbase)
|
||||
.get();
|
||||
return RuntimeManagerFactory.Factory.get()
|
||||
.newSingletonRuntimeManager(runtimeEnvironment);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
|
||||
<kbase name="kbase" packages="com.baeldung.process" />
|
||||
</kmodule>
|
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions id="Definition"
|
||||
targetNamespace="http://www.jboss.org/drools"
|
||||
typeLanguage="http://www.java.com/javaTypes"
|
||||
expressionLanguage="http://www.mvel.org/2.0"
|
||||
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
|
||||
xmlns:g="http://www.jboss.org/drools/flow/gpd"
|
||||
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
|
||||
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
|
||||
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
|
||||
xmlns:tns="http://www.jboss.org/drools">
|
||||
|
||||
<process processType="Private" isExecutable="true" id="com.baeldung.bpmn.helloworld" name="HelloWorld Process" tns:packageName="com.baeldung.bpmn.process" >
|
||||
|
||||
<!-- nodes -->
|
||||
<scriptTask id="_jbpm-unique-1" name="HelloWorld" scriptFormat="http://www.java.com/java" >
|
||||
<script>System.out.println("Hello World");</script>
|
||||
</scriptTask>
|
||||
<endEvent id="_jbpm-unique-2" name="End" >
|
||||
<terminateEventDefinition />
|
||||
</endEvent>
|
||||
<startEvent id="_jbpm-unique-0" name="Start" isInterrupting="false"/>
|
||||
|
||||
<!-- connections -->
|
||||
<sequenceFlow id="_jbpm-unique-0-_jbpm-unique-1" sourceRef="_jbpm-unique-0" targetRef="_jbpm-unique-1" />
|
||||
<sequenceFlow id="_jbpm-unique-1-_jbpm-unique-2" sourceRef="_jbpm-unique-1" targetRef="_jbpm-unique-2" />
|
||||
|
||||
</process>
|
||||
|
||||
<bpmndi:BPMNDiagram>
|
||||
<bpmndi:BPMNPlane bpmnElement="com.baeldung.bpmn.helloworld" >
|
||||
<bpmndi:BPMNShape bpmnElement="_jbpm-unique-1" >
|
||||
<dc:Bounds x="119" y="44" width="111" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_jbpm-unique-2" >
|
||||
<dc:Bounds x="272" y="43" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_jbpm-unique-0" >
|
||||
<dc:Bounds x="28" y="44" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="_jbpm-unique-0-_jbpm-unique-1" >
|
||||
<di:waypoint x="52" y="68" />
|
||||
<di:waypoint x="174" y="68" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="_jbpm-unique-1-_jbpm-unique-2" >
|
||||
<di:waypoint x="174" y="68" />
|
||||
<di:waypoint x="296" y="67" />
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
|
||||
</definitions>
|
|
@ -0,0 +1,52 @@
|
|||
package com.baeldung.jbpm;
|
||||
|
||||
import org.jbpm.test.JbpmJUnitBaseTestCase;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.kie.api.runtime.KieSession;
|
||||
import org.kie.api.runtime.manager.RuntimeEngine;
|
||||
import org.kie.api.runtime.manager.RuntimeManager;
|
||||
import org.kie.api.runtime.process.ProcessInstance;
|
||||
import org.kie.internal.runtime.manager.context.ProcessInstanceIdContext;
|
||||
|
||||
public class WorkflowEngineIntegrationTest extends JbpmJUnitBaseTestCase {
|
||||
|
||||
private String[] triggeredNodesArray = { "Start", "HelloWorld", "End" };
|
||||
private RuntimeManager manager = null;
|
||||
private RuntimeEngine runtimeEngine = null;
|
||||
private KieSession ksession = null;
|
||||
private ProcessInstance processInstance = null;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
manager = createRuntimeManager(Strategy.SINGLETON, "manager", "com/baeldung/process/helloworld.bpmn");
|
||||
runtimeEngine = getRuntimeEngine(ProcessInstanceIdContext.get());
|
||||
ksession = runtimeEngine.getKieSession();
|
||||
processInstance = ksession.startProcess("com.baeldung.bpmn.helloworld");
|
||||
}
|
||||
|
||||
@After
|
||||
public void cleanup() {
|
||||
manager.disposeRuntimeEngine(runtimeEngine);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenProcessInstance_whenExecutionCompleted_thenVerifyNodesExecutionOrder() {
|
||||
assertNodeTriggered(processInstance.getId(), triggeredNodesArray);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenProcessInstance_whenExecutionCompleted_thenVerifyKnowledgeSessionId() {
|
||||
int ksessionID = ksession.getId();
|
||||
runtimeEngine = getRuntimeEngine(ProcessInstanceIdContext.get(processInstance.getId()));
|
||||
ksession = runtimeEngine.getKieSession();
|
||||
assertEquals(ksessionID, ksession.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenProcessInstance_whenExecutionCompleted_thenVerifyProcessInstanceStatus() {
|
||||
assertProcessInstanceCompleted(processInstance.getId(), ksession);
|
||||
assertTrue("ProcessInstance completed with status 2", processInstance.getState() == 2);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue