




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、關(guān)于JBPM中并發(fā)子流程的實(shí)現(xiàn)方式,網(wǎng)上有很多的說法,但是好像每種辦法都有這樣那樣的缺點(diǎn),要么實(shí)現(xiàn)太復(fù)雜,要么就是會(huì)使Token無法繼續(xù)流轉(zhuǎn)。這里我介紹一種我的并發(fā)子流程的實(shí)現(xiàn)方式:使用TaskNode使任務(wù)并行的方式,模擬實(shí)現(xiàn)JBPM子流程的并發(fā)執(zhí)行。 我先簡(jiǎn)單的介紹一下實(shí)現(xiàn)思路: 1、數(shù)據(jù)庫中應(yīng)該有至少三個(gè)已經(jīng)發(fā)布過的流程定義(ProcessDefinition),發(fā)布的順序無所謂,一個(gè)主流程兩個(gè)子流程 &
2、#160; 2、我們?cè)谥髁鞒讨幸獙?shí)現(xiàn)并發(fā)子流程的環(huán)節(jié)放置TaskNode,設(shè)置create-tasks="false"、signal="last-wait" 3、我們想要實(shí)現(xiàn)幾個(gè)子流程的并發(fā)就在第二步放置的TaskNode中放置幾個(gè)Task,每個(gè)Task的名字都是要并發(fā)的子流程的名稱 4、在TaskNode的Node-Ent
3、er action中,我們手動(dòng)為每一個(gè)Task創(chuàng)建一個(gè)任務(wù)實(shí)例,同時(shí)我們?nèi)〉肨ask的名字也就是要并發(fā)的子流程的名字,創(chuàng)建流程實(shí)例 5、為每個(gè)新創(chuàng)建的流程實(shí)例設(shè)置流程變量:TaskInstanceID表示創(chuàng)建當(dāng)前子流程的那個(gè)主流程任務(wù)實(shí)例ID,并使子流程開始流轉(zhuǎn) 6、子流程結(jié)束,取得流程變量TaskInstanceID,該流程變量TaskInstanceID是創(chuàng)建他的那個(gè)主流程的任務(wù)實(shí)
4、例,得到該TaskInstance,并TaskInstance.end(); 這個(gè)時(shí)候因?yàn)槲覀冊(cè)O(shè)置了TaskNode的Signal為"last-wait",所以當(dāng)所有的子流程均結(jié)束的時(shí)候,主流程才會(huì)繼續(xù),這樣我們也就實(shí)現(xiàn)了子流程的并發(fā)效果。很簡(jiǎn)單的一個(gè)思路實(shí)現(xiàn)起來也并不復(fù)雜. 首先讓我們看一下主流程的流程定義: 1<?xml version
5、="1.0" encoding="UTF-8"?> 2<process-definition xmlns="" name="super1"> 3 <start-state name="start-state1"> 4 <trans
6、ition to="task-node1"></transition> 5 </start-state> 6 7 <task-node name="task-node1" create-tasks="false" signal="last-wait"> 8 &
7、#160; <description> 9 我們要利用這個(gè)TaskNode實(shí)現(xiàn)并發(fā)子流程,create-tasks="true"是為了可以手動(dòng)控制任務(wù)實(shí)例的創(chuàng)建,同時(shí)創(chuàng)建子流程,10 signal="last-wait"
8、是為了實(shí)現(xiàn)當(dāng)所有子流程均已完成,主流程才能繼續(xù)運(yùn)行的效果11 </description>12 <task name="sub1">13 <description>要并發(fā)的子流程之一</descri
9、ption>14 </task>15 <task name="sub2">16 <description>要并發(fā)的子流程之二</description>17
10、60; </task>18 <event type="node-enter">19 <action name="NodeEnterAction" class="jbpmTest.bfzlc.act
11、ion.NodeEnterAction"></action>20 </event>21 <transition to="end-state1"></transition>22 </task-node>2324 &l
12、t;end-state name="end-state1"></end-state>2526 <event type="process-start">27 <script name="SuperProcessStart">28
13、60; System.out.println("主流程啟動(dòng),并設(shè)置主流程ID");29 </script>30 </event>31 <event type="process-end">32
14、160;<script name="SuperProcessEnd">33 System.out.println("主流程結(jié)束");34 </script>35 </event>36</process-defi
15、nition> 下面是主流程的Node-EnterAction的代碼: 1public class NodeEnterAction implements ActionHandler 2 3 public void execute(ExecutionContext executionContext) throws Exception 4
16、 /取得本節(jié)點(diǎn)所有的Task 5 Set<Task> tasks = (TaskNode)executionContext.getNode().getTasks(); 6 7
17、; TaskMgmtInstance tgmt = executionContext.getTaskMgmtInstance(); 8 9 for (Task task : tasks) 10
18、 /為每一個(gè)Task創(chuàng)建實(shí)例11 TaskInstance taskInstance = tgmt.createTaskInstance(task, executionContext);12 /業(yè)務(wù)Service13 &
19、#160; JbpmTestFacade jbpmTestFacade = (JbpmTestFacade)SpringBeanUtil.getBean("jbpmTestFacade");14 /根據(jù)Task的名字,為每一個(gè)Task創(chuàng)建相應(yīng)的子流程15
20、 ProcessInstance processInstance = jbpmTestFacade.createProcessInstance(task.getName();16 /設(shè)置創(chuàng)建這個(gè)子流程的流程實(shí)例ID17
21、0; processInstance.getContextInstance().setVariable("TaskInstanceID", taskInstance.getId();18 /子流程開始流轉(zhuǎn)19 processInstance.signal();20
22、 21 22 23 再看其中一個(gè)子流程的定義: 1<?xml version="1.0" encoding="UTF-8"?> 2<process-definition
23、60; xmlns="" name="sub1"> 3 <start-state name="start-state1"> 4 <transition to="Sub1Task"></transition> 5
24、;</start-state> 6 7 <task-node name="Sub1Task"> 8 <task name="SubTask1"></task> 9 <transition to=&quo
25、t;end-state1"></transition>10 </task-node>1112 <end-state name="end-state1"></end-state>1314 <event type="process-start">15
26、0; <script name="ProcessStartScript">16 System.out.println("-sub1流程啟動(dòng)-");17 </script>18 </event>1920
27、60; <event type="process-end">21 <action name="SubProcessEndAction" class="jbpmTest.bfzlc.action.SubProcessEndAction"></action>22 </event>23<
28、/process-definition>24 下面是該子流程的ProcessEndAction: 1public class SubProcessEndAction implements ActionHandler 2 3 public void execute(ExecutionContext executionContext) throws Exception 4 System.out.println(executionContext.getProcessDefinition().getName()+"結(jié)束"); 5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口咖啡合同范本
- 防汛評(píng)估工程合同范本
- 勞務(wù)派遣公司派遣合同范本
- 人教版初中歷史與社會(huì)九年級(jí)上冊(cè) 1.2.2 武昌起義與中華民國(guó)的創(chuàng)建 教學(xué)設(shè)計(jì)
- Unit 3 Powerful Music Listening,Understanding and Communicating 教學(xué)設(shè)計(jì)-2024-2025學(xué)年高中英語重大版(2019)必修第一冊(cè)
- 動(dòng)物及其產(chǎn)品銷售合同
- 建筑公司合同管理職責(zé)
- 教科版(2019)必修一 5.2探秘人工智能 教學(xué)設(shè)計(jì)
- 滬教版高中信息技術(shù)必修 第一章第2節(jié) 2.2信息技術(shù)的發(fā)展 教學(xué)設(shè)計(jì)
- 《擬行路難》教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊(cè)
- 水泥基自流平地面技術(shù)交底
- T-CSAC 004-2024 軟件供應(yīng)鏈安全要求測(cè)評(píng)方法
- 2024-2025學(xué)年人教版七年級(jí)數(shù)學(xué)上冊(cè)期末模擬測(cè)試卷(含簡(jiǎn)單答案)
- 【MOOC】理解馬克思-南京大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 《商務(wù)溝通-策略、方法與案例》課件 第十章 基本商務(wù)溝通
- 河南省鄭州市外國(guó)語高中2025屆高考仿真卷英語試卷含解析
- 挑戰(zhàn)杯-申報(bào)書范本
- 超市投標(biāo)書范文
- 《工程合同管理與招投標(biāo)實(shí)訓(xùn)》課程電子教案
- 腫瘤科疼痛一病一品
- 2024-2030年中國(guó)礦用錨桿行業(yè)發(fā)展現(xiàn)狀需求分析報(bào)告
評(píng)論
0/150
提交評(píng)論