目前,我认为没有分步说明可以指导您完成 Grails Activiti 插件的实施。我在一条类似的船上(一个使用 Grails 的开发商店,想要实现一个工作流引擎),到目前为止,Activiti 插件并没有真正有用。使用者don't actually seem to be leveraging the integration it provides between GORM and Activiti.
概括地说,以下是我推荐的在 Grails 中使用 Activiti 的步骤;您可能会接受或离开 Activiti 插件。
-
Create the Activiti engine in your database。如果您使用的是内存 H2 数据库并让 Grails 执行创建/删除语句,则可能需要将 h2 脚本添加到应用程序的启动过程中。
- 在 Grails 应用程序中以 BPMN 2.0 XML 格式映射您想要的流程。您可以使用Activiti Eclipse Designer,它可以很好地插入 GGTS,在某个地方启动 Activiti Explorer 并使用基于 Web 的设计器,或者您自己编写原始 XML。
- 将 Activiti 作为依赖项包含在 Grails 应用程序中。您可以通过在 BuildConfig.groovy 中包含 Activiti Grails 插件来实现这一点,或者仅将 Activiti 引擎 jar 作为依赖项包含在内(见下文)。
- 使用对Activiti engine's API 的调用(最好来自 Grails 服务)来部署您的流程模型,启动流程的各个实例,并完成工作流中的各个步骤。
- 您可能需要将有关 Grails 域对象的信息作为流程变量传递,然后稍后再将它们提取出来。弄清楚让 Grails 将数据保存在域对象中的哪个位置,以及让 Activiti 将其作为流程变量保存在何处,这只是开发人员需要考虑的问题。
一般来说,我的经验法则是让 Activiti 处理流程,让 Grails 处理其他所有事情(UI、数据持久性和操作、验证等)。
我推荐这种方法,这样您仍然可以使用 Grails 通过控制器和 GSP 管理所有用户界面,并通过域对象和服务管理大部分对象模型。 Activiti 团队正在构建的 UI 没有任何问题,但它基于 Vaadin,这是它自己的 Java/UI 框架,具有自己的特点和理念。我确信一个超级开发者可以将它们无缝地结合起来,而且可能已经有了,但是除非他/她下山教我,否则我将不得不限制我将尝试的工具的数量立即掌握。 :)
如何将 Activiti 包含为依赖项
在您的 BuildConfig.groovy 文件中,在您的依赖项和存储库闭包中包含以下内容:
repositories {
inherits true // Whether to inherit repository definitions from plugins
mavenRepo "https://maven.alfresco.com/nexus/content/groups/public/"
//any other repositories you need go here, including grailsCentral(), etc.
}
dependencies {
compile("org.activiti:activiti-engine:5.13"){
excludes "spring-beans"
}
}
您不必排除 spring-context 依赖项,但 Grails 2.3.1 确实使用了比 Activiti 5.13 更高版本的 Spring。在我试过的 2/3 机器上,没问题,Grails 只是使用 Spring 的较新版本,忽略了 Activiti 所需的旧版本。但是,on one machine, the difference caused a persnickety exception that was difficult to track down。