Camunda - Spring Transaction and Spring Event Bus Integration

228 Views Asked by At

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();
    }
}
1

There are 1 best solutions below

0
On

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/

camunda.bpm.eventing.execution=true
camunda.bpm.eventing.history=true
camunda.bpm.eventing.task=true