Как вызвать изменения таблицы в camunda (используя grails)?

Я переношу свое приложение grails с activiti на camunda (оба используются как плагины grails). Поскольку нет полной (автоматической) миграции базы данных, мне приходится вносить некоторые изменения самостоятельно (с помощью плагина миграции db). Camunda создаст только несколько новых таблиц (если для свойства cmmn установлено значение true).

Для этого мне нужно отключить исполнителя задания из camunda и отключить cmmn (чтобы избежать миграции). Если я не отключу оба упомянутых свойства, camunda попытается создать новые таблицы до, когда плагин миграции базы данных сможет внести свой вклад. И это не удастся, потому что некоторые столбцы отсутствуют (используются в качестве ограничений внешнего ключа).

После того, как миграция будет выполнена плагином миграции базы данных, остальные таблицы должны быть созданы camunda. И это делается только в том случае, если cmmn включен. Поэтому я включил исполнителя задания в bootstrap.groovy и включил cmmn.

// will be injected by spring
def processEngine

processEngine.jobExecutor.start() 
processEngine.processEngineConfiguration.cmmnEnabled = true

Проблема в том, что я не могу инициировать создание таблицы базы данных. Потому что это делается во время создания / создания экземпляра механизма процесса (а у меня уже есть механизм процесса). Необходимый метод для вызова - это executeSchemaOperations (), но этот метод защищен (да, я знаю, что это не проблема в Groovy, потому что можно вызывать частные / защищенные методы). Но, и это мой вопрос, есть ли лучший способ запустить создание таблицы?

Я использую grails 2.3.11 и плагин camunda 0.4 (с camunda 7.2).

С уважением и спасибо за вашу помощь, Даниэль


person Daniel    schedule 20.06.2015    source источник


Ответы (1)


Интересная задача и, кажется, вы уже решили большинство задач.

Глядя на защищенный метод executeSchemaOperations (), кажется, что он просто вызывает программу-исполнитель команды, которая извлекается из конфигурации Process Engine.

Итак, вероятно, вы могли бы сделать что-то вроде:

processEngineConfiguration.getCommandExecutorSchemaOperations (). execute (новый SchemaOperationsProcessEngineBuild ())

SchemaOperationsProcessEngineBuild следует импортировать из org.comunda.bpm.engine.impl

Очевидно, как вы говорите, вы могли бы просто вызвать защищенный метод, но вышесказанное позволяет вам решить проблему защищенных методов.

Привет, Грег

person Greg Harley    schedule 21.06.2015
comment
Привет, спасибо за ответ. При втором взгляде я заметил, что получить jobExecutor из processEngine невозможно, потому что интерфейс не предоставляет этого. Благодаря Groovy я могу получить к нему доступ. По этой причине я вызываю защищенный метод executeSchemaOperations (). С уважением, Даниэль. - person Daniel; 25.06.2015