传智播客JBPM2Advance.ppt

上传人:豆**** 文档编号:53153098 上传时间:2022-10-25 格式:PPT 页数:36 大小:282KB
返回 下载 相关 举报
传智播客JBPM2Advance.ppt_第1页
第1页 / 共36页
传智播客JBPM2Advance.ppt_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《传智播客JBPM2Advance.ppt》由会员分享,可在线阅读,更多相关《传智播客JBPM2Advance.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、高级软件人才实作培训专家高级软件人才实作培训专家!传智播客JBPM2Advance Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 课程目标l掌握各种节点的基本用法l理解各种节点的应用场景在什么样的需求驱动下用哪一种节点以及用节点内部何种处理机制来实现满足需求l了解jBPM对同一问题可能有多种解决方案高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 内容lstart-statele

2、nd-stateltask-nodelnodelstateldecisionlfork/joinlsubprocesslsuperstatelactionleventlscriptltimerl任务分配给多个参与者lswimlanelpooled actorsltask controllerlJobExecutorlmail-nodel如何添加新的节点类型高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 start-state&end-statelstart-state标识流程开始边界支持事件类型:node-leave可以包含task元素(需要在流程实例创建之前进行认证)如果

3、指定了task元素,则task的参与者只能通过认证的方式来分配,并且可以通过swimlane来记录下任务的参与者lend-state标识流程的结束边界支持事件类型:node-enter不需要transition元素无实例信息,所以不会被持久化l典型用法 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 节点task-nodel流程实际业务逻辑组成task的实例信息被持久化l支持事件类型node-enter|node leavelattributesignalcreate-tasksend-tasksl典型形式 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育

4、 节点task-node(task)ltask有四种事件类型:task-create,task-assign,task-start,task-endltask的assignment 可以有多种方式assignmentHandleractor-id=“expression”pooled-actor=“1,2,3”swimlane 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 节点task-node(补充)lgraph 元素中包括task-node在内的所有节点都不能在流程的执行过程中动态的增加l如果有类似的需求,可以通过程序创建多个task的实例高级软件人才实作培训专家高级

5、软件人才实作培训专家!北京传智播客教育 任务分配给多个人(一)l阻止jBPM自动创建任务实例 l什么时候节点完成?signal 属性用来控制在什么状态下当前节点结束,流程执行进入下一个节点高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 任务分配给多个人(二)l程序动态控制任务实例的创建个数 public void execute(ExecutionContext executionContext)throws Exception TaskMgmtInstance tmi=executionContext.getTaskMgmtInstance();TaskNode task

6、Node=(TaskNode)executionContext.getNode();/now,2 task instances are created for the same task.String userIds=(String)executionContext.getContextInstance().getVariable(userId);String ids=userIds.split(,);for(int i=0;i ids.length;i+)TaskInstance tia=tmi.createTaskInstance(taskNode.getTask(“mgraudit”),

7、executionContext.getToken();/必须的加token参数 tia.setActorId(idsi);高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 swimlanel是流程角色可以用来实现不同的任务由同一个人来执行的效果值应或者在定义时确定,或者在运行期引用时获得可以在start-state节点里添加一个任务,用swimlane机制来记录流程的启动者 .高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 Pooled Actorl实现任务列表的pull效果之前我们所采用的都是engine将任务push到某一个actor也可以将任务先分

8、配给一组用户一组actors实际上在应用中是属于同一组的用户 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 Pooled Actor(续)l任务最终还是需要某一具体的单个actor来完成在获取任务时是一种竞争机制先到先得(actorId应当在pooledActors集合中)List list=jbpmContext.getTaskMgmtSession().findPooledTaskInstances(currentUser);for(int i=0;ilist.size();i+)TaskInstance ti=(TaskInstance)list.get(i);ti

9、.start(currentUser);/将任务的参与者设置成自己/分配任务 public class PooledActorAssignment implements AssignmentHandler public void assign(Assignable assignable,ExecutionContext executionContext)throws Exception String poolActors=1,2;assignable.setPooledActors(poolActors);高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 state 和nod

10、e节点l 是纯粹的wait节点,除非主动的调用signal,否则一直处于等待状态;比如,和外部系统交互,等待外部系统响应成功之后,在继续process的执行l 是用来执行代码的一种节点,我们可以理解为自动节点,无须人工干预,将此类节点建模到流程定义中,是为了表达一些有特殊意义的逻辑(这些逻辑无须人工干预,完全自动运行);比如发送邮件如果node节点中有action,则需要主动的调用leaveNode方法离开节点,如果节点没有action,将自动结束l需要注意:程序阻塞 和 状态等待是不同的概念高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 decision节点l路由节点,解

11、决流转的路由问题l有两种处理方法在流程定义中用decision节点,可以用condition/expression/handler#var 10#var 10 不在流程定义中进行定义在建模时,前一个节点有多条transition流出(同前一种方案比,就是少了decision节点)当前一任务结束时,显式指定transition高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 decision节点(续)l需要注意:condition 里面的表达式求值用的是bean shell组件总是取第一个结果为true的transition作为流转的transition(按在定义中的顺序),如

12、果没有true的存在,则取第一个也可以在decision节点中,利用实现DecisionHandler的类来返回transition的值 public static class LeadEvaluator implements DecisionHandler private static final long serialVersionUID=1L;public String decide(ExecutionContext executionContext)int budget=(Number)executionContext.getContextInstance().getVariable(

13、budget).intValue();if(budget1000)return important lead;else if(budget100)return lead;return beggars;高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 fork/join节点 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 fork/join节点 续l特点用来支持多路分支流转,充分体现业务模型各个分支可异步执行如果token(parent token)遇到fork节点,会自动的分裂成多个child token,此时,parent token指向fork节点,c

14、hild token指向各个分支节点每次分支的token往前移动时,都会检查是否需要在结束自己的同时也把parent token 往前移动fork 各个分支上的transition 都必须有名字,否则生成的taskInstance可能不正常;l局限性对于需要在运行期间创建个数不确定的任务实例的需求,应用程序配合的方式来解决高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 process-state:子流程节点l解决流程嵌套的需求l子流程是一个独立的jBPM流程 l需要注意:主流程和子流程之间的数据传递:mapped-name的值是变量在子流程中名称父流程和子流程分开部署如果想

15、让父流程在运行期间才和子流程进行挂接,则需要加binding=late 如果需要在部署期间实现流程耦合,则需要子流程先部署,并注意jbpmContext初始化的位置高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 super-statel用来将一组节点组合在一起 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 actionl特点是java类,用来引入附加的处理逻辑可以放在node内,也可以放在events中(node-enter)可以用在多个元素之内,用来辅助当前节点完成业务逻辑会作为delegate class事件中的action可以异步执行 async

16、=truepublic class YourClass implements ActionHandler public void execute(ExecutionContext executionContext)/your code goes here.高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 eventlattributetype 不同的节点支持的事件类型不同,是由event元素所在的node的类型决定的l可以支持action/script/create-timer/cancel-timerl其他transition 只有一个事件 高级软件人才实作培训专家高级软件

17、人才实作培训专家!北京传智播客教育 Timer-模型 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 Timer-工作要点l在流程定义的节点中加入声明 System.out.println(here);l定义在部署时存入数据库表Timer中l理解Business Calendar的涵义l运行时,由Timer runner来扫描Timer表执行符合调度条件的Timer逻辑,Timer是job的子类 JobExecutorServlet org.jbpm.job.executor.JobExecutorServlet 1 高级软件人才实作培训专家高级软件人才实作培训专家!北京传

18、智播客教育 Script&ExpressionlScriptBeanshell scriptlExpressionBased on JSP EL language(JSTL)It use#以下变量在Script中可以直接引用:executionContexttokennodetasktaskInstance以下变量在expression环境中可以直接引用:taskInstance processInstance processDefinitiontokentaskMgmtInstancecontextInstance高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 TaskC

19、ontrollerl用户界面到流程实例变量之间的桥梁任务实例创建的时候从流程实例变量获取变量信息存储到task变量中,提交任务的时候从task变量写回流程实例变量实现了流程实例变量和任务实例变量之间的信息传递同样会被序列化 access:创建任务实例时是否需要从流程实例变量中copy,以及是否需要写回到流程实例变量(任务结束时)以及是否是必须的mapped-name:在taskinstance中使用的名字高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 文档管理l基于JCR对文档进行管理为了解决文档审批过程中,文档的版本及存储问题高级软件人才实作培训专家高级软件人才实作培训专

20、家!北京传智播客教育 发邮件lmail action readmylips nomoretaxeslmail-node只能有一个transition元素 高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 发邮件(续)ltask 的notify 属性如果是true,则会自动添加task-assignment时间,在任务分配时触发,会给接收人发邮件【但是感觉目前的代码实现有问题】lTask reminder依赖于timer高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 添加新的节点类型l在org/jbpm/graph/node/node.types.xml中添

21、加节点信息:l编写自己的节点实现类主要是覆盖read方法和execute方法高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 需要补充内容一lDelegation class的版本问题:如何做到delegation class的版本和流程定义的版本相一致呢?打包上传定义的时候,将类放到classes/目录下面,这样在加载delegation class的时候,会从定义中的fileDefinition中加载(ProcessClassLoader),注意,系统是先从bootstrap class loader中加载类,如果没有才会加载数据库中的类。高级软件人才实作培训专家高级软件

22、人才实作培训专家!北京传智播客教育 需要补充内容二:业务术语l签收为了标识一个任务实例是否由被分配者执行过我们可以用taskInstance.start()来实现此功能l会签多个人对同一个任务进行办理实际上是一个任务的多个实例由不同的人来完成l传阅在实际的业务中,表示此任务只需要参与者浏览,而不需要对数据进行操作,从业务的角度有别于会签l【其他】高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 实例练习l目的l体会各种节点的效果和熟悉各种节点的用法l主要涉及到decision节点子流程actionnode节点高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 流程图示例:主流程高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 子流程:财务处审批高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 练习步骤l编制主流程将财务处审批定义为单独节点l调试主流程l编制子流程l修改主流程,加入子流程节点l整体调试高级软件人才实作培训专家高级软件人才实作培训专家!北京传智播客教育 The End有问题可以发邮件给我

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