SlideShare a Scribd company logo
Gain
more freedom
when
migrating
from Camunda
7 to 8
Photo by Alex Radelich on Unsplash
Stephan Pelikan
senior_developer@phactum
7.x 8.x
• Embedded engine
• Various APIs to implement tasks
Java native, External Task (polling)
• One TX for business code and Camunda
• Process variables
• JUEL
• etc.
• Separate service
• One API for tasks
Worker (push)
• Eventual consistency
• JSON data object
• FEEL
• etc.
Image from Tenor
7.x 8.x
Time
Now
Completed Camunda projects
Ongoing Camunda projects
Upcoming Camunda projects Start using C8
C7
C8
C8
C7 ???
???
C7
C7
C7
https://docs.camunda.io/docs/guides/migrating-from-camunda-platform-7/
Camunda
8
API
Start a workflow
Complete a
service task
Correlate an
incoming message
Register and
complete
user tasks
Camunda
7
API
Camunda
7
API
Camunda
7
Adapter
Camunda
8
API
Start a workflow
Complete a
service task
Correlate an
incoming message
Register and
complete
user tasks
Camunda
7
API
Abstract
Business
Processing
API
Camunda
8
Adapter
Abstract
Business
Processing
API
7.x 8.x
Time
Now Start using C8
C7
C8
C8
C7 ???
???
C7
C7
C7
Upcoming
Projects
Current Project
Old Processing
Projects
• If there is a new business requirement
• If component will live longer than
Camunda 7 support period
Future
Projects
• Clean architecture
• Focus on business requirements
• Not all developers need to know
about Camunda details
• Decouple development from
point in time when to start
using Camunda 8
Maintenance of adapters necessary Centralized maintenance for
multiple projects
Cons / Pros
Clean architecture
Burden to implement
(especially for Camunda beginners)
Only features available in C7 & C8
Not a „no change“ approach
Decouple development
Simplify your software
& scale your teams easier
Cons / Pros
Clean architecture
Burden to implement
(especially for Camunda beginners)
Only features available in C7 & C8
Maintenance of adapters necessary
Decouple development
Centralized maintenance for
multiple projects
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
Not a „no change“ approach Simplify your software
& scale your teams easier
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
<dependency>
<groupId>org.camunda.community.vanillabp</groupId>
<artifactId>camunda7-spring-boot-adapter</artifactId>
</dependency>
<dependency>
<groupId>io.vanillabp</groupId>
<artifactId>spi-for-java</artifactId>
</dependency>
pom.xml
Interfaces, Enums &
Annotations
SPI Binding,
BPMN deployment
<dependency>
<groupId>org.camunda.community.vanillabp</groupId>
<artifactId>camunda8-spring-boot-adapter</artifactId>
</dependency>
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
pom.xml
c7/demo.bpmn
BPMN process ID: DemoWorkflow
Expression: ${processTask}
Condition: ${not success}
Expression: ${logError}
Expression: ${demoWorkflow.processTask}
Delegate-Expression: ${demoWorkflowProcessTask}
Expression: ${demoWorkflow.processTask}
Delegate-Expression: ${demoWorkflowProcessTask}
DemoAggregate.java
DemoWorkflow.java
1 @WorkflowService
2 @Service
3 public class DemoWorkflow {
4
5 }
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
ID: DemoWorkflow
Expression: ${processTask}
Condition: ${not success}
Expression: ${logError}
pom.xml
c7/demo.bpmn
1 @Entity @Table(name = "DEMO")
2 @Getter @Setter @AllArgsConstructor
3 public class DemoAggregate {
4 @Id @Column(name = "ID")
5 private String id;
6 @Column(name = "SUCCESS")
7 private boolean success;
8 }
start a workflow
1 @WorkflowService(workflowAggregateClass = DemoAggregate.class)
2 @Service
3 public class DemoWorkflow {
4
5 }
1 @WorkflowService(workflowAggregateClass = DemoAggregate.class)
2 @Service
3 public class DemoWorkflow {
4 @Autowired
5 private ProcessService<DemoAggregate> processService;
6
7 public void startDemo(String id) throws Exception {
8 var demo = new DemoAggregate(id, false);
10 processService.startWorkflow(demo);
11 }
12 }
1 @WorkflowService(workflowAggregateClass = DemoAggregate.class)
2 @Service
3 public class DemoWorkflow {
4 @Autowired
5 private ProcessService<DemoAggregate> processService;
6
7 public void startDemo(String id) throws Exception {
8 var demo = new DemoAggregate(id, false);
10 processService.startWorkflow(demo);
11 }
12
13 @WorkflowTask
14 public void processTask(DemoAggregate demo) {
15 demo.setSuccess(true);
16 }
17 }
1 @WorkflowService(workflowAggregateClass = DemoAggregate.class)
2 @Service
3 public class DemoWorkflow {
4 @Autowired
5 private ProcessService<DemoAggregate> processService;
6
7 public void startDemo(String id) throws Exception {
8 var demo = new DemoAggregate(id, false);
10 processService.startWorkflow(demo);
11 }
12
13 @WorkflowTask
14 public void processTask(DemoAggregate demo) {
15 demo.setSuccess(true);
16 }
17
18 @WorkflowTask(taskDefinition = "logError")
19 public void logErrorOnFailure() {
20 logger.info("error");
21 }
22 }
DemoAggregate.java
DemoWorkflow.java
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
pom.xml
Caused by: java.lang.IllegalStateException: No Spring Data repository defined for demo.DemoAggregate
at io.vanillabp.springboot.utils.JpaSpringDataUtil.getRepository(JpaSpringDataUtil.java:62)
Validation on booting the application
1 @Repository
2 public interface DemoAggregateRepository
3 extends JpaRepository<DemoAggregate, String> {
4
5 }
DemoAggregateRepository.java
Caused by: java.lang.RuntimeException: No public method annotated with @WorkflowTask is matching
task having task-definition 'processTask' of process 'DemoWorkflow'. Tested for:
at io.vanillabp.springboot.adapter.TaskWiringBase.wireTask(TaskWiringBase.java:199)
Caused by: java.lang.RuntimeException: You need to autowire
'io.vanillabp.spi.process.ProcessService<demo.DemoAggregate>' in your code to be able to start
workflows!
at io.vanillabp.camunda7.wiring.Camunda7TaskWiring.lambda$1(Camunda7TaskWiring.java:81)
c7/demo.bpmn
DemoAggregate.java
DemoWorkflow.java
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
pom.xml
DemoAggregateRepository.java
c7/demo.bpmn
Task-definition: processTask
Condition: =not(success)
Task-definition: logError
c7/demo.bpmn
Expression: ${processTask}
Condition: ${not success}
Expression: ${logError}
Point to directory „c8/“ instead of „c7/“ in Spring config
Switch the Maven dependency to „camunda8-spring-boot-adapter“
c8/demo.bpmn
BPMN process ID: DemoWorkflow
Life demo
https://github.com/phactum/vanillabp-demo
VanillaBP Abstraction
Wiring of BPMN and services Process variables
Service-like tasks Receive-like tasks
Asynchronous tasks User tasks
Multi-instance tasks BPMN errors
Deployment of BPMN BPMN process versions
run C7 processes next to C8 processes
run C7 processes instances next to C8 processes
instances of the same workflow
BPMN version-specific tasks
Toppings
run C7 processes or C8 processes
using the same code ✔
JakartaEE 👋
Photo by Josephina Kolpachnikof on Unsplash
Support async tasks for C7
based on external tasks
VanillaBP
Business processing at its best taste
[va·​nil·​la] … simple, plain, no frills
https://github.com/camunda-community-hub/vanillabp-camunda7-adapter
https://github.com/camunda-community-hub/vanillabp-camunda8-adapter
stephan.pelikan@phactum.at
https://github.com/vanillabp/simple-vanillabp-demo
https://www.vanillabp.io
https://github.com/vanillabp
comprehensive
documentation

