Jbpm5持久化及流转流程剖析1Jbpm5持久化结构图Jbpm5实例流程图下面的文档讲解了基于该流程的步骤流程2第一步启动任务流程时序图: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第二步人工任务流程时序图: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,TaskClaime...