Activiti浅析

Activiti框架以其开源 的特性,作为近年来迅猛发展的工作流框架之一。而另一种工作流框架JBPM5目前来说也是非常热门的工作流框架。虽然这两个框架是所属于不同的两个公司,但其实这俩框架却有着不小的关系呢。Activiti工作流框架开发的主导者Tom Baeyens之前任职于jBoss公司,也就是目前的JBPM5的发布公司,担任的是之前JBPM4工作流引擎的首席架构师。但是根据推测由于jBoss公司内部矛盾以及对工作流引擎未来版本的架构中的严重分歧,最后导致Tom Baeyens离开了jBoss公司,转而就职于Alfresco公司。然而,在数月的时间里,Tom Baeyens就推出了基于JBPM4工作流引擎的开源工作流系统Activiti。

Activiti框架以及JBPM5框架都是BPM(Bussiness Process Manage)系统(符合BPM规范),都是BPMN2过程建模和执行环境。都是开源项目-遵循ASL协议( Apache的 软件许可)。 都源自JBoss(Activiti5是jBPM4的衍生,jBPM5则基于Drools Flow)。 都很成熟,从无到有,双方开始约始于2年半前。 都有对人工任务的生命周期管理。 Activiti5和jBPM5唯一的区别是jBPM5基于WebService – HumanTask标准来描述人工任务和管理生命周期。 如有兴趣了解这方面的标准及其优点,可参阅WS – HT规范介绍 。 都使用了不同风格的 Oryx 流程编辑器对BPMN2建模。 jBPM5采用的是 Intalio 维护的开源项目分支。 Activiti5则使用了Signavio维护的分支。

那么activiti作为一种工作流框架,目前广泛应用于众多软件开发公司。那么如果想要使用activiti开源工作流系统实现自己的业务系统,那么其实首先第一步,是要熟悉BPMN2.0的规范,当然这一步也不是必须的。BPMN2.0规范作为一种标准实现的是工作流业务系统当中可能会遇到的一些基本模型的建立。

目前主流的Java开发IDE为eclipse和intellij idea。这两个开发工具都有支持Activiti的开发,拥有界面式的流程编辑器。通过对业务流程进行绘制,流程编辑器会对业务流程进行解析并生成一个.bpmn文件,其实质上就是一个.xml文件,该文件当中声明式的说明了各个流程的实现以及业务类型,后续通过Activiti的流程引擎可以对该xml文件进行解析,并执行对应的操作及流程跳转功能。

这里给出Activiti的Github社区网址,相关内容可以到上面下载咨询。那么Activiti工作流系统基于的工作流引擎到底是个什么东西呢?目前Activiti工作流业务系统提供了一套基于java的API接口,流程引擎其实它是一个class类的实例,只是通过这个对象可以获取到所有的关于工作流业务流程的内容以及操作所有的流程进行。如图1.1是工作流引擎对象以及其可以派生的对象:

其中,activiti.cfg.xml文件为核心配置文件,该配置文件集成在Spring的IOC容器当中,可以产生ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象,ProcessEngine对象则为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现。关于对象的操作请参考Activiti5的API文档。

目前的Activiti5工作流业务系统总共涉及23张表,如图1.2为表的相关信息。当然这些表并不是都是必须的,有些用不到的功能的表自然而然就不需要了。目前Activiti5的工作流业务系统支持MySql、Oracle和DB2等主流数据库,默认使用的数据库为H2。相关数据库的配置参考相关文档。

Activiti工作流业务系统对Spring的集成非常好,这对于熟悉Spring框架的开发人员来说是一种比较好的特性。但是Activiti框架当中并不是封装了业务功能,只是实现了最基本的操作,可以使使用者更好地实现某些功能,但是由于activiti中并没有对驳回进行有效的封装,所以如果开发人员想使用驳回功能,那就需要自己通过activiti的API自己手动的封装一个接口了。

那么对于Activiti工作流框架,我们怎么来使用呢?接下来,我们就来简单的说一说activiti的使用方式。既然要使用activiti框架,先来看看Activiti的基础编程框架:

接下来第一步是需要开发工具,前面我们说了,可以使用集成了acitiviti界面式流程编辑器功能的eclipse或者intellij idea。那么这里我们使用eclipse开发工具。如下图所示:

第二步:则需要引入对应的activiti的jar包,可以手动下载下来,也可以使用maven项目管理工具统一管理软件包。那么这里我们使用maven项目管理工具:

第三步:前面我们说过,activiti工作流业务系统需要23张表,那么表的创建那也是必不可少的,之前我们说过。可以通过activiti的工作流引擎的对象来创建。在这里我们就使用这种方式创建。

完成了上面的三步之后,那么接下来就是简单的实现一个请假业务流程。第一步,画流程图,设置流程开始节点start和结束节点end,设置任务userTask。如下图所示:

需要注意的是,该流程图中的每一个userTask都需要设置下一个处理人assignee,可以使用流程变量动态设置处理人,也可以直接固定处理人,这里我们先固定处理人。如下图所示:

完成了请假业务流程之后,我们来看看这个bpmn文件到底是个什么类型的文件,我们使用txt文本编辑器打开,发现类似于一个xml文件,只是后缀为.bpmn而已。如下图所示:

接下来就是开始真正的代码编写了。前面我们说过activiti工作流框架与Spring几乎完美的融合,但是这里我们只是涉及到activiti浅析,所以本文只是使用原生的api接口实现简单的请假流程。

首先使用工作流引擎配置对象加载activiti.cfg.xml文件,前面说过activiti.cfg.xml为工作流的配置文件,这里贴出activiti的内容,使用的数据库为mysql数据库。

接下来可以使用流程引擎对象ProcessEngineConfiguration加载配置文件,通过配置对象获取ProcessEngine对象,但是我们不采用配置文件的形式创建这个对象,那么接下来所有的内容都可以使用这个对象派生出来的内容完成所有的功能。其实刚才创建表的那段代码就可以完成这个功能。

使用ProcessEngine对象加载请假流程配置文件,创建流程定义模板,也即是部署流程。接下来通过流程定义模板创建一个流程实例对象,填写请假单,保存请假单,即创建一个请假流程。

这段代码创建了请假流程的定义。

其中,engine为ProcessEngine的实例对象,processDefinitionId为流程定义的Id,该值在创建流程定义的时候就会生成,run.startProcessIntanceById为通过流程定义Id创建一个流程实例对象,这个流程实例对象就对应的是一次请假流程。

在通过创建的请假流程中,再提交请假流程到上级部门(例如:部门经理等),部门经理通过后,才能说明该请假流程完成,10002为任务的唯一标识。对应的流程图中的每一个任务userTask对应一个taskId。

在本文中,请假流程的例子并没有涉及到数据库的操作,也就是说所有的数据库的内容都是由activiti框架为我们完成,我们只需要实现对应的业务流程即可。这极大的简化了工作流的相关内容,但是如果想要用好activiti工作流框架,那么就必须对这一套api文档进行详尽细致的了解及学习。如果想了解更多关于activiti对数据库操作的内容。请参阅相关资料。

本文原创首发于Cobub官网博客,作者:肖志

如有转载请注明作者和出处!

推荐一款开源私有化部署的移动应用数据统计分析系统Cobub Razor

开源社区技术交流QQ群:194022996

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容