前面已经系统地阐述了进程模型和诊断方法,下面提供一个真实的BPEL进程来举例说明进程模型的构造过程以及发生异常时的诊断过程。
图4.7 订票代理服务实例
如图4.7所示,当一个用户想要在网上订购机票时,用户通过订票服务端口(UserBookingPT)向订票代理服务发送订票请求。订票代理服务首先根据接收到的用户信息调用用户等级查询服务来查找用户等级,如普通用户、VIP用户等。然后订票代理服务再根据用户的等级及用户输入的机票信息(如时间、出发地、目的地等)从American Airlines和Air China两个航空公司查询相应的机票价格。最后,订票代理服务比较价格并返回最便宜的机票信息给用户。
首先,我们通过订票代理服务的BPEL进程规约构建BPN模型(图4.8):
图4.8 订票代理服务的BPN模型
(1)BPNt1=({p1,p2},{t1},{(p1,t1),(t1,p2)},{∅},{m1},{opt1});
(2)BPNt2=({p2,p3},{t2},{(p2,t2),(t2,p3)},{∅},{m1,m2},{copy(m1,m2)});
(3)BPNt3=({p3,p4},{t3},{(p3,t3),(t3,p4)},{∅},{m2,m3},{opt3});
(4)BPNt4=({p4,p5},{t4},{(p4,t4),(t4,p5)},{∅},{m3,m4},{copy(m3,m4)});
(5)BPNt5={BPNt6,BPNt7,BPNt8,BPNt9}flw;
(6)BPNt6=({p6,p8},{t6},{(p6,t6),(t6,p8)},{∅},{m4},{opt6});
(7)BPNt7=({p8,p10},{t7},{(p8,t7),(t7,p10)},{∅},{m6},{opt7});
(8)BPNt8=({p7,p9},{t8},{(p7,t8),(t8,p9)},{∅},{m4},{opt8});
(9)BPNt9=({p9,p10},{t9},{(p9,t9),(t9,p10)},{∅},{m7},{opt9});
(10)P={p5,p6,p7,p8,p9,p10};
(11)T={t5,t6,t7,t8,t9};
(12)F={(p5,t5),(t5,p6),(t5,p7),(p6,t6),(p7,t8),(t6,p8),(t8,p9),(p8,t7),(p9,t9),(t7,p10),(t9,p10)};(www.xing528.com)
(13)W={∅};
(14)V={m4,m6,m7};
(15)OP={opt5,opt6,opt7,opt8,opt9};
(16)BPNt10={(AA.price≥AC.price,BPNt11),(AA.price<AC.price,BPNt12)}swc;
(17)BPNt11=({p11,p13},{t11},{(p11,t11),(t11,p13)},{∅},{m6,m7,m8},{copy((m6,m7),m8)});
(18)BPNt12=({p12,p13},{t12},{(p12,t12),(t12,p13)},{∅},{m6,m7,m9},{copy((m6,m7),m9)});
(19)P={p10,p11,p12,p13};
(20)T={t10,t11,t12};
(21)F={(p10,t10),(t10,p11),(t10,p12),(p11,t11),(p12,t12),(t11,p13),(t12,p13)};
(22)W={W(t10,p11)=t,W(t10,p12)=f};
(23)V={m6,m7,m8,m9};
(24)OP={copy((m6,m7),m8),copy((m6,m7),m9),AA.price≤AC.price,AA.price>;AC.price};
(25)BPNt13=({p13,p14},{t13},{(p13,t13),(t13,p14)},{∅},{m8,m9},{oprpl})。
然后,假设American Airlines和Air China两个航空公司的Web服务返回给订票代理服务的价格信息有语义不兼容问题。一个中国用户想要订购一张从中国北京到美国洛杉矶的飞机票,于是他输入订票信息并向订票代理服务发送订票请求。订票代理服务根据用户信息查询两个航空公司的机票价格,American Airlines返回的机票价格是4151,其货币单位是美元,相当于25620元,而Air China返回的机票价格是21620,其货币单位是元。订票代理服务默认货币单位是元,因此订票代理服务从American Airlines航空公司的Web服务接收了一个错误信息,最后返回给用户的信息是American Airlines航空公司的机票最便宜。
在订票代理服务这个案例当中,由于语义故障,订票代理服务发生了异常,即D(t8)={EQT(m7,m′7)=fault},这里的消息m′7是实际观察到的从American Airlines接收到的价格信息。通过诊断我们判定活动t8故障,且故障原因是消息类型不匹配。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。