JBPM,全稱是Java Business Process Management(業務流程管理),它是覆蓋了業務流程管理、工做流、服務協做等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。java
業務分析師和開發人員使用的是同一種語言來交談,大大下降了開發的風險,若是要開發一個項目,速度也更快了,由於開發人員不用再將用戶需求轉化成軟件設計了。其次,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.部署流程定義ui
@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的值this
@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.查看任務列表spa
@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.查詢當前任務所在點hibernate
@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()); } }
@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("成功"); }
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); }