您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > jBPM-jPDL学习笔记――流程设计与控制
jBPM-jPDL学习笔记——流程设计与控制背景本片文章,我们将从业务流程的设计开始,通过带领大家完成一个完整工作流的程序设计,来学习jPDL的使用。业务流程设计这里我们实现一个相对简化的公司借款申请流程。流程图如下:在jPDL中,与流程设计相关的文件有三个:processdefinition.xml、gdp.xml、processimage.jpg。其中processdefinition.xml是流程定义的描述文件;gpd.xml是对图形界面呈现的XML描述;而processimage.jpg则是对图形界面的快照。下面我们将展示本样例的流程定义文件。流程定义描述processdefinition.xml文件引用?xmlversion=1.0encoding=UTF-8?process-definitionxmlns=urn:jbpm.org:jpdl-3.2name=simplestart-statename=开始transitionname=借款发起to=填写借款申请actionname=Action_StartProcessclass=com.firstflow.action.StartProcessActionHander/action/transition/start-statetask-nodename=填写借款申请taskname=Task_AssignToInitiatorassignmentclass=com.firstflow.task.NewApplicationAssignmentHandler/assignment/tasktransitionto=部门经理审批name=提交申请actionname=Action_SubmitApplyclass=com.firstflow.action.SubmitApplyActionHandler/action/transition/task-nodetask-nodename=部门经理审批taskname=Task_ManagerApproveassignmentclass=com.firstflow.task.DepartmentManagerApproveAssignmentHandler/assignment/tasktransitionto=金额判定name=部门经理审批通过actionname=Task_ManagerApprovedclass=com.firstflow.action.ManagerApprovedActionHandler/action/transitiontransitionto=结束name=部门经理驳回actionname=Action_ManagerDisapproveclass=com.firstflow.action.ManagerDisapproveActionHandler/action/transition/task-nodenodename=财务拨款actionname=Action_AccountantProcessclass=com.firstflow.action.AccountantProcessActoinHandler/actiontransitionto=结束name=邮件通知actionname=Action_Mailclass=com.firstflow.action.SendMailActionHandler/action/transition/nodedecisionname=金额判定handlerclass=com.firstflow.decision.MoneyCheckDecisionHandler/handlertransitionto=总经理审批name=>5000元总经理审批/transitiontransitionto=财务拨款name=<5000元财务拨款/transition/decisiontask-nodename=总经理审批taskname=Task_PresidentApproveassignmentclass=com.firstflow.task.PresidentApproveAssignmentHandler/assignment/tasktransitionto=财务拨款name=总经理审批通过actionname=Action_PresidentApprovedclass=com.firstflow.action.PresidentApprovedActionHandler/action/transitiontransitionto=结束name=总经理驳回actionname=Action_PresidentDisapprovedclass=com.firstflow.action.PresidentDisapprovedActionHandler/action/transition/task-nodeend-statename=结束/end-state/process-definition在样例流程中,除了开始和结束结点外,我们定义了三种类型的结点:任务结点task-node任务结点是一个需要人工参与的结点类型。当流程进入结点时,会生成相应的任务实例(TaskInstatnce),并通过委派接口AssignmentHandler或jBPM表达式将任务委派给一个或多个特定的角色或参与者。结点自身进入等待状态,直到任务被参与者完成或者跳过,流程继续。判定结点decision判定结点的设计目标是根据上下文环境和程序逻辑,判定流程转向。通过指定一个实现DecisionHandlder接口的Java委派类或jBPM表达式,来返回转向(transition)的字符窜类型的名称(可以是中文哦),来达到决定流程方向的功能。普通结点node普通结点也可以定义相应的处理任务,通过定义相应的ActioinHandler类。同任务结点不同的是,普通结点定义的任务是由流程自动执行的,无须人工干预。三种结点都可定义结点事件(event):node-enter,该事件在流程进入结点时触发node-leave,该事件在流程离开节点是触发可以在事件上挂接ActioinHandler接口的实现类来完成一些特定的功能。三种节点都可以定义异步处理方式(async属性):异步处理意味着每个结点的事务处理是通过消息机制分离的,不再同一线程中统一调用执行。而是由消息监听线程从消息队列中取得消息体来运行相应得程序。此外我们定义了结点间的转向(transition),用来记录和处理状态的变迁。每个转向中,可以委派一个或多个的ActioinHandler接口实现类,负责处理节点变迁时的上下文状态变更及回调用户定义的处理程序。流程的程序接口说明动作处理接口(ActioinHandler)接口方法:voidexecute(ExecutionContextexecutionContext)throwsException该接口是jPDL中最常用的一个回调接口。从它的接口方法可以发现,它仅仅暴露了流程执行上下文变量ExecutionContext。用户程序通过ExecutionContext来了解流程的执行状态,并通过改变ExecutionContext中的属性值来影响流程的执行。ActioinHandler接口可以在所有能包含事件(event)、动作(action)元素的地方被回调。判定处理接口(DecisionHandlder)接口方法:Stringdecide(ExecutionContextexecutionContext)throwsException判定接口仅适用于判定节点(decision)中。从它的接口方法可以看出,方法要返回一个字符串型的结果,这个结果必须和判定节点拥有的转向(transition)集合中的一条转向名称相匹配。在DecisionHandlder的接口方法中一样能访问到ExecutionContext变量,这为判定提供了执行上下文的根据。当然,如果有必要,用户也可以在该接口中改变ExecutionContext中的变量值。委派处理接口(AssignmentHandler)接口方法:voidassign(Assignableassignable,ExecutionContextexecutionContext)throwsException;委派处理接口被用户任务元素(task)的委派(assignment)子元素中,它的职责很明确,就是将任务分配给指定的人员或角色。在AssignmentHandler接口的方法中,Assignable变量通常指任务实例(TaskInstance)。通过将ExecutionContext和TaskInstance两个变量都暴露给接口方法,用户就可以根据流程上下文情况,来决定要将指定的任务分配个谁。流程的部署用户使用jPDL的流程设计器定义业务流程,当然,你也可以直接用文档编辑器直接编辑processdefinition.xml定义文件。定义文档是可以直接被ProcessDefinition类载入使用的,但在正式运行的系统中,流程定义信息更多是使用关系型数据库来存储。从流程定义文件将数据导入流程数据库的过程,我们称之为流程部署。jPDL的流程部署文件包含processdefinition.xml的定义部分和Java处理器的代码部分,这些文件可以被一起打包成.jpdl的zip格式包而后上传服务器端。这个过程可以在流程设计器界面的“deployment”标签页中操作:这里我们着重要讲述的是接受部署文件上载的服务器端配置。在jBPM3.2的包中带着一个jPDL的管理控制台web应用,默认名字为jbpm-console。该应用带有接受流程定义包部署的程序,但不是最小化的。实际上完成流程部署功能的,只是jbpm-jpdl.jar核心包中的一个servlet类:org.jbpm.web.ProcessUploadServlet.完成这个Servlet的成功部署,需要以下工作:1.配置web.xml,将servlet配置成启动时加载,如下:引用web-appservletservlet-nameGDPDeployerServlet/servlet-nameservlet-classorg.jbpm.web.ProcessUploadServlet/servlet-classload-on-startup1/load-on-startup/servletservlet-mappingservlet-nameGDPDeployerServlet/servlet-nameurl-pattern/upload/*/url-pattern/servlet-mapping/web-app2.建立流程定义存储数据库表:Demo中,我们使用的数据库是MySQL的,在E:\Java\tools\jbpm-jpdl-3.2.2\db\目录下有个jbpm.jpdl.mysql.sql数据库脚本文件。但我们不能直接导入该文件,会提示有错误,应为该文件的SQL语句末尾少了分号,在批量执行时,MySQL报错。需要在每一行SQL的末尾添加一个分号,这样就可以用source命令导入了。3.配置Hibernate.cfg.xml由于jBPM的数据库持久化是依靠Hibernate进行的,因此需要配置Hibernate.cfg.xml使其适应我们的MySQL环境引用!--hibernatedialect--propertyname=hi
本文标题:jBPM-jPDL学习笔记――流程设计与控制
链接地址:https://www.777doc.com/doc-5928880 .html