我正在将我的grails应用程序从activiti迁移到camunda(都用作grails插件)。因为没有完整的(自动)数据库迁移,所以我必须自己做一些更改(使用db migration plugin)。 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(),但是此方法是 protected (是的,我知道这在Groovy中并不是真正的问题,因为可以调用私有(private)/ protected 方法)。但是,这是我的问题,是否有更好的方法来触发表创建?
我正在使用grails 2.3.11和camunda插件0.4(使用camunda 7.2)。
致以最诚挚的问候,感谢您的帮助,
丹尼尔
最佳答案
有趣的问题,看来您已经解决了大多数问题。
看一下executeSchemaOperations() protected 方法,看起来好像它只是调用从流程引擎配置中检索的命令执行程序一样。
因此,可能您可以执行以下操作:
processEngineConfiguration.getCommandExecutorSchemaOperations()。execute(new SchemaOperationsProcessEngineBuild())
SchemaOperationsProcessEngineBuild应该从org.comunda.bpm.engine.impl导入
显然,正如您所说,您可以简单地调用protected方法,但是以上内容使您摆脱了protected方法的问题。
干杯,
格雷格