如何使用Grails Activiti插件构建我们自己的工作流系统

时间:2013-03-04 07:28:00

标签: grails workflow grails-plugin activiti

我想使用Grails Activiti插件构建自己的工作流系统。这样做的程序是什么?任何人都可以帮助我吗?

我已经提到了这个documentationexample

我在我的项目中安装了Grails Activiti插件。我还在我的项目中下载并安装了休假请求示例应用程序,并了解它是如何工作的。

1 个答案:

答案 0 :(得分:3)

目前,我还没有考虑一步一步的指示来指导您实施Grails Activiti插件。我是一个类似的船(一个使用Grails的开发商店,希望实现一个工作流引擎),到目前为止,Activiti插件并没有真正有用。那些使用它的人don't actually seem to be leveraging the integration it provides between GORM and Activiti

从广义上讲,以下是我建议在Grails中使用Activiti的步骤;你可以拿走或离开Activiti插件。

  1. Create the Activiti engine in your database。如果您正在使用内存中的H2数据库并让Grails执行create / drop语句,则可能需要将h2脚本添加到应用程序的启动过程中。
  2. 以BPMN 2.0 XML格式在Grails应用中映射您需要的流程。您可以使用Activiti Eclipse Designer,它可以很好地插入GGTS,在某处激活Activiti Explorer并使用基于Web的设计器,或者将原始XML编码为您自己的坏人。
  3. 在您的Grails应用程序中包含Activiti作为依赖项。您可以通过在BuildConfig.groovy中包含Activiti Grails插件,或者仅将Activiti引擎jar作为依赖项包含在内(见下文)。
  4. 使用对Activiti engine's API的调用(最好是来自Grails服务)来部署您的流程模型,启动流程的各个实例,然后完成工作流程中的各个步骤。
    • 您可能需要将有关Grails域对象的信息作为流程变量传递,然后再将其重新绘制出来。弄清楚Grails在域对象中保存数据的位置,以及Activiti将其保存为流程变量的位置,只需要考虑开发人员的一部分。
  5. 通常,我的经验法则是让Activiti处理进程,Grails处理其他所有事情(UI,数据持久性和操作,验证等)。

    我推荐这种方法,以便您仍然可以使用Grails通过控制器和GSP管理所有用户界面,以及通过Domain对象和服务管理大部分对象模型。 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确实使用了Spring的更高版本而不是Activiti 5.13。在2/3台机器上我已经尝试过了,没关系,Grails只使用了更高版本的Spring,忽略了Activiti所需的旧版本。但是,on one machine, the difference caused a persnickety exception that was difficult to track down