0

我正在将我的 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)。

最好的问候和感谢你的帮助,丹尼尔

4

1 回答 1

0

有趣的问题,似乎您已经解决了大部分问题。

查看 executeSchemaOperations() 受保护的方法,看起来好像它只是调用从流程引擎配置中检索的命令执行器。

因此,您可能可以执行以下操作:

processEngineConfiguration.getCommandExecutorSchemaOperations().execute(new SchemaOperationsProcessEngineBuild())

SchemaOperationsProcessEngineBuild 应该从 org.comunda.bpm.engine.impl 导入

显然,正如您所说,您可以简单地调用受保护的方法,但上面的内容让您摆脱了受保护方法的问题。

干杯,格雷格

于 2015-06-21T23:41:49.463 回答