赵翔鹏的Blog Xiangpeng's Thinkpad

24八/070

BPEL4People, HumanTask和BPEL2.0之间的关系

作为对BPEL的扩展,BPEL4People本来打算做一份规范,但是做到后面做成了两份,即BPEL4People和HumanTask,这两个规范要一起使用。下面我们用一个简单的例子说明它们之间的关系。

WS-BPEL2里定义了"extensionActivity",支持对标准BPEL进行扩展。BPEL4People则定义了一种特殊的extensionActivity,叫做peopleActivity,如下所示:
<sequence>
<extensionActivity>
<b4p:peopleActivity name="electEmployeeOfTheMonth"
inputVariable="candidates"
outputVariable="vote"
isSkipable="yes">
<htd:task name="votingTask">
...
</htd:task>
<b4p:scheduledActions>...</b4p:scheduledActions>
</b4p:peopleActivity>
</extensionActivity>
<assign>
<copy>
<from>$vote</from>
<to>$electionResult/votes[i]</to>
</copy>
</assign>
</sequence>
这个sequence先执行了一个peopleActivity,然后做了个赋值。注意peopleActivity是放在extensionActivity里面的,好让BPEL2.0引擎知道它是一个扩充活动。

BPEL4People仅仅定义了peopleActivity的接口,比如输入/输出变量,跟<invoke>的功能差不多,当然还定义了一些API函数用于取得一个peopleActivity的参数,比如可以通过getActualOwner得知,已经执行完毕的某个peopleActivity究竟是由哪个人做的。

而一个peopleActivity的主要细节,是通过WS-HumanTask来定义的,见上面例子中的<htd:task>部分。换句话说,BPEL4People规范的作用仅仅是连接WS-BPEL2.0和WS-HumanTask。下面是该HumanTask的具体内容:
<htd:task name="votingTask">
<htd:interface operation="vote"    portType="el:votingPT"/>
<htd:peopleAssignments>
<htd:potentialOwners>
<htd:from>$voters/users/user[i]</htd:from>
</htd:potentialOwners>
</htd:peopleAssignments>
<htd:presentationElements/>
</htd:task>
这里只定义了该任务的potentialOwner,即哪些人有权限执行该任务;在<htd:task>里还可以定义很多细节,比如过多久之后会超时,超时后要执行什么动作(Escalation),等等。

可以说凡是跟“人”有关的东西,都定义在WS-HumanTask中。每个business process中可能需要定义一些角色,和一些人;这些"角色"和"人"也是由WS-HumanTask定义的,此外还预定义了几种角色,比如Administrator, Task initiator等。

总结一下,WS-HumanTask专注于“人”,与BPEL规范没有一点关系,甚至连名字都不一样——在BPEL中叫做Activity的东西到了这儿就变成了Task;而BPEL4People就是BPEL 2.0和HumanTask之间的桥梁。

要学习这两个规范,我建议先看WS-BPEL4People规范中的Appendix - D,这里给了个完整的例子。看过例子再读规范,就清楚得多了。

相关链接:BPEL4People规范阅读笔记

评论 (0) 引用 (0)

还没有评论.


Leave a comment

(required)

还没有引用.