实 战
Activiti实战
闫洪磊 著
为什么要写这本书
2011年年末,公司承接了一个保险类的业务系统,包含处理核心业务的ERP系统以及日常办公的OA系统,很明显这两种类型的系统都离不开工作流引擎的支持。我用一周时间对比了几个开源的工作流引擎,最后决定使用Activiti作为整套系统的工作流引擎。
现在回想起来,当初的学习过程是多么的“痛苦”啊!当时Activiti才刚满周岁,除了官方提供的尚能看得过去的用户手册之外,再无其他资料可供参考,这对于国内开发者来说尤为痛苦。仅有的用户手册全部都是英文的,为了学习Activiti只能打开翻译软件硬着头皮把手册看了一遍,当然也离不开打入引擎内部的利器—Javadocs。幸运的是,我的第一份工作(3年时间)是为*单位开发OA系统,这有助于理解在学习Activiti过程中遇到的一些概念性的内容,在此基础上前后花了一周时间写出了第一个在本书中被讲“烂”掉的请假流程。
国内很多技术爱好者都会使用IM软件或论坛建立技术交流社区,也有一些人开设博客撰写相关技术文章。在开始学习Activiti时,很多人都尝试着去寻找这样的社区,结果由于社区规模小、热度不高,常听到学习资料匮乏以及没有成熟的Demo可供参考这样的声音。我喜欢研究技术也乐于分享,从08年就开始以博客的形式分享一些技术学习心得,在基本掌握Activiti的使用方法后就响应社区的号召在GitHub上公开了Activiti入门Demo项目—kft-activiti-demo,并在个人博客上发布了几篇与Activiti有关的博文。随着国内使用Activiti的企业越来越多,使得Activiti中文社区活跃度大大增加。最初我要花不少时间回答社区中提出的有关Activiti的问题,长此以往,同一个问题每天要回答多次,而且kft-activiti-demo也太过简单,只能作为入门参考,为了能系统地介绍Activiti,就萌发了撰写一本关于Activiti的书籍的想法。
在2012年6月,机械工业出版社华章公司的首席策划杨福川联系我,表示有意向出版一本Activiti方面的书籍。我们一拍即合,于是就有了这本书,这也让我相信机会是留给有准备的人的。这本书原本预计一年完成,不过由于工作与家庭的原因,在2013年一度中断了大半年,导致这本书的难产。在此也对期待已久的读者说声对不起,同时也是因为你们给予的支持与压力促使我最终完成这本书。
在学习和使用Activiti的过程中也遇到了一些Bug或功能缺陷,例如基本上每个初学者都会遇到的流程图中文乱码问题。对于这些问题最初会通过Bug跟踪系统向官方提交问题,在Activiti的源码从SVN切换到GitHub后就可以很方便地让全球的开发者参与进来。笔者也借助GitHub这个平台为Activiti贡献了一些代码,借此机会也呼吁技术爱好者多多参与开源。
读者对象
本书以“理论+实战”的方式引导读者学习,不仅介绍如何使用Activiti,还详细介绍了其遵循的BPMN 2.0规范,所以无论读者是以技术为主还是以业务需求为主,都适合阅读本书。虽然本书中大部分示例都是B/S架构,但不表示Activiti不能在C/S架构中使用。另外,Activiti也不是只针对Java语言的,被其官方定义为BPM平台,借助REST也可以让非Java语言的系统使用Activiti。
适合阅读本书的读者有以下几类:
Activiti用户和爱好者
Activiti代码贡献者
流程引擎相关的项目经理或者需求人员
Activiti开发者,或运维人员
使用Activiti开发流程平台的公司
如何阅读本书
本书分为四大部分:
第一部分(第1、2章)为准备篇,介绍整个体系结构及其特点,并为后面的内容配置开发环境。
第二部分(第3、4章)为基础篇,介绍两种流程设计器的使用,以及BPMN 2.0规范。
第三部分(第5~14章)为实战篇,本书中内容最多的部分,该部分以实战为主,包括流程定义、流程实例、任务、子流程、多实例、事件以及监听器等。
第四部分(第15~21章)为高级篇,通过集成各种服务、中间件来阐述Activiti不仅是引擎,更是一个BPM平台,最后还深入源码内部剖析Activiti的设计模式及PVM。
勘误和支持
由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或不准确的地方,恳请读者批评指正。为此,特意创建一个在线支持与应急方案的站点http://www.kafeitu.me/activiti-in-action.html。大家可以将书中的错误发布在Bug勘误表页面中,同时,在遇到任何问题时,你可以访问其Q&A页面,笔者将尽量在线上为你提供最满意的解答。书中的全部源文件除可以从华章网站下载外,还可以从笔者提供的这个网址下载,笔者也会将相应的功能更新及时更正出来。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱yanhonglei@gmail.com,期待能够得到你们的真挚反馈。
致谢
首先要感谢Tom Beayens发起了这么优秀的开源项目,以及Alfresco公司Tijs Rademakers带领的Activiti团队对此项目的无偿贡献与支持。
感谢Activiti中文社区中每一位充满激情的朋友—袁启勋、临远、翔子、姜维、王垒、于广岳、第二少、小股东、陈浩、jackyrong、卖字母为生,以及名单之外的更多朋友,感谢他们长期以来对社区的支持和贡献。
感谢机械工业出版社华章公司的编辑杨福川和姜影,我始终坚信专业的事找专业的人做,两位在这两年的时间中从各个方面支持我的写作,他们的鼓励和帮助引导我顺利完成全部书稿。
感谢我的驴友们,和他们一起登山探险让我精神得以放松,希望以后的空余时间我们继续用双脚丈量大地。
最后感谢我的家人,感谢他们对我的支持和鼓励。
谨以此书献给我最亲爱的家人,以及众多热爱Activiti的朋友们!
闫洪磊(咖啡兔)
于上海
第一部分 准 备 篇
第1章 认识Activiti2
1.1 什么是Activiti2
1.2 工作流基础3
1.2.1 什么是BPM3
1.2.2 工作流生命周期4
1.2.3 什么是BPMN5
1.3 Activiti的特点5
1.4 Activiti的应用6
1.5 Activiti架构与组件7
1.6 Activiti与jBPM5比较8
1.7 本章小结9
第2章 搭建Activiti开发环境10
2.1 下载Activiti10
2.1.1 目录结构10
2.1.2 Javadocs12
2.2 环境配置检查14
2.2.1 检查并安装JDK14
2.2.2 检查并安装Ant14
2.2.3 检查并安装Maven15
2.3 配置文件介绍16
2.3.1 Activiti配置文件16
2.3.2 Maven配置文件17
2.4 Hello World18
2.4.1 最简单的流程定义18
2.4.2 创建单元测试类20
2.4.3 运行Hello World21
2.4.4 添加业务节点21
2.5 Activiti Explorer25
2.5.1 配置并运行Activiti Explorer25
2.5.2 使用Activiti Explorer26
2.6 本章小结29
第二部分 基 础 篇
第3章 流程设计工具32
3.1 基于B/S架构的流程设计器Activiti Modeler32
3.1.1 Activiti Modeler特点32
3.1.2 下载signavio-core-components33
3.1.3 配置打包与运行33
3.1.4 Windows用户打包36
3.1.5 设计请假流程37
3.1.6 导出bpmn2.0.xml41
3.2 在Activiti Explorer中使用Activiti Modeler41
3.3 基于Eclipse插件的流程设计器Activiti Designer44
3.3.1 Activiti Designer特点44
3.3.2 安装Activiti Designer45
3.3.3 设计流程46
3.3.4 自动化51
3.3.5 升级历史遗留的流程设计55
3.3.6 导入Activiti Modeler设计56
3.3.7 泳池与泳道57
3.3.8 在Activiti Designer中使用泳道与泳池58