More Related Content

PPTX
Salesforce Intro
PDF
Angular
PDF
Salesforce Training For Beginners | Salesforce Tutorial | Salesforce Training...
PDF
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
PDF
apidays LIVE Australia 2021 - Composing a Headless and Composable Commerce Ar...
PDF
REST API Best (Recommended) Practices
PPTX
Microservice vs. Monolithic Architecture
PDF
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
Salesforce Intro
Angular
Salesforce Training For Beginners | Salesforce Tutorial | Salesforce Training...
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
apidays LIVE Australia 2021 - Composing a Headless and Composable Commerce Ar...
REST API Best (Recommended) Practices
Microservice vs. Monolithic Architecture
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...

What's hot (20)

PPTX
Arquitetura orientada a eventos em ambientes complexos tdc
PPTX
Camunda BPM 7.13 Webinar
PPTX
Splunk: How to Design, Build and Map IT Services
PDF
AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...
PPTX
ASP.NET Core MVC + Web API with Overview
PPTX
How to Execute a Successful API Strategy
PPTX
Introduction to Web Technology Stacks
PPTX
Introduction to appDynamics
PPTX
Introducción a microservicios
PPTX
Build RESTful API Using Express JS
PPTX
Salesforce sales cloud solutions
PPTX
Introduction to Microservices
PPTX
SpringBoot with MyBatis, Flyway, QueryDSL
PDF
Microservices with Java, Spring Boot and Spring Cloud
PDF
Whats New in Integration What's New in IBM Integration Bus and IIB on Cloud
PPT
Salesforce Presentation
PDF
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
PPSX
SOLID Principles and The Clean Architecture
PPTX
Introduction to microservices
PPTX
Dynatrace
Arquitetura orientada a eventos em ambientes complexos tdc
Camunda BPM 7.13 Webinar
Splunk: How to Design, Build and Map IT Services
AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...
ASP.NET Core MVC + Web API with Overview
How to Execute a Successful API Strategy
Introduction to Web Technology Stacks
Introduction to appDynamics
Introducción a microservicios
Build RESTful API Using Express JS
Salesforce sales cloud solutions
Introduction to Microservices
SpringBoot with MyBatis, Flyway, QueryDSL
Microservices with Java, Spring Boot and Spring Cloud
Whats New in Integration What's New in IBM Integration Bus and IIB on Cloud
Salesforce Presentation
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
SOLID Principles and The Clean Architecture
Introduction to microservices
Dynatrace
Ad

