流程部署

流程部署創(chuàng)建主要影響以下幾張表

ACT_RE_*:’RE’表示repository(存儲)颈渊。RepositoryService接口操作的表终佛。帶此前綴的表包含的是靜態(tài)信息,如,流程定義榜贴,流程的資源(圖片,規(guī)則等)鹃共。

表名 說明
ACT_GE_BYTEARRAY 流程定義和流程資源
ACT_RE_DEPLOYMENT 部署單元信息
ACT_RE_MODEL 模型信息(主要針對于flowable在線設(shè)計(jì)器)
ACT_RE_PROCDEF 流程定義數(shù)據(jù)表

flowable流程創(chuàng)建是由DeploymentBuilder接口提供驶拱,支持以下幾種方式創(chuàng)建:

    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輸入流創(chuàng)建:

//在resources文件夾下創(chuàng)建 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();

以上創(chuàng)建部署時(shí)的方法返回的結(jié)果還是DeploymentBuilder接口 蓝纲。所以,如果要是創(chuàng)建多個(gè)bpmn税迷,可以在后面追加如下代碼:

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

addClasspathResource (springboot項(xiàng)目會常用),resources文件夾下創(chuàng)建:

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

此種方式慕嚷,無需轉(zhuǎn)換成InputStream

addString方式,可以通過字符串直接進(jìn)行創(chuàng)建:

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字節(jié)方式:

可以根據(jù)上面的addString方式進(jìn)行修改,將UNSAFE_XML字符串轉(zhuǎn)換為Bytes[]數(shù)組

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模型方式創(chuàng)建:

        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("模型方式創(chuàng)建流程", model).deploy();

最后:注意澡谭,無論哪種方式加載 模型名稱 也就是 resourcesName 結(jié)尾必須以bpmn20.xml, bpmn為結(jié)尾译暂,不然不會插入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()));//此處根據(jù)名稱判斷是否符合規(guī)規(guī)范

            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);
            }
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拧咳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祭衩,老刑警劉巖阅签,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異路克,居然都是意外死亡养交,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門碎连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廉嚼,你說我怎么就攤上這事倒戏。” “怎么了峭梳?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捂寿。 經(jīng)常有香客問我,道長蔓彩,這世上最難降的妖魔是什么驳概? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮顺又,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹂空。我一直安慰自己果录,他們只是感情好上枕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布弱恒。 她就那樣靜靜地躺著,像睡著了一般返弹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天并扇,我揣著相機(jī)與錄音,去河邊找鬼穷蛹。 笑死昼汗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的顷窒。 我是一名探鬼主播源哩,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼励烦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坛掠?” 一聲冷哼從身側(cè)響起治筒,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎友多,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夷陋,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胰锌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年资昧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格带。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屈呕,靈堂內(nèi)的尸體忽然破棺而出棺亭,到底是詐尸還是另有隱情虎眨,我是刑警寧澤镶摘,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布凄敢,位于F島的核電站,受9級特大地震影響涝缝,放射性物質(zhì)發(fā)生泄漏譬重。R本人自食惡果不足惜嫩挤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望以现。 院中可真熱鬧,春花似錦邑遏、人聲如沸恰矩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碾盟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冰肴,已是汗流浹背榔组。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留检痰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓铅歼,卻偏偏與公主長得像爱态,于是被迫代替她去往敵國和親境钟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容