jbpm5 持久化及流转流程剖析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Jbpm5持久化及流转流程剖析1Jbpm5持久化结构图ClientRuntimeKSessionDBJbpmTaskDBTaskClientTaskHandlerexecuteWorkItem()completeWorkItem()TaskServerHandlerTaskServerJbpm5EngineTaskClientHandlerTaskInitresponseResponseHandlerksessionrequestbpmnBuilderRulesCustomTaskServerSessionTaskServiceServerJbpm5实例流程图下面的文档讲解了基于该流程的步骤流程2第一步启动任务流程时序图:TaskServer(TaskServerHandler)顶层包::外部系统TaskClient(TaskClientHandler)TaskHandlerFlowEngine1.启动TaskServer,持久化Organization2.启动流程2.1解析bpmn2文件2.2开启事务2.3ksession开始执行任务2.3.1执行StartNode,执行beforeNode拦截器等2.3.2执行HumanTaskNode,执行beforeNode拦截器等3.初始化handler3.1初始化Client3.2建立Mina通信连接3.3注册事件Complete3.4注册事件Fail3.5注册事件Skip4.调用excuteWorkItem方法4.1初始化Task任务信息4.2调用Client添加任务信息4.3AddTaskRequest4.5AddTaskResponse4.4持久化Task4.6返回4.7返回5关闭事务6.2执行StartAfterNode拦截器6.1执行HumanTaskAfterNode拦截器第一步人工任务执行时序图6.3ksession.dispose()6.3持久化processInfo,workItem等2.1启动TaskServer使用线程启动TaskServer,初始化持久化OrganizationEntity,将流程中需要使用到的groupId,actorId.全部初始化到表中。2.2启动流程1)根据路径解析*.bpmn2或*.bpmn文件,放入到内存中。在该类注册了相关的对象org.jbpm.bpmn2.xml.BPMNSemanticModule.2.2.1开启事务2.2.2Ksession开始执行任务在org.drools.persistence.SingleSessionCommandService中execute执行,流程实例为org.jbpm.ruleflow.instance.RuleFlowProcessInstance的对象进入org.drools.command.runtime.process.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.3AddTaskRequest由客户端(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.5AddTaskResponse通过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.4Ksession.disponse()释放ksession3第二步人工任务流程时序图:TaskServer(TaskServerHandler)外部系统TaskClient(TaskClientHandler)TaskHandlerFlowEngine1.启动TaskServer,持久化Organization2.调用人工任务执行接口6.registerWorkItemHandler(容器注册人工任务Handler)5.初始化Client5.1建立Mina通信连接5.2注册事件Complete5.3注册事件Fail5.3注册事件Skip8.发起开始执行任务请求(Start)9发起成功完成人工任务请求(Complete)8.1OperationRequest9.3OperationResponse8.2流程实例状态改变为InProcessWorkFlowInterface3.解析bpmn24.通过ksessionId获取ksession5.4返回7.发起查询人工任务请求7.1.QueryTasksAssignedAsPotentialOwner7.2.QueryTaskSummaryResponse7.3返回人工任务信息8.3OperationResponse8.4返回9.1OperationRequest9.2EventTriggerResponse9.6GetContentRequest9.7GetContentResponse9.8调用WorkItem管理器completeWorkItem接口9.10ksession执行CompleteWorkItemCommand9.9ksession开启事务9.11开始结点流转9.12调用HumanTaskHandler(初始化)9.13初始化Client9.14注册CompleteEvent9.15注册FailEvent9.16注册SkipEvent9.17executeWorkItem9.18初始化下个结点的Task9.19发送创建任务持久化请求9.20AddTaskRequest9.21AddTaskResponse9.22返回9.23返回9.24事务提交9.25返回9.4GetTaskRequest9.5GetTaskResponse3.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.6registerWorkItemHandler(容器注册人工任务Handler)通过handler注册后,jbpm5会自动实现与业务系统的交互3.7发起查询人工任务请求转发请求查询人工任务请求到TaskClient3.7.1QueryTasksAssignedAsPotentialOwner客户端(TaskClient)向服务端(TaskServer)发送请求。发起QueryTasksAssignedAsPotentialOwner查询请求:查询分配的用户任务列表服务端(TaskServer)接收QueryTasksAssignedAsPotentialOwner请求3.7.2QueryTaskSummaryResponse客户端(TaskClient)接收返回QueryTaskSummaryResponse请求自此,一个来回后,客户端总算获取到了任务信息,接下来再往下走吧3.7.3返回人工任务信息人工任务返回包含在responseHandler中通过该接口的getResults既可获取3.8发起开始执行任务请求(Start)1.查看是否需要分配任务,查看是否有groupId,如果groupId不为空则可以让该组下的某个用户先领取任务。(此处不介绍分配任务情况)2.开始执行任务3.8.1OperationRequest客户端(TaskClient)发起开始执行任务请求服务端(TaskServer)接收开始执行任务请求3.8.2OperationResponse客户端(TaskClient)接收请求自此,processInfo任务状态保存为InProcess.3.8.3返回3.9发起成功完成人工任务请求(Complete)完成任务,该流程极为繁琐。3.9.1OpertationRequest客户端

1 / 23
下载文档,编辑使用

©2015-2020 m.111doc.com 三一刀客.

备案号:赣ICP备18015867号-1 客服联系 QQ:2149211541

×
保存成功