JBPM简介
什么是jbpm
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
为什么用jbpm
业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被
JBPM所需要的jar包
1.创建表结构
@Test public void create(){ new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory(); System.out.println("ok"); }
2.创建ProcessEngine对象
ProcessEngine pro=Configuration.getProcessEngine();
3.部署流程定义
@Test //部署流程定义 public void getDeploy(){ String re=pro.getRepositoryService() .createDeployment() .addResourceFromClasspath("jbpms.jpdl.xml") .addResourceFromClasspath("jbpms.png").deploy(); System.out.println(re); }
4. 启动流程实例 通过key,key是process节点中的key,如果不写,默认为name的值
@Test public void testStart(){ //启动流程实例 通过key,key是process节点中的key,如果不写,默认为name的值 ProcessInstance pi=pro.getExecutionService().startProcessInstanceByKey("jbpms"); System.out.println("start ok!"); System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId()); }
5.查看任务列表
@Test public void selectTask(){ //查看任务列表 String user="hh"; String user2="boss"; List<Task> tasks = pro.getTaskService().findPersonalTasks(user); for (Task task : tasks) { System.out.println("任务ID:"+task.getId()+"\t任务名称:"+task.getName()+"\t任务的办理人:"+task.getAssignee()); }
6.查询当前任务所在点
@Test public void findSelect(){ //查询当前任务所在点 String name=pro.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpms.130001").uniqueResult().findActiveActivityNames().toString(); System.out.println(name); }
7.办理任务
@Test public void testCompleteTask(){ pro.getTaskService().completeTask("130002"); System.out.println("ok"); }
流程管理
public class ProcessTest { ProcessEngine pro=Configuration.getProcessEngine(); @Test public void findAll(){ //查询所有流程定义 List<ProcessDefinition> list=pro.getRepositoryService().createProcessDefinitionQuery().list(); for (ProcessDefinition pd : list) { System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey:"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId()); } }
查看所有流程定义的信息
@Test public void findAll(){ List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().list(); for (ProcessDefinition pd : list) { /** * id的格式 name-版本号 * name:jbpm.cfg.xml文件中根据点的name属性值 * key,如果在配置文件中指定了,那么就是根据点中的test的 值,如果不指定默认是name的值 * version版本号,同一个名称的第一个为1后续的自增 */ System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId()); } }
删除指定id流程信息
@Test public void deleteByid(){ pe.getRepositoryService().deleteDeploymentCascade("100001"); System.out.println("删除成功"); }
删除指定key的所有流程信息
@Test public void deleteByids(){ //01.取出当前key对应的版本信息 List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list(); for (ProcessDefinition pd : list) { pe.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId()); } System.out.println("删除成功"); }
获取流程图
@Test public void getImage() throws Exception{ String deploymentId="10001"; String resouceName="jbpmtest.png"; //根据id去查询所有对应的资源名 Set<String> resourceNames = pe.getRepositoryService().getResourceNames(deploymentId); for(String item: resourceNames){ System.out.println("资源名称:"+item); } InputStream in=pe.getRepositoryService().getResourceAsStream(deploymentId, resouceName); OutputStream os=new FileOutputStream("D:\\1.png"); int a=in.read(); while (a!=-1) { os.write(a); a=in.read(); } in.close(); os.close(); System.out.println("成功"); }
部署zip格式的资源
public void addZipResource(){ InputStream is=this.getClass().getClassLoader().getResourceAsStream("two.zip"); ZipInputStream zs=new ZipInputStream(is); String id= pe.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy(); System.out.println("部署成功:deploymentid:"+id); }
找到所有最新版本的流程定义
@Test public void findNewVersionInfo(){ //查询所有 List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery()// .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION) .list(); Map<String,ProcessDefinition> map=new java.util.HashMap<String,ProcessDefinition>(); for (ProcessDefinition item : list) { map.put(item.getKey(),item); } for (ProcessDefinition pd : map.values()) { System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId()); } }
设置流程变量
public void setVariable() { pe.getExecutionService().setVariable("jbpm01.90001", "请假天数", 18); } @Test public void getVariable() { Integer days = (Integer) pe.getExecutionService().getVariable("jbpm01.90001", "请假天数"); System.out.println(days); }
时间: 2024-10-13 00:12:24