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
					
				
							
								
								
									
										43
									
								
								libraries2/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								libraries2/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								libraries2/src/main/resources/META-INF/kmodule.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								libraries2/src/main/resources/META-INF/kmodule.xml
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							| @ -480,6 +480,7 @@ | |||||||
|                  |                  | ||||||
|                 <!-- <module>lagom</module> --> <!-- Not a maven project --> |                 <!-- <module>lagom</module> --> <!-- Not a maven project --> | ||||||
|                 <module>libraries</module> |                 <module>libraries</module> | ||||||
|  |                 <module>libraries2</module> | ||||||
|                 <module>libraries-data</module> |                 <module>libraries-data</module> | ||||||
|                 <module>libraries-apache-commons</module> |                 <module>libraries-apache-commons</module> | ||||||
|                 <module>libraries-security</module> |                 <module>libraries-security</module> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user