Пограничные таймеры не работают в Activiti 6 - PullRequest
0 голосов
/ 29 октября 2018

Я использую граничный таймер, и он не работает. Если после таймера нет элементов, процесс переходит в этот поток последовательности. Если после таймера есть служебная задача, процесс идет по обычному пути. Вот часть моей схемы ударов в минуту: enter image description here

Я использую 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, оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...