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

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

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
activiti5源码与流程活动自动与手工触发执行例子activiti5源码与流程活动自动与手工触发执行例子

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从角色上说只是一些协调者或者控制者,他不需要知道具体怎么做,他只是把任务交给了各个命令。直接的好处是臃肿的、万能的大类没有了。而这往往是我们平时开发中最深恶痛绝的地方。??4.核心业务对象(Task,ProcessInstance,Exe

文档评论(0)

yyanrlund + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档