零全零美(www.zzgwt.com)
生活中的很多事情,并不像If...Else那么簡單!
BlogJava
首頁
新文章
聯系
管理
posts - 96,comments - 52,trackbacks - 0
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
隨筆分類
apache組件(4)
JavaScript(14)
jbpm(6)
oracle(5)
PL/SQL(1)
SEO(3)
tomcat(5)
ubuntu(16)
安全相關(26)
數據庫
正則表達式(6)
設計模式(3)
隨筆檔案
2012年9月 (1)
2012年7月 (3)
2012年6月 (2)
2009年11月 (36)
2009年10月 (18)
2009年9月 (1)
2009年2月 (1)
2009年1月 (1)
2008年11月 (9)
2008年9月 (1)
2008年8月 (1)
2008年7月 (4)
2008年6月 (2)
2008年5月 (6)
2008年4月 (11)
友情鏈接
www.modaotea.com
茶藝培訓 茶樓管理
www.website371.com
鄭州做網站 鄭州網站建設 鄭州做網站公司 鄭州網站優化 鄭州網站制作
河南省大井科技有限公司(www.zzgwt.com)
搜索
積分與排名
積分 - 151396
排名 - 406
最新評論
1.?re: 正則表達式學習筆記(1) 行的開始和結束、字符組、連字符、脫字符、用"."去匹配任意字符
贊
--性感電子
2.?re: Apache httpd+Jk+Tomcat實現JAVA服務器配置全解析(1):基礎環境搭建
什么嘛,我就是不懂這些才搜索的,我最需要的就是你省略的部分,如何配置安裝,唉,又得繼續找資料了。
--吐槽
3.?re: JavaScript學習筆記(1)變量的生命周期
寫的很好
--fwd
4.?re: SELinux學習(1):Can't connect to MySQL server on 'ip' (13) 的解決方案
沒玩過這東西啊呵呵
--臺式萬用表
5.?re: [原創]巧用System.getProperty()編譯現有工程的java文件
你不能用ANT嗎?
--DB Compare Tool
[原創]JBPM實踐之:并發子流程的實現
關于JBPM中并發子流程的實現方式,網上有很多的說法,但是好像每種辦法都有這樣那樣的缺點,要么實現太復雜,要么就是會使Token無法繼續流轉。這里我介紹一種我的并發子流程的實現方式:使用TaskNode使任務并行的方式,模擬實現JBPM子流程的并發執行。
我先簡單的介紹一下實現思路:
1、數據庫中應該有至少三個已經發布過的流程定義(ProcessDefinition),發布的順序無所謂,一個主流程兩個子流程
2、我們在主流程中要實現并發子流程的環節放置TaskNode,設置create-tasks="false"、signal="last-wait"
3、我們想要實現幾個子流程的并發就在第二步放置的TaskNode中放置幾個Task,每個Task的名字都是要并發的子流程的名稱
4、在TaskNode的Node-Enter action中,我們手動為每一個Task創建一個任務實例,同時我們取得Task的名字也就是要并發的子流程的名字,創建流程實例
5、為每個新創建的流程實例設置流程變量:TaskInstanceID表示創建當前子流程的那個主流程任務實例ID,并使子流程開始流轉
6、子流程結束,取得流程變量TaskInstanceID,該流程變量TaskInstanceID是創建他的那個主流程的任務實例,得到該TaskInstance,并TaskInstance.end();
這個時候因為我們設置了TaskNode的Signal為"last-wait",所以當所有的子流程均結束的時候,主流程才會繼續,這樣我們也就實現了子流程的并發效果。很簡單的一個思路實現起來也并不復雜.
首先讓我們看一下主流程的流程定義:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
process-definition
xmlns
=""
name
="super1"
>
3
<
start-state
name
="start-state1"
>
4
<
transition
to
="task-node1"
></
transition
>
5
</
start-state
>
6
7
<
task-node
name
="task-node1"
create-tasks
="false"
signal
="last-wait"
>
8
<
description
>
9
我們要利用這個TaskNode實現并發子流程,create-tasks="true"是為了可以手動控制任務實例的創建,同時創建子流程,
10
signal="last-wait"是為了實現當所有子流程均已完成,主流程才能繼續運行的效果
11
</
description
>
12
<
task
name
="sub1"
>
13
<
description
>
要并發的子流程之一
</
description
>
14
</
task
>
15
<
task
name
="sub2"
>
16
<
description
>
要并發的子流程之二
</
description
>
17
</
task
>
18
<
event
type
="node-enter"
>
19
<
action
name
="NodeEnterAction"
class
="jbpmTest.bfzlc.action.NodeEnterAction"
></
action
>
20
</
event
>
21
<
transition
to
="end-state1"
></
transition
>
22
</
task-node
>
23
24
<
end-state
name
="end-state1"
></
end-state
>
25
26
<
event
type
="process-start"
>
27
<
script
name
="SuperProcessStart"
>
28
System.out.println(
"
主流程啟動,并設置主流程ID
"
);
29
</
script
>
30
</
event
>
31
<
event
type
="process-end"
>
32
<
script
name
="SuperProcessEnd"
>
33
System.out.println(
"
主流程結束
"
);
34
</
script
>
35
</
event
>
36
</
process-definition
>
下面是主流程的Node-EnterAction的代碼:
1
public
class
NodeEnterAction
implements
ActionHandler
{
2
3
public
void
execute(ExecutionContext executionContext)
throws
Exception
{
4
//
取得本節點所有的Task
5
Set
<
Task
>
tasks
=
((TaskNode)executionContext.getNode()).getTasks();
6
7
TaskMgmtInstance tgmt
=
executionContext.getTaskMgmtInstance();
8
9
for
(Task task : tasks)
{
10
//
為每一個Task創建實例
11
TaskInstance taskInstance
=
tgmt.createTaskInstance(task, executionContext);
12
//
業務Service
13
JbpmTestFacade jbpmTestFacade
=
((JbpmTestFacade)SpringBeanUtil.getBean(
"
jbpmTestFacade
"
));
14
//
根據Task的名字,為每一個Task創建相應的子流程
15
ProcessInstance processInstance
=
jbpmTestFacade.createProcessInstance(task.getName());
16
//
設置創建這個子流程的流程實例ID
17
processInstance.getContextInstance().setVariable(
"
TaskInstanceID
"
, taskInstance.getId());
18
//
子流程開始流轉
19
processInstance.signal();
20
}
21
22
}
23
}
再看其中一個子流程的定義:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
process-definition
xmlns
=""
name
="sub1"
>
3
<
start-state
name
="start-state1"
>
4
<
transition
to
="Sub1Task"
></
transition
>
5
</
start-state
>
6
7
<
task-node
name
="Sub1Task"
>
8
<
task
name
="SubTask1"
></
task
>
9
<
transition
to
="end-state1"
></
transition
>
10
</
task-node
>
11
12
<
end-state
name
="end-state1"
></
end-state
>
13
14
<
event
type
="process-start"
>
15
<
script
name
="ProcessStartScript"
>
16
System.out.println(
"
-------------------sub1流程啟動------------------------------
"
);
17
</
script
>
18
</
event
>
19
20
<
event
type
="process-end"
>
21
<
action
name
="SubProcessEndAction"
class
="jbpmTest.bfzlc.action.SubProcessEndAction"
></
action
>
22
</
event
>
23
</
process-definition
>
24
下面是該子流程的ProcessEndAction:
1
public
class
SubProcessEndAction
implements
ActionHandler
{
2
3
public
void
execute(ExecutionContext executionContext)
throws
Exception
{
4
System.out.println(executionContext.getProcessDefinition().getName()
+
"
結束
"
);
5
//
得到創建當前子流程的那個TaskInstanceID
6
String taskInstanceID
=
executionContext.getContextInstance().getVariable(
"
TaskInstanceID
"
).toString();
7
8
//
業務Service
9
JbpmTestFacade jbpmTestFacade
=
((JbpmTestFacade)SpringBeanUtil.getBean(
"
jbpmTestFacade
"
));
10
//
取得創建當前子流程的那個主流程taskInstance
11
TaskInstance taskInstance
=
jbpmTestFacade.geTaskInstance(Long.valueOf(taskInstanceID));
12
taskInstance.end();
13
}
14
15
}
思路很清楚,代碼也很簡單,按照這種方式我們可以讓子流程實現所有Task能實現的功能。
文章原創,轉載請注明出處!
posted on 2008-11-12 15:00
零全零美
閱讀(3318)
評論(6)
編輯
收藏
所屬分類:
jbpm
FeedBack:
#
re: [原創]JBPM實踐之:并發子流程的實現
2008-11-25 16:30 |
zhaoyta
有問題
回復
更多評論
#
re: [原創]JBPM實踐之:并發子流程的實現
2008-11-25 16:31 |
zhaoyta
假如你主流程里的task是分配給一個人,子流程也有可能建立其他任務給這個人。
這個時候這個人獲得了多個任務,如果手動把主流程的task結束了怎么辦
回復
更多評論
#
re: [原創]JBPM實踐之:并發子流程的實現
2008-11-25 17:39 |
昨夜流星
@zhaoyta
看來你還是沒有明白我文中所說的思路啊,主流程中用于創建子流程的那個Task是不分配給任何人的,該任務的實例從Task-Node的Enter-action中被創建,然后會把taskInstanceID作為流程級變量放入該任務實例創建的子流程中,在該子流程的Process-end的action中從流程變量里取出該taskInstanceId,然后把該任務實例結束掉。
回復
更多評論
#
re: [原創]JBPM實踐之:并發子流程的實現
2009-05-03 09:53 |
zhengjj
要是實現數量不定的并發子流程,需要如何實現?請給點提示
回復
更多評論
#
re: [原創]JBPM實踐之:并發子流程的實現
2009-05-19 10:13 |
shappy
@zhengjj
苯啊,通過流程變量或者其他變通的方式傳遞你需要建立的子流程數,甚至不通過任務名來建立自流程,自己傳變量確定子流程的名稱和數量也可以嘛。樓主起了個思路,其他的就很好做了。
回復
更多評論
#
re: [原創]JBPM實踐之:并發子流程的實現
2009-05-31 22:27 |
昨夜流星
樓上正解,其實我也是提供了一個基本的思路而已!
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
[原創]巧用System.getProperty()編譯現有工程的java文件
[原創]JBPM源碼解讀之:Join
[原創]JBPM實踐之:并發子流程的實現
JBPM實踐之:使用Fork中的Script實現多路路由選擇
[原創]JBPM源碼解讀之:Fork
JBPM實踐之:在流程圖上高亮顯示指定的任務節點
Copyright ©2025 零全零美 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
最近免费mv在线观看动漫
|
二个人看的www免费视频
|
久久无码av亚洲精品色午夜
|
精品国产亚洲男女在线线电影
|
亚洲中文久久精品无码
|
亚洲国产精品自在在线观看
|
亚洲福利视频网站
|
亚洲AV日韩AV无码污污网站
|
国产成人无码免费看片软件
|
久久永久免费人妻精品
|
美女视频黄免费亚洲
|
国产人成免费视频
|
亚洲av无码一区二区三区乱子伦
|
亚洲国产综合精品
|
国产亚洲福利精品一区二区
|
插鸡网站在线播放免费观看
|
亚洲免费黄色网址
|
亚洲精品97久久中文字幕无码
|
亚洲第一成年男人的天堂
|
亚洲精品无码国产片
|
一级全免费视频播放
|
精品国产无限资源免费观看
|
成人亚洲网站www在线观看
|
亚洲国产日韩一区高清在线
|
亚洲午夜理论片在线观看
|
黄床大片免费30分钟国产精品
|
麻豆国产精品免费视频
|
亚洲第一区在线观看
|
亚洲福利视频网站
|
a级毛片免费高清视频
|
麻豆视频免费观看
|
国产亚洲欧洲Aⅴ综合一区
|
中文字幕视频免费在线观看
|
亚洲第一网站免费视频
|
无码 免费 国产在线观看91
|
亚洲伊人久久大香线蕉啊
|
在线观看亚洲电影
|
日本免费人成在线网站
|
亚洲性日韩精品一区二区三区
|
亚洲影视一区二区
|
在线观看免费无码视频
|