15. Process Versioning
Default Behavior:
1. New version created in DB upon each change in BPMN XML
2. New process instances start with the latest version
3. Running process instances continue using the version they started
with
It is normal to have multiple process versions in parallel.
16. Imagine a Process Application
my-application.war
my-process
MyClass.java
task-form.xhtml
some-library.jar
Process Engine
Container
17. Small Changes: Bugfixes or Minor Feature Additions
Add version number to affected artifacts:
my-application.war
my-process
Limitations
MyClass.java
Doesn’t work for libraries
MyClassV2.java
Complete redesign => Version 2.0
task-form.xhtml
task-form-v2.xhtml
some-library.jar
19. Running Multiple Versions in Parallel
Maven Resource Filtering for getting major and minor version
number into BPMN process id (=process definition key)
Process Definition Isolation
Include major and minor version in final name
Class Loader Isolation
Build Helper Plugin to parse version number
20. Alternative: Multiple Apps register for same Process
<process id="my-process" version="1.0" …
my-application-v1.0.war
my-application-v2.0.war
my-process
my-process
MyClass.java
MyClass.java
task-form.xhtml
task-form.xhtml
some-library-v1.0.jar
some-library-v2.0.jar
Process Engine
JPA, EJB, JTA
Container
…
21. Process Application registers for selected Process Versions
<process id="my-process" version="1.0" …
@ProcessApplication
public class MyProcessAppliaction extends EjbProcessApplication {
@PostDeploy
public void registerProcessApplication(
ProcessEngine processEngine,
ProcessApplicationInfo processApplicationInfo
){
// Find Process Version based on XML attribute
…
// Register Process Archive for Process Version
processEngine.getManagementService()
.registerProcessApplication(
processDefinitionDeploymentId,
processApplicationReference);
}
}
22. Now a couple of quickies
We show
different examples
one minute each
with automatic slide changes
23. Liferay
Variant 3
1 Portlet per Task Form
Variant 1
Task Form = simple HTML snippet
load HTML
tasklist.war
pa1.war
generic form
portlet
pa2.war
tasklist.war
Variant 2
1 Form Portlet per Deployment
…
pa1.war
Variant 4
Single Deployment
tasklist.war
generic form
portlet
generic form
portlet
pa1.war
tasklist.war
24. Liferay
Variant 3
1 Portlet per Task Form
Variant 1
Task Form = simple HTML snippet
load HTML
tasklist.war
pa1.war
generic form
portlet
pa2.war
tasklist.war
Variant 2
1 Form Portlet per Deployment
…
pa1.war
Variant 4
Single Deployment
tasklist.war
generic form
portlet
generic form
portlet
<bpmn2:userTask
tasklist.war
id="UserTask_2" name="Task 2„
pa1.war camunda:formKey="TaskFormPortlet,someText,datum" >
25. Liferay
Variant 3
1 Portlet per Task Form
Variant 1
Task Form = simple HTML snippet
load HTML
tasklist.war
pa1.war
generic form
portlet
pa2.war
tasklist.war
Variant 2
1 Form Portlet per Deployment
…
pa1.war
Variant 4
Single Deployment
tasklist.war
generic form
portlet
generic form
portlet
<bpmn2:userTask
tasklist.war
id="UserTask_2" name="Task 2„
pa1.war camunda:formKey="TaskFormPortlet,someText,datum" >
32. Process Engine Plugins e.g. Task Name Beautifier
Dynamically modify a task during its creation in a task list
“Task with terri- bly long name” => “Task with terribly long name”
TaskListener
BpmnParseListener
ProcessEnginePlugin