Почему у меня не работают boundary timers (использую Activiti 6)?

164
16 марта 2019, 04:20

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

Для создания объектов для работы с движком Активити использую 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();
    }

Я пробовал использовать метод setAsyncExecutorActivate, и передавал в качестве аргумента и true, и false - и разницы не заметил. Хотя в документации сказано, что нужно устанавливать значение asyncExecutorActivate в 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 Написал простенькое приложение без спринга (на свинге). Использовал класс StandaloneProcessEngineConfiguration, не использовал ProcessEngineBeanFactoryBean. И тоже всё работало. Но только пока после boundary timer-а не стоит script task или service task. С ними - не работает (по первому не находит движок груви, по второму - не видит указанный класс (причём указываю полное имя класса, и он там точно есть)). Если после boundary timer стоит user task или manual task, то всё нормально отрабатывает. Почему не работает с script task и service task я таки и не понял. Осталось попробовать с классами SpringProcessEngineConfiguration и ProcessEngineBeanFactoryBean, и с контейнером бинов спринга.

Answer 1

Таймеры не работают, когда параллельно запущен Activiti Modeler, использующий ту же базу. При выключении этого приложение всё начинает работать.

READ ALSO
Как расширить List в цикле?

Как расширить List в цикле?

Есть массив String, перевожу его в List, добавляю в циклЕсли в первом if срабатывает условие, то необходимо добавить в List символ

135
Поиск и возврат значения по ID (for json)

Поиск и возврат значения по ID (for json)

Что я делаю не так? У меня есть json файлВывод сделал, работает адекватно

160
Не находит тег p:focus jQuery

Не находит тег p:focus jQuery

У меня есть div с id="editor"У него задано contenteditable

141