首页 > 代码库 > JBPM
JBPM
JBPM
1.什么是JBPM4.4业务流程管理框架?
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。它使用Hibernate来管理它的数据库,只要是Hibernate支持的数据库,它都支持
2.ProcessEngine的核心业务
RespositoryService:流程定义的服务接口:包括流程定义的部署、查询、删除等操作。
ExecutionService: 流程执行的服务接口:包括启动流程、实例推进、设置变量等操作。
ManagementService:Web管理控制台的服务接口,包括获得消息和计时器的操作。
HistoryService:历史库的服务接口:包括对流程实例、活动实例进行查询。某个流程定义中的所有的活动的平均持续时间,某个流程定义中的某个活动实例的转移的执行次数等操作。
IdentityService:主要包括用户、组、成员关系等相关的操作
CommondService:command模式的服务接口,实际上将客户端请求全部封装在一个调用接口中,execute(Command cmd),由这个接口去调用command接口的众多实现类。
搭建项目进行测试
一.导入Jar包
二.创建配置文件
在jbpm.hibernate.cfg.xml文件中进行配置oracle数据库以及关联其他配置文件
三.新建一张jbpm流程图
四.编写测试代码
4.1创建数据表,共计18张
@Test public void create(){ //创建表 18张 new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory(); System.out.println("ok"); }
4.2创建ProcessEngine对象
//通过默认的配置文件生成单例的processEngine对象 ProcessEngine pro=Configuration.getProcessEngine();
4.3部署流程定义(jbpms.jpdl.xml和jbpms.png是我们创建的文件,以及文件生成的图片)
@Test public void getDeploy(){ //部署流程定义 String re=pro.getRepositoryService() .createDeployment() .addResourceFromClasspath("jbpms.jpdl.xml") .addResourceFromClasspath("jbpms.png").deploy(); System.out.println(re); }
4.4启动流程实例
@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()); }
4.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()); } }
4.6查看当前任务所在点
@Test public void findSelect(){ //查询当前任务所在点 String name=pro.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpms.130001").uniqueResult().findActiveActivityNames().toString(); System.out.println(name); }
4.7办理任务
public void testCompleteTask(){ pro.getTaskService().completeTask("130002"); System.out.println("ok"); }
流程管理
1.创建ProcessEngine对象
//通过默认的配置文件生成单例的processEngine对 ProcessEngine pro=Configuration.getProcessEngine();
2.查询流程定义
@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()); } }
3.查询最新版的流程定义
@Test public void getNewFindAll(){ //查询最新版的流程定义 //查询所有,让最大的版本排到最后面 List<ProcessDefinition> all=pro.getRepositoryService().createProcessDefinitionQuery().orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION).list(); Map<String, ProcessDefinition> map=new HashMap<String, ProcessDefinition>(); for (ProcessDefinition pd : all) { map.put(pd.getKey(), pd); } //显示 for (ProcessDefinition pd : map.values()) { System.out.println("id=" + pd.getId()// 格式为:{key}-{version},用于唯一的标识一个流程定义 + ", name=" + pd.getName()// 流程定义的名称,jpdl.xml中根元素的name属性的值 + ", key=" + pd.getKey()// 流程定义的key,jpdl.xml中根元素的key属性的值,默认是name属性的值 + ", version=" + pd.getVersion()// 自动生成的,同一个名称的第一个为1,以后的自动加1. + ", deploymentId=" + pd.getDeploymentId()); // 所属的部署对象 } }
4.删除(根据id)
@Test public void deleteById(){ //根据id删除 pro.getRepositoryService().deleteDeployment("1"); System.out.println("delete ok"); }
这里注意:删除时,要注意级联,如果子表中有数据的情况下,是删除不了的
5.删除(根据key)
@Test public void deleteByKey(){ //删除指定key的所有版本的流程 List<ProcessDefinition> list=pro.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpms").list(); for (ProcessDefinition pd : list) { pro.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId()); }
6.部署zip格式资源
@Test public void addZip(){ //部署zip格式的资源 InputStream is=this.getClass().getClassLoader().getResourceAsStream("hh.zip"); ZipInputStream zs=new ZipInputStream(is); String id= pro.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy(); System.out.println("部署成功:deploymentid:"+id); }
7.查看流程图
@Test public void getImageResource() throws Exception{ //查看流程图 // 获取指定部署对象中的指下资源的内容 InputStream in=pro.getRepositoryService().getResourceAsStream("50001", "jbpms.png"); //保存到xx盘 OutputStream out=new FileOutputStream("E:/jbpms.png"); for (int b=-1;(b=in.read())!=-1;) { out.write(b); } in.close(); out.close(); System.out.println("----ok---");
JBPM