美文网首页
流程部署

流程部署

作者: 传说中的大哥 | 来源:发表于2019-05-14 10:47 被阅读0次

    流程部署创建主要影响以下几张表

    ACT_RE_*:’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。

    表名 说明
    ACT_GE_BYTEARRAY 流程定义和流程资源
    ACT_RE_DEPLOYMENT 部署单元信息
    ACT_RE_MODEL 模型信息(主要针对于flowable在线设计器)
    ACT_RE_PROCDEF 流程定义数据表

    flowable流程创建是由DeploymentBuilder接口提供,支持以下几种方式创建:

        DeploymentBuilder addInputStream(String var1, InputStream var2);
    
        DeploymentBuilder addClasspathResource(String var1);
    
        DeploymentBuilder addString(String var1, String var2);
    
        DeploymentBuilder addBytes(String var1, byte[] var2);
    
        DeploymentBuilder addZipInputStream(ZipInputStream var1);
    
        DeploymentBuilder addBpmnModel(String var1, BpmnModel var2);
    

    addInputStream输入流创建:

    //在resources文件夹下创建 org/flowable/engine/test/repository/one.bpmn20.xml
    InputStream bpmnInputStream = this.getClass().getClassLoader().getResourceAsStream("org/flowable/engine/test/repository/one.bpmn20.xml");
    Deployment deployment = repositoryService.createDeployment()
                    .addInputStream("one.bpmn20.xml", bpmnInputStream)
                    .deploy();
    

    以上创建部署时的方法返回的结果还是DeploymentBuilder接口 。所以,如果要是创建多个bpmn,可以在后面追加如下代码:

    Deployment deployment = repositoryService.createDeployment()
                    .addInputStream("one.bpmn20.xml", bpmnInputStream)
                    .addInputStream("two.bpmn20.xml", bpmnInputStream)
                    .deploy();
    

    addClasspathResource (springboot项目会常用),resources文件夹下创建:

    repositoryService.createDeployment().addClasspathResource("org/flowable/engine/test/db/processOne.bpmn20.xml").deploy();
    

    此种方式,无需转换成InputStream

    addString方式,可以通过字符串直接进行创建:

    private static String UNSAFE_XML = "<?xml version='1.0' encoding='UTF-8'?>" + "<!-- Billion Laugh attacks : http://portal.sliderocket.com/CJAKM/xml-attacks -->" + "<!DOCTYPE lols ["
                + "<!ENTITY lol 'lol'>" + "<!ENTITY lol1 '&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;'>" + "<!ENTITY lol2 '&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;'>"
                + "<!ENTITY lol3 '&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;'>" + "<!ENTITY lol4 '&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;'>"
                + "<!ENTITY lol5 '&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;'>" + "<!ENTITY lol6 '&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;'>"
                + "<!ENTITY lol7 '&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;'>" + "<!ENTITY lol8 '&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;'>"
                + "<!ENTITY lol9 '&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;'>" + "]>" + "<lolz>&lol9;</lolz>" + "<definitions " + "xmlns='http://www.omg.org/spec/BPMN/20100524/MODEL'"
                + "xmlns:activiti='http://activiti.org/bpmn'" + "targetNamespace='Examples'>" + "<process id='oneTaskProcess' name='The One org.flowable.task.service.Task Process'>"
                + "  <documentation>This is a process for testing purposes</documentation>" + " <startEvent id='theStart' />" + " <sequenceFlow id='flow1' sourceRef='theStart' targetRef='theTask' />"
                + " <userTask id='theTask' name='my task' />" + " <sequenceFlow id='flow2' sourceRef='theTask' targetRef='theEnd' />" + " <endEvent id='theEnd' />" + "</process>" + "</definitions>";
    
    repositoryService.createDeployment().addString("test.bpmn20.xml", UNSAFE_XML).deploy().getId();
    

    addBytes字节方式:

    可以根据上面的addString方式进行修改,将UNSAFE_XML字符串转换为Bytes[]数组

    repositoryService.createDeployment().addString("Bytes[]方式测试", String.valueOf(UNSAFE_XML .getBytes("UTF-8"))).deploy();
    

    addZipInputStream zip压缩包方式:

    InputStream inputStream = this.getClass()
            .getClassLoader()
            .getResourceAsStream("org/flowable/engine/test/api/repository/test-processes.zip");
    

    addBpmnModel BpmnModel模型方式创建:

            org.flowable.bpmn.model.Process process = new org.flowable.bpmn.model.Process();
            process.setId("oneTaskProcess");
            process.setName("The one task process");
    
            StartEvent startEvent = new StartEvent();
            startEvent.setId("start");
            startEvent.setName("The start");
            process.addFlowElement(startEvent);
    
            UserTask userTask = new UserTask();
            userTask.setName("The Task");
            userTask.setId("theTask");
            userTask.setAssignee("kermit");
            process.addFlowElement(userTask);
    
            EndEvent endEvent = new EndEvent();
            endEvent.setId("theEnd");
            endEvent.setName("The end");
            process.addFlowElement(endEvent);
    
            process.addFlowElement(new SequenceFlow("start", "theTask"));
            process.addFlowElement(new SequenceFlow("theTask", "theEnd"));
    
            BpmnModel model = new BpmnModel();
            model.addProcess(process);
          repositoryService.createDeployment().addBpmnModel("模型方式创建流程", model).deploy();
    

    最后:注意,无论哪种方式加载 模型名称 也就是 resourcesName 结尾必须以bpmn20.xml, bpmn为结尾,不然不会插入ACT_RE_PROCDEF 流程定义表,源码位置ParsedDeploymentBuilder.class->build()

    while(true) {
                EngineResource resource;
                do {
                    if (!var5.hasNext()) {
                        return new ParsedDeployment(deploymentEntity, processDefinitions, processDefinitionsToBpmnParseMap, processDefinitionsToResourceMap);
                    }
    
                    resource = (EngineResource)var5.next();
                } while(!this.isBpmnResource(resource.getName()));//此处根据名称判断是否符合规规范
    
                LOGGER.debug("Processing BPMN resource {}", resource.getName());
                BpmnParse parse = this.createBpmnParseFromResource(resource);
                Iterator var8 = parse.getProcessDefinitions().iterator();
    
                while(var8.hasNext()) {
                    ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity)var8.next();
                    processDefinitions.add(processDefinition);
                    processDefinitionsToBpmnParseMap.put(processDefinition, parse);
                    processDefinitionsToResourceMap.put(processDefinition, resource);
                }
            }
    

    相关文章

      网友评论

          本文标题:流程部署

          本文链接:https://www.haomeiwen.com/subject/niolaqtx.html