复习步骤3-Activiti流程文件部署

项目结构如图

resource下的文件及lib copy query-test即可

 

执行完dbaddZipInputStream这个方法后,

//DeploymentBuilder addZipInputStream方法

    public  static void dbaddZipInputStream() {

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

       /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML

       流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

       RepositoryService re = engine.getRepositoryService();

       DeploymentBuilder deploymentBuilder= re.createDeployment();//RepositoryService获取部署创建对象

      

      

       try {

           //创建我们的压缩文件对象,压缩文件需为zip后缀的而不能事rar后缀

           FileInputStream fis = new FileInputStream(new File("resource/datas.zip"));

           ZipInputStream zis = new ZipInputStream(fis);

           deploymentBuilder.addZipInputStream(zis);//将我们的ZIP文件ADD加载进来

          

           /*

           最终调用 deploy方法完成部署,调用此方法会返回一个Deployment对象--对应数据库act_re_deployment表的一条记录

           ------可以将我们的ZIP文件解压后,一对多的放入 act_re_deployment表(部署文件):多             

            act_ge_bytearray 表(流程文件及资源对象-解压后的文件)*/

            deploymentBuilder.deploy();

            engine.close();

            System.exit(0);

            

       } catch (FileNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

    }

执行完dbaddZipInputStream这个方法后,

会将压缩的文件-文件名及内容保存在act_ge_bytearray 表(流程文件及资源对象-解压后的文件)如下

 

act_re_deployment表(部署文件) 如下

执行完dbaddBpmnModel()方法后-动态生成一个'first_dm.bpnm' 保存在act_ge_bytearray BYTES_字段中

//DeploymentBuilder addBpmnModel方法 --- 动态生成我们的流程图,本来可以手画的

    public  static void dbaddBpmnModel(){

       //步骤1

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

       /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML

       流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

       RepositoryService re = engine.getRepositoryService();

       DeploymentBuilder deploymentBuilder= re.createDeployment();//RepositoryService获取部署创建对象

      

       //步骤2-- 创建流程图

       /*参考first-act项目我们用activiti插件手画的流程图first.bpnm ,用代码生成*/

       /*<?xml version="1.0" encoding="UTF-8"?>

       <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">

         <process id="myProcess" name="My process" isExecutable="true">

           <startEvent id="startevent1" name="Start"></startEvent>

           <endEvent id="endevent1" name="End"></endEvent>

           <userTask id="usertask1" name="worker"></userTask>

           <userTask id="usertask2" name="leader"></userTask>

           <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

           <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

           <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

         </process>

       */

      

        /*

         * 创建开始节点 -- 参考<startEvent id="startevent1" name="Start"></startEvent>

         * */

        StartEvent startEvent = new StartEvent();

        startEvent.setId("startevent1_dm");

        startEvent.setName("Start_dm");

        

        /*

          * 创建worker_dm提交申请任务节点 -- 参考<userTask id="usertask1" name="worker"></userTask>

          * */

        UserTask userTask1= new UserTask();

        userTask1.setId("usertask1_dm");

        userTask1.setName("worker_dm");

        

        /*

          * 创建leader_dm 审批任务节点 -- 参考<userTask id="usertask2" name="leader"></userTask>

          * */

        UserTask userTask2= new UserTask();

        userTask2.setId("usertask2_dm");

        userTask1.setName("leader_dm");

        

        /*

          * 创建结束节点 -- 参考

          * */

        EndEvent endEvent = new EndEvent();

        endEvent.setId("endevent1_dm");

        endEvent.setName("End_dm");

        

        /*

          * 创建连线 将节点串联起来 -- 参考

          * <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

           <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

           <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

          *

          * */

        SequenceFlow startToUserTask1 = new SequenceFlow();

        startToUserTask1.setId("flow1_dm");

        startToUserTask1.setSourceRef("startevent1_dm");//startEvent id

        startToUserTask1.setTargetRef("usertask1_dm");//UserTask1 id

        

        SequenceFlow userTask1ToUserTask2 = new SequenceFlow();

        userTask1ToUserTask2.setId("flow2_dm");

        userTask1ToUserTask2.setSourceRef("usertask1_dm");//UserTask1 id

        userTask1ToUserTask2.setTargetRef("usertask2_dm");//UserTask2 id

        

        

        SequenceFlow userTask2ToEnd = new SequenceFlow();

        userTask2ToEnd.setId("flow3_dm");

        userTask2ToEnd.setSourceRef("usertask2_dm");//UserTask2 id

        userTask2ToEnd.setTargetRef("endevent1_dm");//endEvent id

        

        /*

          * 整合节点和连线成为一个 process

          * 参考--

          *<process id="myProcess" name="My process" isExecutable="true">

               <startEvent id="startevent1" name="Start"></startEvent>

               <endEvent id="endevent1" name="End"></endEvent>

               <userTask id="usertask1" name="worker"></userTask>

               <userTask id="usertask2" name="leader"></userTask>

               <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

               <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

               <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

         </process>

          * */

       Process process = new Process();

       process.setId("myProcess_dm");

       process.setName("My process dm");

       process.setExecutable(true);

       // 4个节点加进process

        process.addFlowElement(startEvent);

        process.addFlowElement(userTask1);

        process.addFlowElement(userTask2);

        process.addFlowElement(endEvent);

        //3条连线加进process

        process.addFlowElement(startToUserTask1);

        process.addFlowElement(userTask1ToUserTask2);

        process.addFlowElement(userTask2ToEnd);

       

        /*

         * 创建一个bpmnmodel对象 添加process

         * */

         BpmnModel bpmnModel = new BpmnModel();

         bpmnModel.addProcess(process);

       

         

          //步骤三

         

            deploymentBuilder.addBpmnModel("first_dm.bpnm", bpmnModel); //将我们的bpmnmodel对象ADD加载进来,并将这个流程的文件名命名为first_dm.bpnm

            /*

           最终调用 deploy方法完成部署,调用此方法会返回一个Deployment对象--对应数据库act_re_deployment表的一条记录

           ------可以将我们的bpmnModel文件,一对多的放入 act_re_deployment表(部署文件):多             

            act_ge_bytearray 表(流程文件及资源对象)*/

            deploymentBuilder.deploy();

            engine.close();

            System.exit(0);

        

    }

 

执行完dbaddBpmnModel()方法后数据库如图

 

 

 

JAVA文件的全部内容

DeploymentAct.java

package com.xiangshuai.act.c7;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.security.interfaces.RSAKey;

import java.util.zip.ZipInputStream;

 

import org.activiti.bpmn.BpmnAutoLayout;

import org.activiti.bpmn.model.BpmnModel;

import org.activiti.bpmn.model.EndEvent;

import org.activiti.bpmn.model.Process;

import org.activiti.bpmn.model.SequenceFlow;

import org.activiti.bpmn.model.StartEvent;

import org.activiti.bpmn.model.UserTask;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.impl.persistence.entity.UserEntity;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.DeploymentBuilder;

import org.activiti.engine.repository.DeploymentQuery;

import org.springframework.util.FileCopyUtils;

 

/**

 * 文件在E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤3-Activiti流程文件部署

 * 或 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤3-Activiti流程文件部署

 * @author lqx

 * DeploymentBuilder

有如下方法:

         addClasspathResource

         addInputStream

         addString

         addZipInputStream               ------可以将我们的ZIP文件解压后,一对多的放入 一act_re_deployment表(部署文件):多             

        

                                        act_ge_bytearray 表(流程文件及资源对象-解压后的文件)

        

         addBpmnModel  --- 动态生成我们的流程图,本来可以手画的

         addBytes

        

         最终调用 deploy方法完成部署,调用此方法会返回一个Deployment对象--对应数据库act_re_deployment表的一条记录

 *

 */

public class DeploymentAct {

         public static void main(String[] args) {

                  //dbaddZipInputStream();

                  //dbaddBpmnModel();

                  //getResourceAsStream//获得字节流文件

                  //getProcessDiagram();//通过字节流访问已部署的流程图,例如PNG图像 -- 这里事获取流程图

                  getProcessModel();//通过字节流访问已部署的流程模型,例如BPMN 2.0 XML文件,即BPMN文件。

         }

    

         //DeploymentBuilder的 addZipInputStream方法

    public  static void dbaddZipInputStream() {

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

          /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML,

             流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

             RepositoryService re = engine.getRepositoryService();

             DeploymentBuilder deploymentBuilder= re.createDeployment();//用RepositoryService获取部署创建对象

            

            

                  try {

                          //创建我们的压缩文件对象,压缩文件需为zip后缀的而不能事rar后缀

                          FileInputStream fis = new FileInputStream(new File("resource/datas.zip"));

                          ZipInputStream zis = new ZipInputStream(fis);

                      deploymentBuilder.addZipInputStream(zis);//将我们的ZIP文件ADD加载进来

                     

                      /*

                      最终调用 deploy方法完成部署,调用此方法会返回一个Deployment对象--对应数据库act_re_deployment表的一条记录

                      ------可以将我们的ZIP文件解压后,一对多的放入 一act_re_deployment表(部署文件):多             

                 act_ge_bytearray 表(流程文件及资源对象-解压后的文件)*/

                       deploymentBuilder.deploy();

                       engine.close();

                       System.exit(0);

                       

                  } catch (FileNotFoundException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

    }

   

   //DeploymentBuilder的 addBpmnModel方法 --- 动态生成我们的流程图,本来可以手画的

    public  static void dbaddBpmnModel(){

             //步骤1

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

          /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML,

             流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

             RepositoryService re = engine.getRepositoryService();

             DeploymentBuilder deploymentBuilder= re.createDeployment();//用RepositoryService获取部署创建对象

            

             //步骤2-- 创建流程图

             /*参考first-act项目我们用activiti插件手画的流程图first.bpnm ,用代码生成*/

             /*<?xml version="1.0" encoding="UTF-8"?>

             <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">

               <process id="myProcess" name="My process" isExecutable="true">

                 <startEvent id="startevent1" name="Start"></startEvent>

                 <endEvent id="endevent1" name="End"></endEvent>

                 <userTask id="usertask1" name="worker"></userTask>

                 <userTask id="usertask2" name="leader"></userTask>

                 <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

                 <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

                 <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

               </process>

             */

            

              /*

         * 创建开始节点 -- 参考<startEvent id="startevent1" name="Start"></startEvent>

         * */

              StartEvent startEvent = new StartEvent();

              startEvent.setId("startevent1_dm");

              startEvent.setName("Start_dm");

              

              /*

          * 创建worker_dm提交申请任务节点 -- 参考<userTask id="usertask1" name="worker"></userTask>

          * */

              UserTask userTask1= new UserTask();

              userTask1.setId("usertask1_dm");

              userTask1.setName("worker_dm");

              

              /*

          * 创建leader_dm 审批任务节点 -- 参考<userTask id="usertask2" name="leader"></userTask>

          * */

              UserTask userTask2= new UserTask();

              userTask2.setId("usertask2_dm");

              userTask1.setName("leader_dm");

              

              /*

          * 创建结束节点 -- 参考

          * */

              EndEvent endEvent = new EndEvent();

              endEvent.setId("endevent1_dm");

              endEvent.setName("End_dm");

              

              /*

          * 创建连线 将节点串联起来 -- 参考

          * <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

                 <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

                 <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

          *

          * */

              SequenceFlow startToUserTask1 = new SequenceFlow();

              startToUserTask1.setId("flow1_dm");

              startToUserTask1.setSourceRef("startevent1_dm");//startEvent id

              startToUserTask1.setTargetRef("usertask1_dm");//UserTask1 id

              

              SequenceFlow userTask1ToUserTask2 = new SequenceFlow();

              userTask1ToUserTask2.setId("flow2_dm");

              userTask1ToUserTask2.setSourceRef("usertask1_dm");//UserTask1 id

              userTask1ToUserTask2.setTargetRef("usertask2_dm");//UserTask2 id

              

              

              SequenceFlow userTask2ToEnd = new SequenceFlow();

              userTask2ToEnd.setId("flow3_dm");

              userTask2ToEnd.setSourceRef("usertask2_dm");//UserTask2 id

              userTask2ToEnd.setTargetRef("endevent1_dm");//endEvent id

              

              /*

          * 整合节点和连线成为一个 process

          * 参考--

          *<process id="myProcess" name="My process" isExecutable="true">

                          <startEvent id="startevent1" name="Start"></startEvent>

                          <endEvent id="endevent1" name="End"></endEvent>

                          <userTask id="usertask1" name="worker"></userTask>

                          <userTask id="usertask2" name="leader"></userTask>

                          <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

                          <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

                          <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

               </process>

          * */

             Process process = new Process();

             process.setId("myProcess_dm");

             process.setName("My process dm");

             process.setExecutable(true);

             // 将4个节点加进process

        process.addFlowElement(startEvent);

        process.addFlowElement(userTask1);

        process.addFlowElement(userTask2);

        process.addFlowElement(endEvent);

        //将3条连线加进process

        process.addFlowElement(startToUserTask1);

        process.addFlowElement(userTask1ToUserTask2);

        process.addFlowElement(userTask2ToEnd);

       

        /*

         * 创建一个bpmnmodel对象 添加process

         * */

         BpmnModel bpmnModel = new BpmnModel();

         bpmnModel.addProcess(process);

       

         

          //步骤三

         

            deploymentBuilder.addBpmnModel("first_dm.bpnm", bpmnModel); //将我们的bpmnmodel对象ADD加载进来,并将这个流程的文件名命名为first_dm.bpnm

            /*

                      最终调用 deploy方法完成部署,调用此方法会返回一个Deployment对象--对应数据库act_re_deployment表的一条记录

                      ------可以将我们的bpmnModel文件,一对多的放入 一act_re_deployment表(部署文件):多             

                 act_ge_bytearray 表(流程文件及资源对象)*/

                       deploymentBuilder.deploy();

                       engine.close();

                       System.exit(0);

              

    }

   

   

    /*RepositoryService 的        getResourceAsStream(String deploymentId, String resourceName)方法 通过字节流提供对部署资源的访问。

     * --参数1,act_ge_bytearray表的NAME_的值,参数2,act_ge_bytearray表的DEPLOYMENT_ID_的值

     * 获取字节流,这里事获取addZipInputStreamTESTFile1.txt文件

     * */

    //百度 RepositoryService API

    public static void getResourceAsStream(){

             //步骤1

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

          /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML,

             流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

             RepositoryService re = engine.getRepositoryService();

             InputStream rs = re.getResourceAsStream("7501", "addZipInputStreamTESTFile1.txt");//参数1,act_ge_bytearray表的NAME_的值,参数2,act_ge_bytearray表的DEPLOYMENT_ID_的值

             byte[] b=new byte[1024];

        try {

                          rs.read(b);

                          String st = new String(b);

                          System.out.println(st);

                  } catch (IOException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

    }

   

   /*

    InputStream  getProcessDiagram(String  processDefinitionId)

    -- String  processDefinitionId 参数:act_re_procdef表 的 id值

    通过字节流访问已部署的流程图,例如PNG图像 -- 这里事获取流程图

    */

    //百度 RepositoryService API

    public static void getProcessDiagram(){

             //步骤1

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

          /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML,

             流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

             RepositoryService re = engine.getRepositoryService();

             InputStream is = re.getProcessDiagram("myProcess:1:4");//参数:act_re_procdef表 的 id值

        try {

                          FileCopyUtils.copy(is, new FileOutputStream(new File("D:/temp.png")));

                  } catch (FileNotFoundException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  } catch (IOException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

    }

   

   

    /*

    InputStream  getProcessModel(String  processDefinitionId)

    -- String  processDefinitionId 参数:act_re_procdef表 的 id值

    通过字节流访问已部署的流程模型,例如BPMN 2.0 XML文件,即BPMN文件。

     */

    //百度 RepositoryService API

    public static void getProcessModel(){

             //步骤1

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();//获得引擎对象

          /*用引擎对象 获取管理流程定义--主要操作流程引擎中的静态资源,如流程资源的XML,

             流程图片等的RepositoryService-- 此对象作用详见E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\linux\课程导学 \主要API的作用.doc */

             RepositoryService re = engine.getRepositoryService();

             InputStream is = re.getProcessModel("myProcess:1:4");//参数:act_re_procdef表 的 id值

             try {

                     FileCopyUtils.copy(is, new FileOutputStream(new File("D:/temp.bpmn")));

             } catch (FileNotFoundException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

             } catch (IOException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

             }

    }

   

   

   

   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值