“Confirmation”活动与“Evaluate Reservation Result”活动类似。也有java代码。例子20显示了生成的bpel代码
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/20.gif)
在bpel代码中,真正的同步发生中“Confirmation”活动中,这里没有像bpmn中的独立的同步操作。Bpel使用在flow 中的link元素来创建依赖。包括同步。“confirmation”中有三个target元素。这个invoke必须等待三个link的信号都到达之后才可以进行。
在“confirmation”活动中,因为没有“joincondition”属性。所以要等到三个信号都到达。这就是同步的操作。
在“Done”活动中,有一个link12,它有一个Transitioncondition的属性,在这个是不需要的。因为link12在while活动完成之前不会被触发。这也意味这个当被触发时,transitionCondition总是true;如果这里有另外一个出口,这个可能会有用。
THE END OF FLOW
在“confirmation”活动之后,将有一个回复给process的调用者。这个process也就结束了。
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/fig7.gif)
这个消息结束事件将被映射为reply元素。从“confirmation”活动到“reply”的顺序关系将被映射为link元素(link12)。例子21将被显示为消息结束事件与reply 的映射。
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/21.gif)
例子22显示了bpel代码。
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/22.gif)
错误处理:
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/fig8.gif)
正如在图8中看到的,“check credit card”活动有一个错误处理事件,这个事件有特定的错误触发,打断活动而之间推出flow中,当输入一个不合法的信用卡号时,这个错误将被触发。
如果错误发生,那么“handle Fault”活动将处理这个信息和准备返回信息。“reply”消息结束事件将发这个消息。这意味着这个process就结束。所有其他的活动将不执行。Bpel为这种情况提供了在一个“scope”中“faultHandlers”的机制。这个scope将包括整个process,这意味着主要的process(flow)将和foultHandlers是一个级别。在这个scope中,当faultHandler被触发时,将打断flow的执行。
Reply消息结束事件被放在faultHandlers中,“handler fault”活动也是一个“csript”类型,
这个reply与flow中的reply类似。
为了保持一致性,在错误处理部分将被放在一个flow中,handle fault与“reply”通过link14连接。例子23显示
了这部分的bpel代码
![](http://blog.csdn.net/images/blog_csdn_net/classic1999/23.gif)
结论:
这篇文章提供了一个
bpmn
到可执行流程之间映射的例子。为达到这个目标,图表的对象和属性被分解并映射为适当的
bpel
元素。尽管这片文章没有涉及得到
bpmn
所有的方面,但它一步步展现了一个旅行预定流程到
bpel
的映射。所有,这个例子说明了
bpmn
与
bpel
的结合方式。由
bpmn
提供业务层次视图,然后生成可执行的代码(
bpel
)。