activiti5源码与流程活动自动与手工触发执行例子

activiti5源码与流程活动自动与手工触发执行例子

ID:29810362

大小:645.56 KB

页数:42页

时间:2018-12-23

activiti5源码与流程活动自动与手工触发执行例子_第1页
activiti5源码与流程活动自动与手工触发执行例子_第2页
activiti5源码与流程活动自动与手工触发执行例子_第3页
activiti5源码与流程活动自动与手工触发执行例子_第4页
activiti5源码与流程活动自动与手工触发执行例子_第5页
资源描述:

《activiti5源码与流程活动自动与手工触发执行例子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Activiti源码分析Activiti的基础编程框架Activiti基于Spring,ibatis等开源中间件作为软件平台,在此之上构建了非常清晰的开发框架。上图列出了Activiti的核心组件。1.ProcessEngine:流程引擎的抽象,对于开发者来说,它是我们使用Activiti的facade,通过它可以获得我们需要的一切服务。2.XXService(TaskService,RuntimeService,RepositoryService...):Activiti按照流程的生命周期(定义,部署,运行)把不同阶段的服务封装

2、在不同的Service中,用户可以非常清晰地使用特定阶段的接口。通过ProcessEngine能够获得这些Service实例。TaskService,RuntimeService,RepositoryService是非常重要的三个Service:TaskService:流程运行过程中,与每个任务节点相关的接口,比如complete,delete,delegate等等RepositoryService:流程定义和部署相关的存储服务。RuntimeService:流程运行时相关服务,如startProcessInstanceByKey

3、.关于ProcessEngine和XXService的关系,可以看下面这张图:3.CommandContextIntercepter(CommandExecutor):Activiti使用命令模式作为基础开发模式,上面Service中定义的各个方法都对应相应的命令对象(xxCmd),Service把各种请求委托给xxCmd,xxCmd来决定命令的接收者,接收者执行后返回结果。而CommandContextIntercepter顾名思义,它是一个拦截器,拦截所有命令,在命令执行前后执行一些公共性操作。比如CommandContext

4、Intercepter的核心方法:Java代码1.publicTexecute(Commandcommand){2.CommandContextcontext=commandContextFactory.createCommandContext(command);3.4.try{5.//执行前保存上下文6.Context.setCommandContext(context);7.Context.setProcessEngineConfiguration(processEngineConfiguration);8.ret

5、urnnext.execute(command);//执行命令9.10.}catch(Exceptione){11.context.exception(e);12.13.}finally{14.try{15.//关闭上下文,内部会flushsession,把数据持久化到db等16.context.close();17.}finally{18.//释放上下文19.Context.removeCommandContext();20.Context.removeProcessEngineConfiguration();21.}22.}2

6、3.24.returnnull;25.}关于命令模式的细节说明,网上有很多资料,这里不展开。我只是想说一下我看到Activiti的这种设计之后的两点感受:1)一个产品或者一个项目,从技术上必须有一个明确的、唯一的开发模型或者叫开发样式(真不知道怎么说恰当),我们常说希望一个团队的所有人写出的代码都有统一的风格,都像是一个人写出来的,很理想化,但做到很难,往往我们都是通过“规范”去约束大家这样做,而规范毕竟是程序之外的东西,主观性很强,不遵守规范的情况屡屡发生。而如果架构师给出了明确的开发模型,并使用一些基础组件加以强化,把程序员要

7、走的路规定清楚,那你想不遵守规范都会很难,因为那意味着你写的东西没发工作。就像Activiti做的这样,明确以Command作为基本开发模型,辅之以Event-Listener,这样编程风格的整体性得到了保证。2)使用命令模式的好处,我这里体会最深的就是职责分离,解耦。有了Command,各个Service从角色上说只是一些协调者或者控制者,他不需要知道具体怎么做,他只是把任务交给了各个命令。直接的好处是臃肿的、万能的大类没有了。而这往往是我们平时开发中最深恶痛绝的地方。4.核心业务对象(Task,ProcessInstance,

8、Execution...):org.activiti.engine.impl.persistence.entity包下的类是Activiti的核心业务对象。它们是真正的对象,而不是只有数据没有行为的假对象,搞java企业级开发的人也许已经习惯了下面

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。