Similar to Gain more freedom when migrating from Camunda 7 to 8.pdf (20)

PPTX
Building a Utilities Portal with Magnolia 5 & SAP
PDF
Cloud Native Serverless Java — Orkhan Gasimov
PDF
Creando microservicios con Java, Microprofile y TomEE - Baranquilla JUG
PPT
Google App Engine for Java
PDF
Workshop: Building Vaadin add-ons
PDF
PhoneGap:你应该知道的12件事
PPTX
How and why we evolved a legacy Java web application to Scala... and we are s...
PDF
Affordable Workflow Options for APEX
PPTX
How to Improve Performance Testing Using InfluxDB and Apache JMeter
PDF
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
PPT
Developing Java Web Applications
PDF
JavaFX Enterprise (JavaOne 2014)
PDF
Sprint 17
PDF
Java Fx Ajaxworld Rags V1
PDF
Practical Dynamic Actions - Intro
PPT
The Web Framework Dream Team
PDF
Maxim Salnikov - Service Worker: taking the best from the past experience for...
PDF
Phone gap 12 things you should know
PDF
NSA for Enterprises Log Analysis Use Cases
PDF
Dropwizard and Friends
Building a Utilities Portal with Magnolia 5 & SAP
Cloud Native Serverless Java — Orkhan Gasimov
Creando microservicios con Java, Microprofile y TomEE - Baranquilla JUG
Google App Engine for Java
Workshop: Building Vaadin add-ons
PhoneGap:你应该知道的12件事
How and why we evolved a legacy Java web application to Scala... and we are s...
Affordable Workflow Options for APEX
How to Improve Performance Testing Using InfluxDB and Apache JMeter
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
Developing Java Web Applications
JavaFX Enterprise (JavaOne 2014)
Sprint 17
Java Fx Ajaxworld Rags V1
Practical Dynamic Actions - Intro
The Web Framework Dream Team
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Phone gap 12 things you should know
NSA for Enterprises Log Analysis Use Cases
Dropwizard and Friends
Ad

Recently uploaded (20)

PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
top salesforce developer skills in 2025.pdf
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
System and Network Administraation Chapter 3
PPTX
history of c programming in notes for students .pptx
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
L1 - Introduction to python Backend.pptx
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
AI in Product Development-omnex systems
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
How to Choose the Right IT Partner for Your Business in Malaysia
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
top salesforce developer skills in 2025.pdf
How to Migrate SBCGlobal Email to Yahoo Easily
System and Network Administraation Chapter 3
history of c programming in notes for students .pptx
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Design an Analysis of Algorithms I-SECS-1021-03
How Creative Agencies Leverage Project Management Software.pdf
L1 - Introduction to python Backend.pptx
CHAPTER 2 - PM Management and IT Context
Odoo POS Development Services by CandidRoot Solutions
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
AI in Product Development-omnex systems

Gain more freedom when migrating from Camunda 7 to 8.pdf

  • 1. Gain more freedom when migrating from Camunda 7 to 8 Photo by Alex Radelich on Unsplash Stephan Pelikan senior_developer@phactum
  • 2. 7.x 8.x • Embedded engine • Various APIs to implement tasks Java native, External Task (polling) • One TX for business code and Camunda • Process variables • JUEL • etc. • Separate service • One API for tasks Worker (push) • Eventual consistency • JSON data object • FEEL • etc. Image from Tenor
  • 3. 7.x 8.x Time Now Completed Camunda projects Ongoing Camunda projects Upcoming Camunda projects Start using C8 C7 C8 C8 C7 ??? ??? C7 C7 C7
  • 5. Camunda 8 API Start a workflow Complete a service task Correlate an incoming message Register and complete user tasks Camunda 7 API Camunda 7 API
  • 6. Camunda 7 Adapter Camunda 8 API Start a workflow Complete a service task Correlate an incoming message Register and complete user tasks Camunda 7 API Abstract Business Processing API Camunda 8 Adapter
  • 7. Abstract Business Processing API 7.x 8.x Time Now Start using C8 C7 C8 C8 C7 ??? ??? C7 C7 C7 Upcoming Projects Current Project Old Processing Projects • If there is a new business requirement • If component will live longer than Camunda 7 support period Future Projects • Clean architecture • Focus on business requirements • Not all developers need to know about Camunda details • Decouple development from point in time when to start using Camunda 8
  • 8. Maintenance of adapters necessary Centralized maintenance for multiple projects Cons / Pros Clean architecture Burden to implement (especially for Camunda beginners) Only features available in C7 & C8 Not a „no change“ approach Decouple development Simplify your software & scale your teams easier
  • 9. Cons / Pros Clean architecture Burden to implement (especially for Camunda beginners) Only features available in C7 & C8 Maintenance of adapters necessary Decouple development Centralized maintenance for multiple projects VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills Not a „no change“ approach Simplify your software & scale your teams easier
  • 10. VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills <dependency> <groupId>org.camunda.community.vanillabp</groupId> <artifactId>camunda7-spring-boot-adapter</artifactId> </dependency> <dependency> <groupId>io.vanillabp</groupId> <artifactId>spi-for-java</artifactId> </dependency> pom.xml Interfaces, Enums & Annotations SPI Binding, BPMN deployment <dependency> <groupId>org.camunda.community.vanillabp</groupId> <artifactId>camunda8-spring-boot-adapter</artifactId> </dependency>
  • 11. VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills pom.xml c7/demo.bpmn BPMN process ID: DemoWorkflow Expression: ${processTask} Condition: ${not success} Expression: ${logError} Expression: ${demoWorkflow.processTask} Delegate-Expression: ${demoWorkflowProcessTask} Expression: ${demoWorkflow.processTask} Delegate-Expression: ${demoWorkflowProcessTask}
  • 12. DemoAggregate.java DemoWorkflow.java 1 @WorkflowService 2 @Service 3 public class DemoWorkflow { 4 5 } VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills ID: DemoWorkflow Expression: ${processTask} Condition: ${not success} Expression: ${logError} pom.xml c7/demo.bpmn 1 @Entity @Table(name = "DEMO") 2 @Getter @Setter @AllArgsConstructor 3 public class DemoAggregate { 4 @Id @Column(name = "ID") 5 private String id; 6 @Column(name = "SUCCESS") 7 private boolean success; 8 } start a workflow 1 @WorkflowService(workflowAggregateClass = DemoAggregate.class) 2 @Service 3 public class DemoWorkflow { 4 5 } 1 @WorkflowService(workflowAggregateClass = DemoAggregate.class) 2 @Service 3 public class DemoWorkflow { 4 @Autowired 5 private ProcessService<DemoAggregate> processService; 6 7 public void startDemo(String id) throws Exception { 8 var demo = new DemoAggregate(id, false); 10 processService.startWorkflow(demo); 11 } 12 } 1 @WorkflowService(workflowAggregateClass = DemoAggregate.class) 2 @Service 3 public class DemoWorkflow { 4 @Autowired 5 private ProcessService<DemoAggregate> processService; 6 7 public void startDemo(String id) throws Exception { 8 var demo = new DemoAggregate(id, false); 10 processService.startWorkflow(demo); 11 } 12 13 @WorkflowTask 14 public void processTask(DemoAggregate demo) { 15 demo.setSuccess(true); 16 } 17 } 1 @WorkflowService(workflowAggregateClass = DemoAggregate.class) 2 @Service 3 public class DemoWorkflow { 4 @Autowired 5 private ProcessService<DemoAggregate> processService; 6 7 public void startDemo(String id) throws Exception { 8 var demo = new DemoAggregate(id, false); 10 processService.startWorkflow(demo); 11 } 12 13 @WorkflowTask 14 public void processTask(DemoAggregate demo) { 15 demo.setSuccess(true); 16 } 17 18 @WorkflowTask(taskDefinition = "logError") 19 public void logErrorOnFailure() { 20 logger.info("error"); 21 } 22 }
  • 13. DemoAggregate.java DemoWorkflow.java VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills pom.xml Caused by: java.lang.IllegalStateException: No Spring Data repository defined for demo.DemoAggregate at io.vanillabp.springboot.utils.JpaSpringDataUtil.getRepository(JpaSpringDataUtil.java:62) Validation on booting the application 1 @Repository 2 public interface DemoAggregateRepository 3 extends JpaRepository<DemoAggregate, String> { 4 5 } DemoAggregateRepository.java Caused by: java.lang.RuntimeException: No public method annotated with @WorkflowTask is matching task having task-definition 'processTask' of process 'DemoWorkflow'. Tested for: at io.vanillabp.springboot.adapter.TaskWiringBase.wireTask(TaskWiringBase.java:199) Caused by: java.lang.RuntimeException: You need to autowire 'io.vanillabp.spi.process.ProcessService<demo.DemoAggregate>' in your code to be able to start workflows! at io.vanillabp.camunda7.wiring.Camunda7TaskWiring.lambda$1(Camunda7TaskWiring.java:81) c7/demo.bpmn
  • 14. DemoAggregate.java DemoWorkflow.java VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills pom.xml DemoAggregateRepository.java c7/demo.bpmn Task-definition: processTask Condition: =not(success) Task-definition: logError c7/demo.bpmn Expression: ${processTask} Condition: ${not success} Expression: ${logError} Point to directory „c8/“ instead of „c7/“ in Spring config Switch the Maven dependency to „camunda8-spring-boot-adapter“ c8/demo.bpmn BPMN process ID: DemoWorkflow
  • 16. VanillaBP Abstraction Wiring of BPMN and services Process variables Service-like tasks Receive-like tasks Asynchronous tasks User tasks Multi-instance tasks BPMN errors Deployment of BPMN BPMN process versions
  • 17. run C7 processes next to C8 processes run C7 processes instances next to C8 processes instances of the same workflow BPMN version-specific tasks Toppings run C7 processes or C8 processes using the same code ✔ JakartaEE 👋 Photo by Josephina Kolpachnikof on Unsplash Support async tasks for C7 based on external tasks
  • 18. VanillaBP Business processing at its best taste [va·​nil·​la] … simple, plain, no frills https://github.com/camunda-community-hub/vanillabp-camunda7-adapter https://github.com/camunda-community-hub/vanillabp-camunda8-adapter stephan.pelikan@phactum.at https://github.com/vanillabp/simple-vanillabp-demo https://www.vanillabp.io https://github.com/vanillabp comprehensive documentation