Я использую граничный таймер, и он не работает. Если после таймера нет элементов, процесс переходит в этот поток последовательности. Если после таймера есть служебная задача, процесс идет по обычному пути. Вот часть моей схемы ударов в минуту:
Я использую Spring 5 для создания компонентов для Activiti. Вот пример моего класса конфигурации бина:
@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/ExtractFromRegisterOfLicensesProcess.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();
}
Я попытался прокомментировать и раскомментировать строку setAsyncExecutorActivate(true)
, и не было никакой разницы. В то же время, если вы установите таймер как отдельный блок, все будет работать.
PS Я только что нашел такое решение (оно добавляется к определению бина 'ProcessEngineConfiguration
'):
// Async Job Executor
final DefaultAsyncJobExecutor asyncExecutor = new DefaultAsyncJobExecutor();
asyncExecutor.setMaxPoolSize(50);
asyncExecutor.setQueueSize(100);
processEngineConfiguration.setAsyncExecutor(asyncExecutor);
Но это также не помогло мне. Хотя без него asyncJobExecutor
был null
.
PSS В то же время аналогичная схема прекрасно работает в Activiti Modeler. И я не могу понять, почему он там работает и у меня не работает
PSSS Я написал простое приложение на Swing
и без Spring
. Я использовал класс StandaloneProcessEngineConfiguration
и не использовал классы SpringProcessEngineConfiguration
и ProcessEngineFactoryBean
. И это работает, но если я поставлю задачу службы или задачу скрипта после boundary timer
(а не событие таймера как отдельный элемент), это работает. Он пишет, что не может найти движок для groovy (для script task
), и пишет, что не может создать экземпляр указанного класса (для service task
). Если после boundary timer
есть user task
, оно работает.