I have an embedded Camunda Spring Boot instance up and running. When I run it with default configuration (with no integration with Spring transaction management), then events get triggered successfully, but when I enable Spring transactions, events break and are no longer generated.
I am sure I am missing some configuration, but I am unable to find how to configure both, Spring transactions and Spring events in the official Camunda docs.
Below is what I am using for Spring Transactions Integration. How do I enable generation of events (task, execution and history events) along with this?
@Configuration
@RequiredArgsConstructor
public class TransactionConfiguration {
private final DataSource dataSource;
@Bean("transactionManager")
public DataSourceTransactionManager transactionManager() {
DataSourceTransactionManager txManager = new DataSourceTransactionManager();
txManager.setDataSource(dataSource);
return txManager;
}
@Bean("processEngineConfiguration")
public SpringProcessEngineConfiguration processEngineConfiguration() {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
config.setTransactionManager(transactionManager());
config.setDatabaseSchemaUpdate("true");
config.setJobExecutorActivate(true);
config.setDbMetricsReporterActivate(false);
config.setIdGenerator(new StrongUuidGenerator());
config.setHistoryLevel(HistoryLevel.HISTORY_LEVEL_FULL);
return config;
}
@Bean("processEngine")
public ProcessEngineFactoryBean processEngine() {
ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
factoryBean.setProcessEngineConfiguration(processEngineConfiguration());
return factoryBean;
}
@Bean
public TaskService taskService() throws Exception {
return processEngine().getObject().getTaskService();
}
@Bean
public RuntimeService runtimeService() throws Exception {
return processEngine().getObject().getRuntimeService();
}
@Bean
public RepositoryService repositoryService() throws Exception {
return processEngine().getObject().getRepositoryService();
}
}
I think the reason could be that your code is creating its own processEngineConfiguration and is not setting the properties used to enable the Spring Event Bridge integration: https://docs.camunda.org/manual/7.18/user-guide/spring-boot-integration/the-spring-event-bridge/