首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>BPEL过程组件

BPEL过程组件

2008-01-04 10:48作者:佚名出处:论坛整理责任编辑:方舟

  错误处理(Fault Handlers)

  BPEL程序在调用合作伙伴的过程中,或者合作伙伴的服务有可能会抛出异常,或者在BPEL流程内部调用中也会抛出异常(如将字符串String类型的变量赋值给整数类型int的变量)。BPEL流程有一套机制可以捕获异常,并可以定义捕获异常后的下一步行动。如本例中定义了一个“unknownNAME”(系统中无此顾客姓名的异常),BPEL流程在捕获此异常后,通过<reply>返回给服务请求者。

  需要说明的是,这个“unknownNAME”必须事先在BPEL的接口WSDL中定义,本例中的定义如下:

<xsd:complexType name="unknownNAMEFault">

<xsd:sequence>

<xsd:element name="name" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

  而且合作伙伴返回的异常必须符合上面的格式,才能捕获这个异常,否则是不会捕获这类异常的。合作伙伴返回的异常实例如下:

<InvalidNAME xmlns="urn:sample:soa:houseloanagency">

<name>Zhang San1</name>

</InvalidNAME>

  下面是BPEL异常处理的写法:

<bpel:faultHandlers>

<bpel:catch faultName="ca:UnkownNAME">

<bpel:sequence>

<bpel:assign>

<bpel:copy>

<bpel:from variable="request" part="payload"

query="/tns:getLoanQuoteRequest/tns:name" />

<bpel:to variable="unknownNAME" part="payload"

query="/tns:unknownNAMEFault/tns:name" />

</bpel:copy>

</bpel:assign>

<bpel:reply name="response" partnerLink="HouseLoanBrokerResponse"

portType="tns:HouseLoanBroker" operation="getLoanQuote"

variable="unknownNAME" faultName="tns:unknownNAME" >

</bpel:reply>

</bpel:sequence>

</bpel:catch>

</bpel:faultHandlers>

  补偿处理(Compensation Handlers)

  BPEL流程需要处理一系列的业务流程活动,业务流程往往有这样的业务需求,如果某一个活动出现异常后,希望它前面的活动也能够取消。

  以上面的房屋贷款的实例来说,假如房屋贷款的BPEL流程已经调用了外部银行Bank的贷款服务,得到了相应的首付和贷款利率,银行那边也有了相应的记录;但是BPEL流程将Bank的响应结果返回给客户时,出现了异常。这个时候BPEL流程就需要通知Bank取消相应的银行贷款记录。这就需要用到BPEL的补偿处理机制。

  继续以房屋贷款为例来说明这个问题。

  补偿处理机制是在一定的范围内进行的,因为要对银行贷款服务进行补偿,先用<scope>定义一个范围。此外,需要银行不仅有前面的“getLoanQuote”的贷款功能的接口操作,同时Bank也需要提供一个取消房屋贷款的接口操作,这里假设已经有了这么一个接口操作,名为“canelLoanQuote”。

  定义补偿的具体过程是先定义一个<scope>,此处为"bank-loan-scope";再定义<compensationHandler>,并在里面定义相应的活动,如这里的活动为<invoke>取消贷款的操作(Operation)="canelLoanQuote",程序如下所示:

<scope name="bank-loan-scope">

<compensationHandler>

<bpel:invoke name="bank0" partnerLink="Bank0"

portType="bk:Bank" operation="canelLoanQuote"

inputVariable="bk-loanquote-request"

outputVariable="bk-loanquote-response-0"

sm:endpoint="urn:sample:soa:bank:Bank0:bank" >

</bpel:invoke>

</compensationHandler>

<bpel:invoke name="bank0" partnerLink="Bank0"

portType="bk:Bank" operation="getLoanQuote"

inputVariable="bk-loanquote-request"

outputVariable="bk-loanquote-response-0"

sm:endpoint="urn:sample:soa:bank:Bank0:bank" >

</bpel:invoke>

</scope>

  此外需要在BPEL的接口中定义WSDL返回消息给客户时的异常,假设为“ReplyFault”,当BPEL流程截获这个异常时,将会调用所表明范围内的补偿机制,补偿机制会进一步调用银行的取消贷款的操作,下面是BPEL的异常处理程序片段。

<bpel:faultHandlers>

<bpel:catch faultName="ca: ReplyFault ">

<bpel:sequence>

<compensate scope="bank-loan-scope"/>

</bpel:sequence>

</bpel:catch>

</bpel:faultHandlers>
共3页。 上一页123
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络