- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
activiti5源码与流程活动自动与手工触发执行例子.docx
HYPERLINK /blog/1338553 Activiti源码分析Activiti的基础编程框架
Activiti基于Spring,ibatis等开源中间件作为软件平台,在此之上构建了非常清晰的开发框架。上图列出了Activiti的核心组件。
1.ProcessEngine:流程引擎的抽象,对于开发者来说,它是我们使用Activiti的facade,通过它可以获得我们需要的一切服务。
2.XXService(TaskService,RuntimeService,RepositoryService...):Activiti按照流程的生命周期(定义,部署,运行)把不同阶段的服务封装在不同的Service中,用户可以非常清晰地使用特定阶段的接口。通过ProcessEngine能够获得这些Service实例。TaskService,RuntimeService,RepositoryService是非常重要的三个Service:
TaskService:流程运行过程中,与每个任务节点相关的接口,比如complete,delete,delegate等等
RepositoryService:流程定义和部署相关的存储服务。
RuntimeService:流程运行时相关服务,如startProcessInstanceByKey.
?
关于ProcessEngine和XXService的关系,可以看下面这张图:
?
?
3.CommandContextIntercepter(CommandExecutor):Activiti使用命令模式作为基础开发模式,上面Service中定义的各个方法都对应相应的命令对象(xxCmd), Service把各种请求委托给xxCmd,xxCmd来决定命令的接收者,接收者执行后返回结果。而CommandContextIntercepter顾名思义,它是一个拦截器,拦截所有命令,在命令执行前后执行一些公共性操作。比如CommandContextIntercepter的核心方法:
?
Java代码??
??public?T?T?execute(CommandT?command)?{??
????CommandContext?context?=?commandContextFactory.createCommandContext(command);??
??
????try?{??
//执行前保存上下文??
??????Context.setCommandContext(context);??
??????Context.setProcessEngineConfiguration(processEngineConfiguration);??
??????return?next.execute(command);//执行命令??
????????
????}?catch?(Exception?e)?{??
??????context.exception(e);??
????????
????}?finally?{??
??????try?{??
//关闭上下文,内部会flush?session,把数据持久化到db等??
????????context.close();??
??????}?finally?{??
//释放上下文??
????????Context.removeCommandContext();??
????????Context.removeProcessEngineConfiguration();??
??????}??
????}??
??????
????return?null;??
??}??
?
关于命令模式的细节说明,网上有很多资料,这里不展开。我只是想说一下我看到Activiti的这种设计之后的两点感受:
1)一个产品或者一个项目,从技术上必须有一个明确的、唯一的开发模型或者叫开发样式(真不知道怎么说恰当),我们常说希望一个团队的所有人写出的代码都有统一的风格,都像是一个人写出来的,很理想化,但做到很难,往往我们都是通过“规范”去约束大家这样做,而规范毕竟是程序之外的东西,主观性很强,不遵守规范的情况屡屡发生。而如果架构师给出了明确的开发模型,并使用一些基础组件加以强化,把程序员要走的路规定清楚,那你想不遵守规范都会很难,因为那意味着你写的东西没发工作。就像Activiti做的这样,明确以Command作为基本开发模型,辅之以Event-Listener,这样编程风格的整体性得到了保证。
2)使用命令模式的好处,我这里体会最深的就是 职责分离,解耦。有了Command,各个Service从角色上说只是一些协调者或者控制者,他不需要知道具体怎么做,他只是把任务交给了各个命令。直接的
您可能关注的文档
- 18雷雨ppt课件.ppt
- sogou创新式营销.pptx
- 老年医学保健 第四讲健康的四大基石.ppt
- 第十二届中国商业地产招商大会暨山西省首届商业地产招商大会.doc.gzip.doc
- 专题02 简易逻辑-备战2015高考高中文数6年高考真题分项版精解精析(原卷版).doc
- 第四篇:设计国际营销策略简1.ppt
- 微积分(第二版吴传生)第二章 第5节 极限存在准则教案.ppt.ppt
- 中央美术学院历年考题大汇总.doc
- 2015中国大学排行榜700强揭晓,北大清华最受外国政要青睐.doc
- 经典阅读推荐书目(2015版).docx
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)