JBPM之流程定义管理,流程执行管理
其实,我们学习JBPM框架的时候,只要弄懂了什么是JBPM的流程定义,流程执行的管理,那么我们在OA做流转审批的时候,就直接可以来用JBPM了,只需要通过Spring来整合一下就行了。那么下面来说一下吧。
1.什么是JBPM?
jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM 具有很强的灵活性,他可以应用的桌面程序,也可以应用的Web 服务,而且提供了一种图形化的业务分析建模工具,并可以将这些业务模型部署的数据库中,任务实例的执行也可以被持久化。
2.JBPM可以来做什么?
业务流程
UML
图形化,定义
控制流程跳转,
分派任务
定时,执行任务,
事件处理等等
3. JBPM入门:
在了解JBPM的时候,我们首先要明白一个概念,那就是什么是流程图? 一个流程图是由节点(Node )和转换(Transition )组成的。一个流程就是一个有向图,流程图有多种表示方式:XML,Java 类, 数据库中的记录。那么有哪些节点呢? 比如start节点(流程的入口),end节点(流程的结束),state节点(状态节点),我用下面很好的一张图来说明一下,大家看着图就很清楚了。
一个流程图
像流程图这个,一般都是给用户看的,而让电脑识别的是xml文件,eclipse中安装JBPM插件后,我们画上流程图结构示意图之后,相应的xml文件会自动生成,这个我们不用自己写。
下面就说说,有了xml文件(也就是表示了让服务器识别xml文件)之后,我们就在java代码中如何定义一个流程,如何对流程定义进行管理,这里我贴出代码来。
<span style= "font-size:14px" > public class ProcessDefinitionManage { private ProcessEngine processEngine = Configuration.getProcessEngine(); @Test public void deploy_1() { String deploymentId = processEngine.getRepositoryService() .createDeployment() .addResourceFromClasspath("helloworld/test.jpdl.xml" ) .addResourceFromClasspath("helloworld/test.png" ) .deploy(); System.out.println("deploymentId = " + deploymentId); } @Test public void deploy_2() { InputStream in = this .getClass().getClassLoader().getResourceAsStream( "helloworld/helloworld.zip" ); ZipInputStream zipInputStream = new ZipInputStream(in); String deploymentId = processEngine.getRepositoryService() .createDeployment() .addResourcesFromZipInputStream(zipInputStream) .deploy(); System.out.println("deploymentId = " + deploymentId); } @Test public void findAll() { List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY) .list(); for (ProcessDefinition pd : list) { System.out.println("id=" + pd.getId() + ", name=" + pd.getName() + ", key=" + pd.getKey() + ", version=" + pd.getVersion() + ", deploymentId=" + pd.getDeploymentId()); } } @Test public void findAllLatestVersions() { List<ProcessDefinition> allList = processEngine.getRepositoryService() .createProcessDefinitionQuery() .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION) .list(); Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>(); for (ProcessDefinition pd : allList) { map.put(pd.getKey(), pd); } for (ProcessDefinition pd : map.values()) { System.out.println("id=" + pd.getId() + ", name=" + pd.getName() + ", key=" + pd.getKey() + ", version=" + pd.getVersion() + ", deploymentId=" + pd.getDeploymentId()); } } @Test public void deleteById() { String deploymentId = "1" ; processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId); } @Test public void deleteByKey() { List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .processDefinitionKey("helloworld" ) .list(); for (ProcessDefinition pd : list) { processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId()); } }</span>
当我们部署流程定义文件后,剩下的就是流程的执行,任务的完成,只要弄对流程执行的管理之后,相信大家就能够对JBPM就有所认识了。
public class ProcessInstanceExecute { private ProcessEngine processEngine = Configuration.getProcessEngine(); @Test public void startProcessInstance() { ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test" ); System.out.println("id=" + pi.getId() + ", state=" + pi.getState() + ", processDefinitionId=" + pi.getProcessDefinitionId()); } @Test public void findMyTaskList() { String userId = "总经理" ; List<Task> list = processEngine.getTaskService() .createTaskQuery() .assignee(userId) .list(); System.out.println("【未办理的任务列表如下】" ); for (Task t : list) { System.out.println("id=" + t.getId() + ", name=" + t.getName() + ", assignee=" + t.getAssignee() + ", createTime=" + t.getCreateTime() + ", executionId=" + t.getExecutionId()); } } @Test public void completeTask() { String taskId = "120001" ; processEngine.getTaskService().completeTask(taskId); } }
转自:http://blog.csdn.net/shuishou113/article/details/13296463