JBPM實(shí)踐之:并發(fā)子流程的實(shí)現(xiàn)_第1頁
JBPM實(shí)踐之:并發(fā)子流程的實(shí)現(xiàn)_第2頁
JBPM實(shí)踐之:并發(fā)子流程的實(shí)現(xiàn)_第3頁
JBPM實(shí)踐之:并發(fā)子流程的實(shí)現(xiàn)_第4頁
JBPM實(shí)踐之:并發(fā)子流程的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上關(guān)于JBPM中并發(fā)子流程的實(shí)現(xiàn)方式,網(wǎng)上有很多的說法,但是好像每種辦法都有這樣那樣的缺點(diǎn),要么實(shí)現(xiàn)太復(fù)雜,要么就是會使Token無法繼續(xù)流轉(zhuǎn)。這里我介紹一種我的并發(fā)子流程的實(shí)現(xiàn)方式:使用TaskNode使任務(wù)并行的方式,模擬實(shí)現(xiàn)JBPM子流程的并發(fā)執(zhí)行。 我先簡單的介紹一下實(shí)現(xiàn)思路:         1、數(shù)據(jù)庫中應(yīng)該有至少三個已經(jīng)發(fā)布過的流程定義(ProcessDefinition),發(fā)布的順序無所謂,一個主流程兩個子流程    

2、     2、我們在主流程中要實(shí)現(xiàn)并發(fā)子流程的環(huán)節(jié)放置TaskNode,設(shè)置create-tasks="false"、signal="last-wait"         3、我們想要實(shí)現(xiàn)幾個子流程的并發(fā)就在第二步放置的TaskNode中放置幾個Task,每個Task的名字都是要并發(fā)的子流程的名稱         4、在Task

3、Node的Node-Enter action中,我們手動為每一個Task創(chuàng)建一個任務(wù)實(shí)例,同時我們?nèi)〉肨ask的名字也就是要并發(fā)的子流程的名字,創(chuàng)建流程實(shí)例         5、為每個新創(chuàng)建的流程實(shí)例設(shè)置流程變量:TaskInstanceID表示創(chuàng)建當(dāng)前子流程的那個主流程任務(wù)實(shí)例ID,并使子流程開始流轉(zhuǎn)         6、子流程結(jié)束,取得流程變量TaskInstanceID,該流程變量TaskInstanceID是

4、創(chuàng)建他的那個主流程的任務(wù)實(shí)例,得到該TaskInstance,并TaskInstance.end();         這個時候因?yàn)槲覀冊O(shè)置了TaskNode的Signal為"last-wait",所以當(dāng)所有的子流程均結(jié)束的時候,主流程才會繼續(xù),這樣我們也就實(shí)現(xiàn)了子流程的并發(fā)效果。很簡單的一個思路實(shí)現(xiàn)起來也并不復(fù)雜.         首先讓我們看一下主流程的流程定義: 1<?xml

5、 version="1.0" encoding="UTF-8"?> 2<process-definition  xmlns=""  name="super1"> 3    <start-state name="start-state1"> 4       &#

6、160;<transition to="task-node1"></transition> 5    </start-state> 6 7    <task-node name="task-node1" create-tasks="false" signal="last-wait"> 8  

7、      <description> 9            我們要利用這個TaskNode實(shí)現(xiàn)并發(fā)子流程,create-tasks="true"是為了可以手動控制任務(wù)實(shí)例的創(chuàng)建,同時創(chuàng)建子流程,10            signal="la

8、st-wait"是為了實(shí)現(xiàn)當(dāng)所有子流程均已完成,主流程才能繼續(xù)運(yùn)行的效果11        </description>12        <task name="sub1">13            <description>要并發(fā)的子流程

9、之一</description>14        </task>15        <task name="sub2">16            <description>要并發(fā)的子流程之二</description>17&#

10、160;       </task>18        <event type="node-enter">19            <action name="NodeEnterAction" class="jbpmT

11、est.bfzlc.action.NodeEnterAction"></action>20        </event>21        <transition to="end-state1"></transition>22    </task-node>2324  &

12、#160; <end-state name="end-state1"></end-state>2526    <event type="process-start">27        <script name="SuperProcessStart">28      &#

13、160;     System.out.println(&quot;主流程啟動,并設(shè)置主流程ID&quot;);29        </script>30    </event>31    <event type="process-end">32     &

14、#160;  <script name="SuperProcessEnd">33            System.out.println(&quot;主流程結(jié)束&quot;);34        </script>35    </event>36<

15、/process-definition>    下面是主流程的Node-EnterAction的代碼: 1public class NodeEnterAction implements ActionHandler  2 3    public void execute(ExecutionContext executionContext) throws Exception 

16、 4        /取得本節(jié)點(diǎn)所有的Task 5        Set<Task> tasks = (TaskNode)executionContext.getNode().getTasks(); 6         7    

17、0;   TaskMgmtInstance tgmt = executionContext.getTaskMgmtInstance(); 8         9        for (Task task : tasks) 10       

18、;     /為每一個Task創(chuàng)建實(shí)例11            TaskInstance taskInstance = tgmt.createTaskInstance(task, executionContext);12            /業(yè)務(wù)Service13

19、            JbpmTestFacade jbpmTestFacade = (JbpmTestFacade)SpringBeanUtil.getBean("jbpmTestFacade");14            /根據(jù)Task的名字,為每一個Task創(chuàng)建相應(yīng)的子流程15  

20、;          ProcessInstance processInstance = jbpmTestFacade.createProcessInstance(task.getName();16            /設(shè)置創(chuàng)建這個子流程的流程實(shí)例ID17       

21、60;    processInstance.getContextInstance().setVariable("TaskInstanceID", taskInstance.getId();18            /子流程開始流轉(zhuǎn)19            processInstanc

22、e.signal();20        21        22    23        再看其中一個子流程的定義: 1<?xml version="1.0" encoding="UTF-8"?> 2<process-

23、definition  xmlns=""  name="sub1"> 3    <start-state name="start-state1"> 4        <transition to="Sub1Task"></transition> 5 

24、0;  </start-state> 6 7    <task-node name="Sub1Task"> 8        <task name="SubTask1"></task> 9        <transition

25、 to="end-state1"></transition>10    </task-node>1112    <end-state name="end-state1"></end-state>1314    <event type="process-start">15    

26、60;   <script name="ProcessStartScript">16            System.out.println(&quot;-sub1流程啟動-&quot;);17        </script>18    </eve

27、nt>1920    <event type="process-end">21        <action name="SubProcessEndAction" class="jbpmTest.bfzlc.action.SubProcessEndAction"></action>22    </ev

28、ent>23</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論