我正在将我的grails应用程序从activiti迁移到camunda(都用作grails插件)。因为没有完整(自动)数据库迁移,所以我必须自己做一些更改(使用db migration插件)。 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)。
致以最诚挚的问候和感谢您的帮助, 丹尼尔
答案 0 :(得分:0)
有趣的问题,似乎你已经解决了大部分问题。
查看executeSchemaOperations()受保护的方法,它似乎只是调用从流程引擎配置中检索的命令执行程序。
所以,你可能会做类似的事情:
processEngineConfiguration.getCommandExecutorSchemaOperations()。execute(new SchemaOperationsProcessEngineBuild())
应从org.comunda.bpm.engine.impl导入SchemaOperationsProcessEngineBuild
显然,正如你所说,你可以简单地调用受保护的方法,但上面的内容会让你超越受保护方法的问题。
干杯, 格雷格