jbpm工作流框架
来源:互联网 发布:linux 删除全部内容 编辑:程序博客网 时间:2024/06/06 08:52
整体流程:
用户->流程设计器->流程定义说明文档(xml和png)->工作流引擎(解释和执行工作流,提供的api支持外部调用)->流程信息保存到数据库中(hibernate或mybatis框架)
开发流程:
1:创建一个java项目
2:导入依赖包(15个jar包)
3:提供jbpm框架的配置文件
(核心配置文件 -- jbpm.cfg.xml,hibernate或mybatis配置文件 jbpm.hibernate.cfx.xml,日志配置文件 logging.properties-- 见example文件下的配置文件)
4:设计流程(安装框架设计插件 jbpm-gdp 创建 jbpm 4 prcess definition 生成xml 和png文件)
5:创建流程引擎对象
5.1非单例实现
Configuration config=new Configuration();config.setResource("jbpm.cfg.xml");ProcessEngine processEngine=config.buildProcessEngine();
5.2单利实现
ProcessEngine processEngine=Configuration.getProcessEngine();
6:部署引擎
6.1项目文件部署
NewDeployment deployment = processEngine.getRepositoryService().createDeployment();deployment.addResourceFromClasspath("processdesign.jpdl.xml");deployment.addResourceFromClasspath("processdesign.png");String id = deployment.deploy(); //部署,返回的是部署id,每次部署id均不一样
6.2压缩项目文件部署
NewDeployment deployment = processEngine.getRepositoryService().createDeployment();ZipInputStream zipInput=new ZipInputStream(new FileInputStream(new File("D:\\workspace\\jbpm\\process\\hello.zip")));deployment.addResourcesFromZipInputStream(zipInput);String id = deployment.deploy(); //部署
ps:每次完成部署会在数据库的deploy*表里插数据
7:删除流程
String deploymentId = "1"; //部署时产生的idprocessEngine.getRepositoryService().deleteDeployment(deploymentId); //有正在使用的流程会报错processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId); //有正在使用的流程全部删除
8:查询所有流程
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();query.list();
9:获取流程的附件文件
String deploymentId = "1";Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId); // 获取所有文件名for (String name : names) {InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);//...输出流写到本地}
String processdefinitionid = "requestprocess-2";ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceById(processdefinitionid); //启动获取一个流程对象,往execution 和 task 表里插入数据System.out.println("id:"+processInstance.getId()+",name"+processInstance.getName()+",key"+processInstance.getKey());
String userId = "zhangsan";TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();taskQuery.assignee(userId);// 按照用户id来过滤,查看所有用户则跳过List<Task> list = taskQuery.list();for(Task task:list){System.out.println(task.getId()+"/"+task.getName());}
String taskId = "20002"; //是我的任务列表里的task.getId()processEngine.getTaskService().completeTask(taskId); //清除task表的id对应的数据,修改his_task对应的数据为complete,新增task下一个任务数据,并在his_task里插入历史数据ps:task表存储的是正在办理的任务,当整个任务所有人都执行结束,则当前任务在task表里数据全部清除,所有逻辑在his_task历史表里
13:跨任务执行(跨过当前任务节点,执行下一个任务节点,一般适用于管理员)
String executionId="requestprocess.30001"; //需要跳过的task任务对应的executionid,见通过用户获取当前任务代码//processEngine.getExecutionService().signalExecutionById(executionId); 该函数有异常,需要考虑分支路线就必须调用2个参数的重载函数processEngine.getExecutionService().signalExecutionById(executionId, "to task3"); //to task3是xml里节点的路线name
final ps:
jbpm每次发布后就可以启动一个流程实例,进而可以分每个用户按流程往下执行。
具体服务如下:
对象:ProcessEngine类型对象
服务:getRepositoryService 流程定义的部署,删除,查询,获得流程定义文档,对应的都是一些静态信息
getExecutionService启动一个流程实例,跳转到下一步
getTaskService查询我的任务列表,办理任务
查询对象:
2)流程实例查询对象(启动流程时使用)---processEngine.getExecutionService().createProcessInstanceQuery();
3)任务查询对象(任务查询)-------processEngine.getTaskService().createTaskQuery();
4)部署查询对象(流程部署使用)-------processEngine.getRepositoryService().createDeploymentQuery();
工作流框架对象:
1)Deployment----部署对象,对应就是一次部署
2)Execution-----执行对象
3)ProcessDefinition----流程定义对象,一个流程的步骤说明
4)ProcessInstance---流程实例对象,其实就是一个特殊的执行对象,特指从流程开始到结束的最大分支(流程启动,包含流程所有运行阶段)
5)Task----任务对象
- 【Java】工作流框架JBPM
- jbpm工作流框架
- JBPM工作流框架应用
- Jbpm工作流与ssh框架集成
- 工作流框架JBPM的基本应用
- 工作流框架JBPM的基本应用
- 宅急送 项目第八天 JBPM工作流框架
- JBPM工作流
- JBPM工作流
- JBPM工作流
- JBPM工作流
- JBPM工作流
- JBPM工作流
- JBPM工作流
- jBPM工作流
- JBPM工作流
- JBPM-工作流
- 【工作流】:JBPM
- JS URL传中文参数引发的乱码问题
- CSDN使用:使用CSDN的MarkDown编辑器,以及MarkDown编辑器的帮助文档
- matlab图像预处理
- Zoj——3203 Light Bulb
- 买卖股票的最佳时机-LintCode
- jbpm工作流框架
- wrap_content引发的血案
- XML文件和JSON文件的解析及生成
- 截取邮箱后缀名,拼接访问邮箱地址
- 刷新页面后,数据保留在原页面方法(session信息共享,ajax局部刷新)
- Invocation of init method failed; nested exception is org.hibernate.MappingException
- 关于java中的Properties类
- TensorFlow 安装
- Java中事务的特性