四、Activiti 部署的三种方式与部署查询流程查询源码

Activiti 部署的三种方式 与 部署查询流程查询


    /**
     * pdManager=process definition manager  流程定义管理
     * @author zd
     *   流程定义:
     *      1、*.bpmn和*.png叫做流程定义文档
     *         png是为了显示图片的
     *         bpmn是为了结构化的描述流程定义
     *      2、有key,version,pdid来确定流程定义的
     *   操作:
     *      1、部署(三种方式)
     *         classpath
     *         inputstream
     *         zipinputstream
     *      2、查询
     *          查询流程部署
     *             查询所有的流程部署
     *             根据deploymentID查询流程部署
     *          查询流程定义
     *             查询所有的流程定义
     *             根据pdid查询流程定义
     *             根据pdkey查询流程定义
     *             根据 deploymentID查询流程定义
     *      3、删除
     *      4、查看流程图
     *         可以根据pdid查询流程图
     *         可以根据deploymentID,resourceName查询流程图
     */
    public class PDManager {
        /**
         * 1、涉及到的表
         *    act_re_deployment  部署表
         *       1、说明
         *           描述的是一次动作,每部署一次,在该表中增加一行记录
         *       2、字段
         *           ID_: 部署ID
         *    act_re_procdef     流程定义表
         *       1、说明
         *           是用来描述流程定义的
         *           如果key值或者name值发生变化,相当于一个全新的流程定义,这个时候再次部署,版本号从1开始计算
         *       2、字段
         *           name_:流程定义名称
         *           key_:流程定义key
         *           version_:版本
         *           deployment_id_:部署ID
         *           pdid:流程定义ID  {processKey}:{processVersion}:随机数
         *    act_ge_bytearry    通用数据表  该表存放了hellworld.bpmn和helloworld.png数据
         *       1、说明
         *             在部署的时候,部署的bpmn和png都存放在该表中
         *       2、字段
         *             deploymentID:部署ID  将来可以根据部署ID查询图片
         */
        /**
         * 根据classpath进行部署
         */
        @Test
        public void testDeploy_Classpath(){
            //得到一个默认的流程引擎
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            Deployment deployment = processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima09/activiti5/helloworld/helloworld.bpmn")
            .addClasspathResource("com/itheima09/activiti5/helloworld/helloworld.png")
            .deploy();
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
        }

        /**
         * 根据inputStream进行部署
         */
        @Test
        public void testDeploy_Inputstream(){
            InputStream inputStream = this.getClass()
            .getClassLoader()
            .getResourceAsStream("com/itheima09/activiti5/helloworld/helloworld.bpmn");
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addInputStream("com/itheima09/activiti5/helloworld/helloworld.bpmn", inputStream)
            .deploy();
        }

        /**
         * 根据zipinputstream进行部署
         */
        @Test
        public void testDeploy_ZipinputStream(){
            InputStream inputStream = this.getClass()
            .getClassLoader()
            .getResourceAsStream("com/itheima09/activiti5/helloworld/helloworld.zip");
            ZipInputStream zipInputStream = new ZipInputStream(inputStream);
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addZipInputStream(zipInputStream)
            .deploy();
        }


        /**
         * 查询所有的流程部署
         */
        @Test
        public void testQueryDeployment(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            List dList = processEngine.getRepositoryService()
            .createDeploymentQuery()//创建一个部署查询
            .list();
            for(Deployment deployment:dList){
                System.out.println(deployment.getId());
            }
        }

        /**
         * 根据部署ID查询部署
         */
        @Test
        public void testQueryDeploymentByID(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            Deployment deployment = processEngine.getRepositoryService()
            .createDeploymentQuery()
            .deploymentId("1")   //查询deploymentid为1的部署
            .singleResult();
            System.out.println(deployment.getId());
        }

        /**
         * 查询所有的流程定义
         */
        @Test
        public void testQueryPD(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            List pdList = processEngine.getRepositoryService()
            .createProcessDefinitionQuery()
            .list();
            for(ProcessDefinition pd:pdList){
                System.out.print("key:"+pd.getKey()+",");
                System.out.print("version:"+pd.getVersion()+",");
                System.out.println("pdid:"+pd.getId());
            }
        }

        /**
         * 根据pdid查询流程定义
         */
        @Test
        public void testQueryPDByPDID(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            ProcessDefinition pd = processEngine.getRepositoryService()
            .createProcessDefinitionQuery()
            .processDefinitionId("itheima09:1:204")
            .singleResult();
            System.out.print("key:"+pd.getKey()+",");
            System.out.print("version:"+pd.getVersion()+",");
            System.out.println("pdid:"+pd.getId());
        }

        /**
         * 根据pdkey查询流程定义
         */
        @Test
        public void testQueryPDByPDKEY(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            List pdList = processEngine.getRepositoryService()
            .createProcessDefinitionQuery()
            .processDefinitionKey("myProcess")
            .list();
            for(ProcessDefinition pd:pdList){
                System.out.print("key:"+pd.getKey()+",");
                System.out.print("version:"+pd.getVersion()+",");
                System.out.println("pdid:"+pd.getId());
            }
        }

        /**
         * 根据deploymentID查询流程定义   deploymentID和pdid是相对应的
         */

        /**
         * 删除
         *    只能根据deploymentID进行删除
         */
        @Test
        public void testDelete(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //      processEngine.getRepositoryService()
    //      .deleteDeployment("1");//用该API只能删除流程定义的内容和部署的内容
            processEngine.getRepositoryService()
            .deleteDeployment("1", true);//删除了关于deploymentID为1的所有的数据,包括:流程定义、流程部署、任务等信息
        }

        /**
         * 查询流程图
         */
        @Test
        public void showImage() throws Exception{
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            InputStream inputStream = processEngine.getRepositoryService()
            .getProcessDiagram("itheima09:1:204");
            OutputStream outputStream = new FileOutputStream("e:/processimg1.png");
            for(int b=-1;(b=inputStream.read())!=-1;){
                outputStream.write(b);
            }
            inputStream.close();
            outputStream.close();
            InputStream inputStream2 = processEngine.getRepositoryService()
            .getResourceAsStream("101", "com/itheima09/activiti5/helloworld/helloworld.png");
            OutputStream outputStream2 = new FileOutputStream("e:/processimg2.png");
            for(int b=-1;(b=inputStream2.read())!=-1;){
                outputStream2.write(b);
            }
            inputStream2.close();
            outputStream2.close();
        }
    }

你可能感兴趣的:(Activiti)