bpmn到bpel映射的例子(翻译四)

来源:互联网 发布:优秀的女人知乎 编辑:程序博客网 时间:2024/06/06 17:43
 在图4中,关于“check flight reservation”和“check hotel reservation”任务与“check credit card”任务很相似。表12,13是生成的bpel的结果
在图4中,最上面有一个数据映射的图形,是为“check car reservation”准备数据。其他的活动都把这部分隐藏到自身的活动中,这对check car reservation是不可能大的。这个活动是被包括到循环中。数据映射只需要一次。所以不能包括到循环中,
表14展现了“data map”活动到assign元素转换的过程。
 
表15是生成的bpel结果
5映射循环
在流程中,预定汽车服务出现了一个循环。如图5
   中间这两个活动执行的次数由预定是否满足特定需要而决定。循环结构由判断gateway决定,流向由评估的结果决定。“check again”sequence flow从gateway开始,链接到上方的对象。链接的flow将决定怎么映射到bpel。
   GateWay不一定会引起循环,虽然这个流程没有这样的例子。映射的形式取决于采用图形结构(flow)还是块结构(sequence)。
  在基于块结构中,gateWay将被映射为switch,每一个分支被映射为case元素,表达式被映射为case的condition。
  在图形结构中,gateway被映射为link,而转换的条件被映射为source元素中的transitonCondition。在这种情况下,“Evaluate Reservation Result”活动被映射为invoke元素。
   然而,由于flow具有非循环性,即在同一个flow中,target元素不能出现在”上游”的活动中,所以我们要在while中创建一个loop元素,用他来包含while中的主要内容部分。在这个例子中,为“check car Reservation ”“Evaluated Reservation Result”两个活动。
  在“check again”中,有一个condition属性,在这个我们用java语言来扩展实现这部分功能。
   在例子16中,显示了由loop对应的代码
 
   “check car Reservation”活动和他自身的属性与invoke元素有一个直接的映射关系。看例子17
“Evaluate Reservation Result”活动与前面的几个活动不同,类型为“script”这意味着当活动到达时,服务还没有被调用,但引擎已经将在活动中定义的“script”起到效果了。在这个例子中,“script”由java编写。这个“script”检查三个预定的结果,来决定这次旅行是否可预定。
   在invoke元素中,将包含java代码,例子18显示了“Evaluate Resservation Result”活动的属性,以及如何映射。
 
例子19是bpel代码
   在例子5中,flow也就是while的结束。所以在这里不需要link
 
SYNCHRONIZING PARALLEL FLOW
  在“check credit card”活动之后,有三个并行的活动。在汇集到“confirmation”活动之前,是并行同步工作的。见图6 ,这也意味着这三个路径在都完成之前,下一步操作不能被执行。