@MaxLich
java developer

Почему у меня не работают timer boundary events в Alfresco's Activiti 6?

Здравствуйте. У нас в фирме используется Alfresco's Activiti 6, и необходимо добавить timer boundary events на bpm-схему. Всяко-разно пробовал, и никак не получается сделать, чтобы он срабатывал. Пример моей bpm-схемы:
5bd813357d036479837095.png

Если ставлю что-то после таймера, то процесс идёт по своему обычному маршруту. Если ничего не ставлю, идёт по ветке, исходящей из таймера. При этом без разницы, какой промежуток времени стоит у таймера: процесс идёт по той или по другой ветке сразу же.

Для создания объектов для работы с движком Активити использую Spring 5. Вот часть моего класса конфигурации:
@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();
        }


В документации написано, что таймеры работают, только если asyncExecutorActivate установлен в true. И нашёл метод setAsyncExecutorActivate у ProcessEngineConfiguration. Но использование этого метода ничего не даёт.

Также находил такое решение в сети:
// Async Job Executor
    final DefaultAsyncJobExecutor asyncExecutor = new DefaultAsyncJobExecutor();
    asyncExecutor.setMaxPoolSize(50);
    asyncExecutor.setQueueSize(100);
    processEngineConfiguration.setAsyncExecutor(asyncExecutor);

Но оно тоже мне не помогает, хотя asyncExecutorпосле этого уже не null.

PSS В тоже время, подобная схема прекрасно работает в Activiti Modeler. И я пока не могу понять, поэтому это хорошо работает там и не работает у меня.

PSSS Написал простенькое приложение без спринга (на свинге). Использовал класс StandaloneProcessEngineConfiguration, не использовал ProcessEngineBeanFactoryBean. И тоже всё работало. Но только пока после boundary timer-а не стоит script task или service task. С ними - не работает (по первому не находит движок груви, по второму - не видит указанный класс (причём указываю полное имя класса, и он там точно есть)). Если после boundary timer стоит user task или manual task, то всё нормально отрабатывает. Почему не работает с script task и service task я таки и не понял. Осталось попробовать с классами SpringProcessEngineConfiguration и ProcessEngineBeanFactoryBean, и с контейнером бинов спринга.
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы