jbpm5 持久化及流转流程剖析.doc_第1页
jbpm5 持久化及流转流程剖析.doc_第2页
jbpm5 持久化及流转流程剖析.doc_第3页
jbpm5 持久化及流转流程剖析.doc_第4页
jbpm5 持久化及流转流程剖析.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Jbpm5 持久化及流转流程剖析1 Jbpm5 持久化结构图Jbpm5实例流程图下面的文档讲解了基于该流程的步骤流程2 第一步启动任务流程时序图:2.1 启动TaskServer使用线程启动TaskServer,初始化持久化OrganizationEntity,将流程中需要使用到的 groupId,actorId.全部初始化到表中。2.2 启动流程1)根据路径解析*.bpmn2或*.bpmn 文件,放入到内存中。 在该类注册了相关的对象org.jbpm.bpmn2.xml.BPMNSemanticModule .2.2.1 开启事务2.2.2 Ksession开始执行任务在org.drools.persistence.SingleSessionCommandService 中 execute执行,流程实例为org.jbpm.ruleflow.instance.RuleFlowProcessInstance 的对象进入 cess.StartProcessCommand 中执行 excute2.2.3 执行StartNode执行StartNode,结点任务任务流转核心方法2.2.4 流程执行HumanTaskNode流程执行到HumanTask任务结点,引擎会执行org.jbpm.workflow.instance.node.WorkItemNodeInstance 这个实例类的internalTrigger方法,并持久化WorkItemInfo2.3 初始化Handler官方默认提供了WorkItemHandler的实现,com.carefx.workflow.handler.CommandBasedWSHumanTaskHandler。这个handler 就类似人工任务的范本,如果业务系统要做其他事情,可以适当的修改这个类就可以,例如:与外部组织机构交互等。2.3.1 初始化Client初始化TaskClient. 用于Client 与 服务端Server 交互2.3.2 建立Mina通信连接 Jbpm5 默认以 Mina 作为通信持久化通信桥梁2.3.3 注册事件Complete2.3.4 注册事件Fail2.3.5 注册事件Skip初始化CommandBasedWSHumanTaskHandler方法时,由客户端发起,向服务端中注册任务事件(TaskCompletedEvent, TaskFailedEvent, TaskSkippedEvent, TaskClaimedEvent等)。客户端(通过mina发起):服务端(通过mina接收):2.4 调用excuteWorkItem 方法调用excuteWorkItem 方法,目的初始化任务信息(任务名称、任务优先级、处理任务人员分配等),将得到的任务信息 一并发送到服务端进行持久化2.4.1 初始化Task任务信息2.4.2 调用Client添加任务信息2.4.3 AddTaskRequest由客户端(TaskClient) 向服务端(TaskServer)转发持久化 Task 请求该方法最后一行 通过发送 AddTaskRequest 请求,发送到服务端 ,由服务端持久化Task和 Content 信息2.4.4 持久化Task服务端(org.jbpm.task.service.TaskServerHandler)接收到客户端发送来的消息AddTaskRequest, 1)持久化Task信息,插入相关的表(PeopleAssignments_PotOwners,PeopleAssignments_ExclOwners,PeopleAssignments_Stakeholders,PeopleAssignments_Bas,PeopleAssignments_Recipients,Task, I18NTEXT)2.4.5 AddTaskResponse通过AddTaskResponse,由服务端(TaskServer) 发起请求通知客户端(TaskClient),通知客户端(org.jbpm.task.service.TaskClientHandler)添加任务完毕,持久化ProcessInstanceInfo, WorkItemInfo 数据此时路程已经执行到了HumanTask任务结点上,同时分配了任务给具体的人。进行了持久化操作。接着等待人员触发该任务2.4.6 返回任务结束返回sessionId,procesInstanceId给用户,外部系统保持以便获取持久化信息。2.5 关闭事务(提交事务)持久化processInfo,workItem 等,并对 sessionInfo 解锁2.6 执行流程的后续操作2.6.1 执行HumanTaskAfterNode拦截器2.6.2 执行StartAfterNode拦截器2.6.3 执行HumanTaskAfterNode拦截器2.6.4 Ksession.disponse()释放ksession3 第二步人工任务流程时序图:3.1 启动TaskServerTaskServer 保持启动状态,或者重新启动一个线程亦可。3.2 调用人工任务执行接口外部系统通过该接口实现人工任务的交互3.3 解析bpmn2读取原来流程的bpmn2 文件并解析到jbpm5 框架中3.4 通过kessionId 获取ksession通过第一步返回的sessionId.获取到持久化的sessionInfo 信息,以及 processInstance信息。同时processInstance流程实体采用数据锁,保证并发安全性3.5 初始化Client3.5.1 建立Mina 通信连接初始化TaskClient, 建立起Mina连接 3.5.2 注册事件Complete3.5.3 注册事件Fail3.5.4 注册事件Skip同时由客户端(TaskClient)发起,须向服务端(TaskServer)中注册任务事件(TaskCompletedEvent, TaskFailedEvent, TaskSkippedEvent, TaskClaimedEvent)。注册几个事件,就需要发起几个Mina 请求客户端(通过mina发起):服务端(通过mina接收):3.5.5 返回3.6 registerWorkItemHandler(容器注册人工任务Handler)通过handler注册后,jbpm5 会自动实现与业务系统的交互3.7 发起查询人工任务请求转发请求查询人工任务请求到 TaskClient3.7.1 QueryTasksAssignedAsPotentialOwner客户端(TaskClient)向服务端(TaskServer)发送请求。发起QueryTasksAssignedAsPotentialOwner 查询请求:查询分配的用户任务列表服务端(TaskServer) 接收QueryTasksAssignedAsPotentialOwner 请求3.7.2 QueryTaskSummaryResponse客户端(TaskClient)接收返回QueryTaskSummaryResponse 请求自此,一个来回后,客户端总算获取到了任务信息,接下来再往下走吧3.7.3 返回人工任务信息人工任务返回 包含在 responseHandler 中 通过该接口的getResults 既可获取3.8 发起开始执行任务请求(Start)1. 查看是否需要分配任务,查看是否有groupId,如果groupId不为空则可以让该组下的某个用户先领取任务。(此处不介绍分配任务情况)2. 开始执行任务3.8.1 OperationRequest客户端(TaskClient)发起开始执行任务请求服务端(TaskServer)接收开始执行任务请求3.8.2 OperationResponse客户端(TaskClient)接收请求自此,processInfo任务状态保存为InProcess.3.8.3 返回3.9 发起成功完成人工任务请求(Complete)完成任务,该流程极为繁琐。3.9.1 OpertationRequest客户端(TaskClient)向服务端(TaskServer)发送完成任务请求OperationRequest3.9.2 EventTriggerResponse由服务端(TaskServer)向服务端(TaskClient)发送EventTriggerResponse请求,目的需要客户端调用任务信息,促发getContentRequest,让Content做持久化3.9.3 OperataionResponse服务端(TaskServer)向服务端(TaskClient)发送OperationResponse请求。3.9.4 GetTaskRequest客户端(TaskClient)向服务端(TaskServer)发送GetTaskRequest请求,查询用户任务信息。3.9.5 GetTaskResponse服务端(TaskServer)向服务端(TaskClient)发送GetTaskResponse请求,返回任务信息,并执行GetCompletedTaskResponseHandler 中的execute方法3.9.6 GetContentRequest客户端(TaskClient)向服务端(TaskServer)发送GetContentRequest请求,查询Content信息3.9.7 GetContentResponse服务端(TaskServer)向服务端(TaskClient)发送GetContentResponse请求,3.9.8 调用WorkItem管理器 completeWorkItem接口3.9.9 Ksession开启事务3.9.10 Kession 执行CompleteWorkItemCommand3.9.11 结点开始流转3.9.12 调用HumanHandler(初始化)初始化下个结点的 workItem 信息3.9.13 初始化client3.9.14 注册CompleteEvent3.9.15 注册FailEvent3.9.16 注册SkipEvent3.9.17 excuteWorkItem3.9.18 初始化下个结点的Task在CommandBasedWSHumanTaskHandler 中执行初始化下个结点的Task3.9.19 发送创建任务持久化请求3.9.20 AddTaskRequest3.9.21 AddTaskResponse3.9.22 返回3.9.23 返回3.9.24 提交事务3.9.25 返回4 相关表操作步骤TaskClientTaskServer操作类型涉及的表2.1AOrganizationalEntity2.2.3ASessionInfo2.3.2AProcessInstanceInfo2.3.1AWorkItemInfo2.3.1AVariableInstanceLog, ProcessInstanceLog,NodeInstanceLog2.3.1AVariableInstanceLog,NodeInstanceLog2.4.4ATask,I18NText, PeopleAssignments_Bas,PeopleAssignments_PotOwners,PEOPLEASSIGNMENTS_EXCLOWNERS,PEOPLEASSIGNMENTS_RECIPIENTS,PEOPLEASSIGNMENTS_STAKEHOLDERS,Content,3.7UProcessInstanceInfo3.9.10AWorkItemInfo(新增下个结点)3.9.11AVariableInstanceLog

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论