现在的位置: 首页 > 综合 > 正文

使用ActiveBPEL编排、控制Web Services(2)

2013年07月15日 ⁄ 综合 ⁄ 共 3839字 ⁄ 字号 评论关闭
首先是检查信用卡应用的数额。如果它的量超过$10,000,我们就把输入的数据转交给approver Web service以获得一个响应。反之,如果数量在$10,000以下,我们就先调用assessor Web service,让它返回一个回答,如果响应是"lowrisk",那么应用程序立即被证实。否则我们就需要进一步调用approver Web service。

  这是一个很直接的业务过程,很明显的展示了BPEL的强大,达到了为我们的核心Web services编排不同调用场景的目的。现在,让我们来看看实际的BPEL-XML语法。

<?xml version="1.0" encoding="UTF-8"?>
<process name="loanApprovalProcess" suppressJoinFailure="yes"
targetNamespace="http://acme.com/loanprocessing"
xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:apns="http://tempuri.org/services/loanapprover"
xmlns:asns="http://tempuri.org/services/loanassessor"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:lns="http://loans.org/wsdl/loan-approval" xmlns:loandef="http://tempuri.org/services/loandefinitions"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <partnerLinks>
      <partnerLink myRole="approver" name="customer" partnerLinkType="lns:loanApprovalLinkType"/>
      <partnerLink name="approver" partnerLinkType="lns:loanApprovalLinkType" partnerRole="approver"/>
      <partnerLink name="assessor" partnerLinkType="lns:riskAssessmentLinkType" partnerRole="assessor"/>
   </partnerLinks>
   <variables>
      <variable messageType="loandef:creditInformationMessage" name="request"/>
      <variable messageType="asns:riskAssessmentMessage" name="riskAssessment"/>
      <variable messageType="apns:approvalMessage" name="approvalInfo"/>
      <variable messageType="loandef:loanRequestErrorMessage" name="error"/>
   </variables>
   <faultHandlers>
      <catch faultName="apns:loanProcessFault" faultVariable="error">
         <reply faultName="apns:loanProcessFault" operation="approve" partnerLink="customer"
       portType="apns:loanApprovalPT" variable="error"/>
      </catch>
   </faultHandlers>
   <flow>
      <links>
         <link name="receive-to-approval"/>
         <link name="receive-to-assess"/>
         <link name="approval-to-reply"/>
         <link name="assess-to-setMessage"/>
        <link name="assess-to-approval"/>
          <link name="setMessage-to-reply"/>
      </links>
      <receive createInstance="yes" name="receive1" operation="approve" partnerLink="customer"
      portType="apns:loanApprovalPT" variable="request">
         <source linkName="receive-to-approval" transitionCondition="bpws:getVariableData('request',
         'amount')>=10000"/>
         <source linkName="receive-to-assess" transitionCondition="bpws:getVariableData('request',
         'amount')<10000"/>
      </receive>
      <invoke inputVariable="request" name="invokeapprover" operation="approve"
      outputVariable="approvalInfo" partnerLink
="approver"
     portType="apns:loanApprovalPT">
         <target linkName="receive-to-approval"/>
         <target linkName="assess-to-approval"/>
         <source linkName="approval-to-reply"/>
      </invoke>
      <invoke inputVariable="request" name="invokeAssessor" operation="check" outputVariable="riskAssessment"
     partnerLink="assessor"
     portType="asns:riskAssessmentPT">
         <target linkName="receive-to-assess"/>
         <source linkName="assess-to-setMessage" transitionCondition=
         "bpws:getVariableData('riskAssessment', 'risk')='low'"/>
         <source linkName="assess-to-approval" transitionCondition="bpws:getVariableData
        ('riskAssessment', 'risk')!='low'"/>
      </invoke>
      <reply name="reply" operation="approve" partnerLink="customer" portType="apns:loanApprovalPT"
      variable="approvalInfo">
         <target linkName="approval-to-reply"/>
         <target linkName="setMessage-to-reply"/>
      </reply>
      <assign name="assign">
         <target linkName="assess-to-setMessage"/>
         <source linkName="setMessage-to-reply"/>
         <copy>
            <from expression="'approved'"/>
            <to part="accept" variable="approvalInfo"/>
         </copy>
      </assign>
   </flow>
</process>

  注意BPEL的元素有<partnerLink>, <variable>, <faultHandler>, <flow>, >target>等等。继续讲解BPEL语法的含义超出了本问的范围,但如果你跟进的话你就能发现在伪代码中有同样的模式。还要注意到,很多BPEL过程是使用特殊的编辑器创建的,这样可以避免手写XML时的错误。 

【上篇】
【下篇】

抱歉!评论已关闭.