zoukankan      html  css  js  c++  java
  • 流程定义管理

    package com.kite.pd;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.List;
    import java.util.zip.ZipInputStream;
    
    import org.apache.log.output.FileOutputLogTarget;
    import org.jbpm.api.Configuration;
    import org.jbpm.api.Deployment;
    import org.jbpm.api.ExecutionService;
    import org.jbpm.api.NewDeployment;
    import org.jbpm.api.ProcessDefinition;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.RepositoryService;
    import org.jbpm.pvm.internal.repository.RepositoryCache;
    import org.junit.Test;
    
    /**
     * 流程定义管理
     *         流程定义
     *         把流程定义文档部署到jdpm中
     *         查询
     *         删除
     *         查看流程图
     * @author admin
     *
     */
    public class PDManager {
            
        
        /**
         * 牵涉到的表
         *      *  JBPM4_DEPLOYMENT
         *             部署表  用来说明一次部署
         *             字段说明
         *                  DBID_: 主键、部署ID
         *                  STATE: 状态   active    
         *      *  JBPM4_LOB 
         *             仓库表 存放了流程定义的文档(xml.png)
         *             字段说明
         *                 DEPLOYMENT_:部署ID  外键
         *                 NAME_:  xml或者png的文件路径
         *   *  JBPM4_DEPLOYPROP
         *           部署属性表
         *           字段
         *               DBID_:主键
         *               OBJNAME_:流程定义名称
         *               KEY_:
         *                   每部署一次,生成4行记录
         *                        langid  语言版本  jpdl-4.4
         *                        pdid    {pdkey-version}
         *                        pdkey   流程定义名称
         *                            一般情况下,pdkey和objname_的值是一样的
         *                        pdversion  版本号
         *                            如果pdkey没有发生改变,每部署一次,版本号加1
         *                            如果pdkey发生改变,则是一个全新的名称,所以版本号应该从1开始计算
         */
        /**
         * 从classpath加载
         */
        @Test
        public void testDeployFromClasspath(){
            //Process 过程  Engine 发动机  给 什么安装发动机
            ProcessEngine processEngine =  Configuration.getProcessEngine();
    //        RepositoryService repositoryService = processEngine.getRepositoryService();
    //        NewDeployment newDeployment =  repositoryService.createDeployment();
    //        newDeployment.addResourceFromClasspath("");
    //        newDeployment.addResourceFromClasspath("");
    //        newDeployment.deploy();
            processEngine.getRepositoryService().
            createDeployment().
            addResourceFromClasspath("qingjia.jpdl.xml").//加载文件
            addResourceFromClasspath("qingjia.png").//加载文件
            deploy();
        }
        
        /**
         * 从inputstream 加载
         */
        @Test
        public void testDeployFromInputStream(){
            
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");
            Configuration.getProcessEngine()
            .getRepositoryService()
            .createDeployment()
            .addResourceFromInputStream("qingjia.jpdl.xml", inputStream).deploy();
        }
        
        /**
         * 从zipinputstram 中加载
         */
        @Test
        public void testDeployFromZipInputstream(){
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
            ZipInputStream zipInputStream = new ZipInputStream(inputStream);
            Configuration.getProcessEngine()
            .getRepositoryService()
            .createDeployment()
            .addResourcesFromZipInputStream(zipInputStream)
            .deploy();
        }
        
        /**
         * 查询所有的部署
         */
        @Test
        public void testQueryAllDeploy(){
            List<Deployment> deploymentList =  Configuration.getProcessEngine().getRepositoryService()
            .createDeploymentQuery()
            .list();
            
            for(Deployment deployment : deploymentList){
                System.out.print(deployment.getId() + "\t");
                System.out.println(deployment.getState());
            }
        }
        /**
         * 根据部署id查询的部署
         */
        @Test
        public void testQueryDeployByID(){
            Deployment deployment = 
            Configuration.getProcessEngine().getRepositoryService()
            .createDeploymentQuery().deploymentId("10001").uniqueResult();
            System.out.print(deployment.getId() + "\t");
            System.out.println(deployment.getState());
        }
        
        /**
         * 查询所有的流程定义
         */
        @Test
        public void testQueryAllPD(){
            List<ProcessDefinition> pdList =  Configuration.getProcessEngine().getRepositoryService()
            .createProcessDefinitionQuery()
            .list();
            
            for(ProcessDefinition processDefinition : pdList){
                System.out.print("部署id:" +  processDefinition.getDeploymentId() + "\t");
                
                System.out.print("流程id:" + processDefinition.getId()+ "\t");
                
                System.out.println("图片路径:" +  processDefinition.getImageResourceName());
            }
        }
        /**
         * 根据部署id查询流程定义
         */
        @Test
        public void testQueryPDByID(){
            ProcessDefinition processDefinition = Configuration.getProcessEngine().getRepositoryService()
            .createProcessDefinitionQuery().deploymentId("10001").uniqueResult();
            
            
            System.out.print("部署id:" +  processDefinition.getDeploymentId() + "\t");
            
            System.out.print("流程id:" + processDefinition.getId()+ "\t");
            
            System.out.println("图片路径:" +  processDefinition.getImageResourceName());
        }
        /**
         * 根据PDID查询流程定义
         */
        @Test
        public void testQueryPDByPDID(){
            ProcessDefinition processDefinition = Configuration.getProcessEngine().getRepositoryService()
            .createProcessDefinitionQuery().processDefinitionId("qingjia-1").uniqueResult();
                System.out.print("部署id:" +  processDefinition.getDeploymentId() + "\t");
                
                System.out.print("流程id:" + processDefinition.getId()+ "\t");
                
                System.out.println("图片路径:" +  processDefinition.getImageResourceName());
        }
        
        /**
         * 根据pdkey查询流程定义
         */
        @Test
        public void testQueryPDByPDKEY(){
            List<ProcessDefinition> pdList = Configuration.getProcessEngine()
            .getRepositoryService()
            .createProcessDefinitionQuery()
            .processDefinitionKey("qingjia").list();
            
            for(ProcessDefinition processDefinition : pdList){
                System.out.print("部署id:" +  processDefinition.getDeploymentId() + "\t");
                
                System.out.print("流程id:" + processDefinition.getId()+ "\t");
                
                System.out.println("图片路径:" +  processDefinition.getImageResourceName());
            }
        }
        
        /**
         *  删除
         *      只能直接删除流程部署
         *      而没有提供删除流程定义的api  
         */
        @Test
        public void testDeleteDeployment(){
            Configuration.getProcessEngine().getRepositoryService()
            .deleteDeployment("40001"); //d
        }
        /**
         * 根据key得到所有的流程定义,然后遍历每一个流程定义,得到流程部署,然后依次删除
         */
        
        /**
         * 查询流程图
         * @throws FileNotFoundException 
         */
        @Test
        public void testQueryImage() throws Exception{
            InputStream inputStream = Configuration.getProcessEngine()
            .getRepositoryService()
            //第一个为deploymentid 第二个参数为lob表中的name属性
            .getResourceAsStream("1", "qingjia.png");
            OutputStream outputStream = new FileOutputStream("d:\\a.png");
            
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = inputStream.read(buf)) != -1){
                outputStream.write(buf, 0, len);
            }
            outputStream.close();
            inputStream.close();
        }
        
        
    }
  • 相关阅读:
    rails best particseceeeeeeeeeeee
    clear out all firefox plugin
    named scope on rail3
    javascript保留两位小数
    rails
    CVSNT权限配置
    rails session使用好文章
    rails session security
    javascript断点调试方法
    rails3发邮件
  • 原文地址:https://www.cnblogs.com/kite/p/3698990.html
Copyright © 2011-2022 走看看