AnsweredAssumed Answered

Boundary Timers do not work in Activiti 6

Question asked by maxlich on Oct 29, 2018

I use boundary timer, and it does not work. If there are no elements after the timer, the process goes on this sequenceflow. If there is a service task after the timer, the process goes on the normal path. Here is a part of my bpm scheme:

I use Spring 5 for creating of the beans for Activiti. Here is the example of my bean configuration class:

 

@Bean
SpringProcessEngineConfiguration processEngineConfiguration(@Qualifier("dataSourceForActiviti") DataSource dataSourceForActiviti,
@Qualifier("transactionManagerForActiviti") PlatformTransactionManager transactionManagerForActiviti) {
SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
processEngineConfiguration.setTransactionManager(transactionManagerForActiviti);

processEngineConfiguration.setDataSource(dataSourceForActiviti)
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setAsyncExecutorActivate(true)
;


processEngineConfiguration.setDeploymentResources(new Resource[]{
new ClassPathResource("bpm/LicensingProcess.bpmn20.xml"),
new ClassPathResource("bpm/ReissuanceLicenseProcess.bpmn20.xml"),
new ClassPathResource("bpm/IssueOfDuplicateProcess.bpmn20.xml"),
new ClassPathResource("bpm/IssuanceOfCopyProcess.bpmn20.xml"),
new ClassPathResource("bpm/TerminationOfLicenseProcess.bpmn20.xml"),
new ClassPathResource("bpm/RLic6ExtractFromRegisterOfLicensesProcess.bpmn20.xml")
});


return processEngineConfiguration;
}

@Bean
ProcessEngineFactoryBean processEngineFactoryBean(SpringProcessEngineConfiguration processEngineConfiguration) {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration);
return processEngineFactoryBean;
}

@Bean
RepositoryService repositoryService(ProcessEngineFactoryBean processEngineFactoryBean) throws Exception {
return processEngineFactoryBean.getObject().getRepositoryService();
}

@Bean
RuntimeService runtimeService(ProcessEngineFactoryBean processEngineFactoryBean) throws Exception {
return processEngineFactoryBean.getObject().getRuntimeService();
}

@Bean
TaskService taskService(ProcessEngineFactoryBean processEngineFactoryBean) throws Exception {
return processEngineFactoryBean.getObject().getTaskService();
}

 


I tried to comment and uncomment the line setAsyncExecutorActivate(true), and there was no difference. At the same time, if you put the timer as a separate unit, everything works.

 

PS The solution from User task, Timer Boundary Event And Spring  also didn't work

 

PSS At the same time, a similar scheme works great in the Activiti Modeler. And I can not understand why it works there and does not work for me

 

PSS I have written a simple application on the Swing and without Spring. I used the 'StandaloneProcessEngineConfiguration' class and I didn`t use the 'SpringProcessEngineConfiguration' and 'ProcessEngineFactoryBean' classes. And it works but if i put the service task or script task after boundary timer (not timer event as a separate element), it does works. It writes that it cannot find an engine for groovy (for script task), and it writes that it cannot instantiate a specified class (for service task). If there is an user task after boundary timer, it works.

Outcomes