本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
要点
安装JDK与MySQL
安装Eclipse以及Activiti插件
运行官方的Activiti例子
Activiti的第一个正式版本发布于2010年12月1日,经过多年的发展,Activiti已经成为一个较为成熟的工作流引擎,作为一个开源的工作流引擎,它在工作流领域吸引了众多开发者的目光,在当前的工作流框架角逐中,慢慢成为众多企业的首选。在2017年5月26日,Activiti迎来全新篇章:6.0版本正式发布。本书将以6.0版本为基础,讲解基于Activiti的工作流应用开发。
本章将介绍Activiti的安装与运行、Activiti开发环境的搭建等内容,本书除了最后一章的项目案例外,其他所有的案例均以本章的开发环境为基础。搭建Activiti的开发环境,需要安装JDK、Eclipse、MySQL等软件,除此之外,还会编写第一个Activiti应用,让大家对Activiti有一个初步的了解。
注:本书全部的案例均在Windows7下开发和运行。
如果仅仅只是运行Activiti,看下工作流的例子,可以只下载JDK、Tomcat和Activiti,Activiti的开发包中,已经含有Activiti的web应用例子。本书使用的Tomcat版本为7.0.42,可以到以下地址下载该版本的Tomcat:
http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.zip
本书所使用的Tomcat是非安装版本,下载后解压即可使用,在运行Tomcat需要先安装JDK。本书全部需要使用浏览器的程序,均使用Google Chrome浏览器,笔者也建议读者使用该浏览器。
注意:已有JDK与MySQL环境的,可跳过相应章节。
Activiti6.0要求在JDK7以上版本运行,本书所使用的是JDK8(32位),大家可以到以下网址下载JDK:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
选择合适的版本进行下载后即可进行安装,在Win7下,默认的安装目录是C:\Program Files (x86)\Java\jdk1.8.0_131,安装完成后,需要配置环境变量,新建JAVA_HOME变量,值为JDK的安装目录,如图2-1所示。
图2-1 JAVA_HOME环境变量
添加了JAVA_HOME环境变量后,修改系统的Path变量,加入“%JAVA_HOME%\bin”,如图2-2所示。
图2-2 Path环境变量
为了验证JDK是否成功安装,打开系统命令行,输入“java -version”可看到JDK的版本信息,笔者安装的JDK信息如图2-3所示。
图2-3 JDK版本信息
看到图2-3信息,即表示JDK成功安装。如果大家的机器需要不同版本的JDK,可以为JAVA_HOME设置不同值来实现切换。
MySQL作为市面上关系型数据库的佼佼者,一直受到各大企业及开发人员的青睐,笔者之前就职的公司一直使用MySQL,因此本书选用MySQL作为Activit的数据库。目前MySQL的版本发展到5.7,由于数据库并不是本书的重点,因此笔者选用了较为成熟的5.6版本(64位),大家可到以下网址下载5.6版本的MySQL数据库:
https://dev.mysql.com/downloads/installer/5.6.html
下载并安装了MySQL数据库后,将MySQL的bin目录添加到环境变量中,以便可以在命令行中使用MySQL命令。
图2-4添加系统变量
修改系统变量的Path属性,添加“%MYSQL_HOME%\bin”,如图2-5所示。
图2-5修改Path变量
完成以后的步骤后,打开命令行,输入“mysql -V”,可以看到输出如图2-6所示。
图2-6查看MySQL安装
关于MySQL数据库的客户端工具,本书使用的是Navicat,读者也可以使用其他工具,这些工具目的是为了更加方便操作MySQL数据库,大家可根据个人习惯来选用。本书的开发环境为Windows7,安装完MySQL5.6后,笔者建议将MySQL配置成区分大小写(默认不区分),修改MySQL的配置文件my.ini(如果在Windows7下安装MySQL,则修改C:\ProgramData\MySQL\MySQL Server 5.6\my.ini),加入“lower_case_table_names = 0”配置,重启MySQL服务即可。
安装了JDK和MySQL后,现在可以下载Activiti,Activiti的主页为:http://www.activiti.org/,本书使用的Activiti版本为6.0版本,以下为Activiti6.0版本的下载地址:
https://github.com/Activiti/Activiti/releases/download/activiti-6.0.0/activiti-6.0.0.zip
由于某些非技术原因,以上链接可能在国内无法打开,需要借助其他方法进行下载。
下载解压后得到activiti-6.0.0目录,该目录下有三个子目录:database、libs和wars。以下为各个目录的作用描述:
database:用于存放Activiti数据表的初始化脚本(create子目录)、删除脚本(drop子目录)和升级脚本(upgrade子目录)。从各个目录中的脚本可得知,目前Activiti支持各大主流的关系型数据库,包括DB2、MySQL、Oracle等等。
libs:存放本版本Activiti所发布的jar包,也包含对应的源码包。
wars:存放Activiti官方提供的war包,当前版本有activiti-app.war、activiti-admin.war、activiti-rest.war三个war包。
需要注意的是,这三个war包默认情况下使用的是H2数据库,该数据库是一个内存数据库,因此部署前不需要进行任何的数据库配置,但如果重启了应用服务器,那么之前的数据将会丢失,大家在使用时请注意这个小细节。将三个war包复制到Tomcat/webapps目录并启动Tomcat,在浏览器中打开以下链接,即可以看到Activiti的演示界面:
http://localhost:8080/activiti-app/
Activiti的演示界面如图2-7所示。
图2-7 Activiti Demo的登录界面
注:见到图2-7的界面,表示已经启动成功,如果需要登录及使用其他功能,请见2.2.小节。
Activiti官方发布的activiti-app,可以说是一个较为完善的样例,用户可通过试用该应用来了解Activiti的大部分功能。随Activiti6.0版本发布的官方示例,包括流程图定义、流程发布、动态表单等一系列功能,在笔者看来,这个示例的功能已经相当强大。但由于该示例偏向技术,如果需要开发更贴近某个特定业务的产品,我们还是需要掌握Activiti的核心。
本小节将以一个简单的请假流程为基础,向大家展示该Activiti示例的功能,以便大家对工作流引擎有一个初步的了解。
注:activiti-app的登录用户名为admin,默认密码为test,该应用的功能将在本小节讲述。
我们先定一个简单的请假流程,主要是由员工发起请假,然后再由他的经理审批,最后流程结束,流程图如图2-8所示。
图2-8员工请假流程
本小节目的是为了让大家初步了解activit-app的功能,对Activiti有一个初步的认识,因此设计的流程较为简单。
根据我们前面定义的请假流程,需要有一个员工的用户,然后需要有一个经理的用户,在实际业务中,普通员工、经理可能就是用户,在此为了简单起见,只定义有一个员工与一个经理,不涉及用户组数据。使用admin账号登录activiti-app(默认密码是test),主界面如图2-9所示。
图2-9登录activiti-app后的主界面
主界面的三个菜单主要承担以下功能:
Kickstart App:主要用于流程模型管理、表单管理及应用(App)管理,一个应用可以包含多个流程模型,应用可发布给其他用户使用。
Task App:用于管理整个activiti-app的任务,在该功能里面也可以启动流程。
Idenity management:身份信息管理,可以管理用户、用户组等数据。
点击“Identity Management”菜单,再点击Users菜单,界面如图2-10所示。
图2-10进入用户管理
点击“Create user”按钮,弹出输入新用户信息的界面,根据我们定义的请假流程,需要新建一个员工用户。新建用户名为“employee”的用户,信息如图2-11所示。
图2-11新建用户
需要注意是,Email等信息虽然不是必填的,但如果不填,则在登录时会出现异常,笔者建议将全部信息填完,以便减少遇到的问题。以同样的方法,再创建一个“manager”的用户作为经理,用于审核请假任务。
点击“Kickstart App”菜单,进入流程模型管理的主界面,点击“Create Process”按钮,弹出新建流程模型界面,如图2-12所示。
图2-12新建流程模型界面
新建模型后,会进入流程模型设计界面,在流程设计界面中,只需要普通的鼠标拖拉操作,即可完成流程模型的定义,该编辑器也可以开放给业务人员使用。根据前面定义的请假流程,在编辑器中“拖拉”一下,定义请假流程模型,如图2-13所示。
图2-13设计流程模型
在图2-13中,定义了一个开始事件、两个用户任务、一个结束事件。我们定义的请假业务,需要将该用户任务分配给employee用户。点击第一个用户任务,并修改“Assignment”属性,如图2-14所示。
图2-14为任务分配给用户
如图2-14可知,将“Employee off work”任务分配给“Emp E”用户,需要注意的是,Emp是用户的真实名称,登录系统的用户名是employee。保存成功后,再使用同样的方法将“Manage Audit”任务分配给manager用户,保存流程模型后,就可以将流程发布。
在activiti-app中,一个App可包含多个流程模型,因此在发布流程前,先新建一个App并为其设置流程模型。点击Apps菜单,再点击“Creaea App”按钮,新建一个App,如图2-15所示。
图2-15新建App
由于我们设计的请假流程,属于人事管理领域的,因此新建一个给HR使用的App(应用),该App就包含我们前面所设计的请假流程模型。创建App成功后,再为其设置流程模型并发布App,点击修改App,显示界面如图2-16所示。
图2-16查看App
图2-16为查看App的界面,右上角的“Publish”按钮可以发布App。点击“App Editor”可以进行App的模块修改,本例中已经将前面定义的流程绑定到“HR App”中。
发布了App,再使用之前新建的employee用户进行登录,登录后可以看到HR App的菜单,如图2-17所示。
图2-17员工登录后主界面
进入HR App并且点击“Processes”菜单,在界面左上角,可以看到“Start a process”按钮,点击启动请假流程后,可以看到界面如图2-18所示。
图2-18启动流程
根据流程模型的定义可知,启动流程后,就由employee来完成第一个用户任务,点击图2-18右边的任务列表,进行任务操作。如图2-19所示。
图2-19查看用户任务
图2-19右上角的“Complete”按钮,点击后即可完成当前的用户任务。按照流程设计,employee完成任务后,就到manager用户审核请假。使用manager用户登录系统,同样进入“HR App”的Processes菜单,可以同样看到分配到manager用户下面的任务,以同样的方式完成任务后,流程结束,如图2-20。
图2-20 manager完成任务
至此,这个简单的请假流程,已经在activiti-app上面运行成功。
除了activiti-app这个war包外,还有一个activiti-admin的war包,在部署时也放到Tomcat的应用目录下,activiti-admin用于查看流程引擎的主要数据,包括流程引擎的部署信息、流程定义、任务等数据。启动了Tomcat后,在浏览器中打开以下链接:
http://localhost:8080/activiti-admin
打开上面链接后,可以看到activiti-admin的登录界面,内置的用户名为admin,密码为admin。登录成功后,点击“Configuration”菜单,先配置管理的对象信息,由于activiti-app也是部署在Tomcat中,因此只需要修改一下端口即可,将默认的9999端口改为我们的Tomcat端口(8080),修改界面如图2-21所示。
图2-21修改activiti-admin的配置信息
修改完成配置后,可以点击“Check Activiti REST endpoint”来测试是否可以连接到activiti-app的接口,连接成功后会有提示。
点击“Instances”,可以看到我们之前完成的请假流程实例,再点击流程实例,可以查看到流程的全部信息,请假流程的全部信息如图2-22所示。
图2-22查看请假流程信息
在activiti-admin应用中的数据,可以通过Activiti发布的接口获取,接口的使用将在本书后面的章节中讲述。
根据本小节的内容可知,Activiti官方提供的activiti-app、activiti-admin两个应用,包含了流程设计、流程发布、流程引擎管理等功能,本书后面的章节,将会深入讲解Activiti的功能,学习后再回头看官方的两个应用,即可明白它们的实现原理。
本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti