⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atm.bpel

📁 jbpm-bpel-1.1.Beta3 JBoss jBPM Starters Kit  是一个综合包
💻 BPEL
📖 第 1 页 / 共 2 页
字号:
<?xml version="1.0" encoding="UTF-8"?>
<process name="AtmFrontEnd" targetNamespace="urn:samples:atm"
  xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
  xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
  xmlns:tns="urn:samples:atm" xmlns:atm="urn:samples:atm"
  xmlns:typ="urn:samples:atm" xmlns:tic="urn:samples:ticket"
  xmlns:acc="urn:samples:account" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://schemas.xmlsoap.org/ws/2003/03/business-process/
      http://schemas.xmlsoap.org/ws/2003/03/business-process/">

  <partnerLinks>
    <!-- relationship with the ATM -->
    <partnerLink name="atm" partnerLinkType="tns:Atm-Front" myRole="FrontEnd" />
    <!-- relationship with the ticket issuer -->
    <partnerLink name="ticket" partnerLinkType="tns:Front-Ticket"
      partnerRole="TicketIssuer" />
    <!-- relationship with the account system -->
    <partnerLink name="account" partnerLinkType="tns:Front-Account"
      partnerRole="AccountSystem" />
  </partnerLinks>

  <variables>
    <!-- ATM connection request -->
    <variable name="connectReq" messageType="atm:connectRequest" />
    <!-- ticket creation request -->
    <variable name="ticketReq" messageType="tic:ticketRequest" />
    <!-- ticket number wrapper -->
    <variable name="ticketMsg" messageType="tic:ticketMessage" />
    <!-- ATM connection flag -->
    <variable name="connected" type="xsd:boolean" />
    <!-- customer session flag -->
    <variable name="logged" type="xsd:boolean" />
  </variables>

  <correlationSets>
    <!-- conversation with a connected ATM -->
    <correlationSet name="atmInteraction" properties="tns:ticketId" />
  </correlationSets>

  <sequence name="mainSequence">

    <!-- receive a connection request -->
    <receive name="connectIn" operation="connect" partnerLink="atm"
      portType="atm:FrontEnd" variable="connectReq" createInstance="yes" />

    <!-- generate a ticket number -->
    <invoke name="createTicket" operation="createTicket" partnerLink="ticket"
      portType="tic:TicketIssuer" inputVariable="ticketReq"
      outputVariable="ticketMsg">
      <correlations>
        <correlation set="atmInteraction" pattern="in" initiate="yes" />
      </correlations>
    </invoke>

    <!-- initialize the status flags -->
    <assign name="initConnection">
      <copy>
        <from expression="true()" />
        <to variable="connected" />
      </copy>
      <copy>
        <from expression="false()" />
        <to variable="logged" />
      </copy>
    </assign>

    <!-- send the ticket number back to the ATM -->
    <reply name="connectOut" operation="connect" partnerLink="atm"
      portType="atm:FrontEnd" variable="ticketMsg">
      <correlations>
        <correlation set="atmInteraction" />
      </correlations>
    </reply>

    <!-- handle the ATM connection -->
    <scope name="connectionUnit">

      <variables>
        <!-- customer log on request -->
        <variable name="logOnReq" messageType="atm:logOnRequest" />
        <!-- connection status response -->
        <variable name="statusRsp" messageType="atm:statusResponse" />
      </variables>

      <eventHandlers>

        <!-- listen for connection status requests -->
        <onMessage operation="status" partnerLink="atm" portType="atm:FrontEnd"
          variable="ticketMsg">

          <correlations>
            <correlation set="atmInteraction" />
          </correlations>

          <!-- report the connection status -->
          <sequence name="statusSequence">

            <!-- set a status string depending on the flag values -->
            <switch name="statusSwitch">

              <case condition="bpel:getVariableData('logged')">

                <assign name="setStatusLogged">
                  <copy>
                    <from expression="'logged'" />
                    <to variable="statusRsp" part="status" />
                  </copy>
                </assign>

              </case>

              <case condition="bpel:getVariableData('connected')">

                <assign name="setStatusConnected">
                  <copy>
                    <from expression="'connected'" />
                    <to variable="statusRsp" part="status" />
                  </copy>
                </assign>

              </case>

              <otherwise>

                <assign name="setStatusDisconnected">
                  <copy>
                    <from expression="'disconnected'" />
                    <to variable="statusRsp" part="status" />
                  </copy>
                </assign>

              </otherwise>

            </switch>

            <!-- send the status back to the ATM -->
            <reply name="statusOut" operation="status" partnerLink="atm"
              portType="atm:FrontEnd" variable="statusRsp" />

          </sequence>

        </onMessage>

      </eventHandlers>

      <!-- process ATM requests, one at a time -->
      <while name="connectionLoop"
        condition="bpel:getVariableData('connected')">

        <!-- listen for either disconnect or log on request -->
        <pick name="connectionMenu">

          <onMessage operation="disconnect" partnerLink="atm"
            portType="atm:FrontEnd" variable="ticketMsg">

            <correlations>
              <correlation set="atmInteraction" />
            </correlations>

            <!-- turn off connected flag for breaking the connection loop -->
            <assign name="setDisconnected">
              <copy>
                <from expression="false()" />
                <to variable="connected" />
              </copy>
            </assign>

          </onMessage>

          <onMessage operation="logOn" partnerLink="atm" portType="atm:FrontEnd"
            variable="logOnReq">

            <correlations>
              <correlation set="atmInteraction" />
            </correlations>

            <!-- handle the customer session -->
            <scope name="customerUnit">

              <variables>
                <!-- customer name wrapper -->
                <variable name="customerMsg" messageType="acc:customerMessage" />
                <!-- access check response -->
                <variable name="accessMsg" messageType="acc:accessMessage" />
                <!-- customer log on response -->
                <variable name="logOnRsp" messageType="atm:logOnResponse" />
                <!-- account balance wrapper -->
                <variable name="balanceMsg" messageType="acc:balanceMessage" />
                <!-- balance change request -->
                <variable name="balanceChange" messageType="atm:balanceChange" />
                <!-- account system operation request -->
                <variable name="accountOperation"
                  messageType="acc:accountOperation" />
                <!-- customer log on fault -->
                <variable name="unauthorizedAccess"
                  messageType="atm:unauthorizedAccess" />
                <!-- withdraw fault -->
                <variable name="insufficientFunds"
                  messageType="atm:insufficientFunds" />
                <!-- resulting balance after withdraw -->
                <variable name="newBalance" type="xsd:double" />
              </variables>

              <correlationSets>
                <!-- conversation with a logged customer -->
                <correlationSet name="customerInteraction"
                  properties="tns:customerId" />
              </correlationSets>

              <sequence name="customerSequence">

                <!-- populate access check request -->
                <assign name="fillAccessCheck">
                  <copy>
                    <from variable="logOnReq" part="customerName" />
                    <to variable="customerMsg" part="customerName" />
                  </copy>
                </assign>

                <!-- check account access privilege -->
                <invoke name="checkAccess" operation="checkAccess"
                  partnerLink="account" portType="acc:AccountSystem"
                  inputVariable="customerMsg" outputVariable="accessMsg">
                  <correlations>
                    <correlation set="customerInteraction" pattern="out"
                      initiate="yes" />
                  </correlations>
                </invoke>

                <!-- decide outcome of customer session request -->
                <switch name="accessDecision">

                  <case
                    condition="bpel:getVariableData('accessMsg', 'granted')">

                    <!-- accept customer session -->
                    <sequence name="accessGrantedSequence">

                      <!-- turn on logged flag for starting session loop  -->
                      <assign name="setLoggedOn">
                        <copy>
                          <from expression="true()" />
                          <to variable="logged" />
                        </copy>
                      </assign>

                      <!-- send acknowledgement back to ATM -->
                      <reply operation="logOn" partnerLink="atm"
                        portType="atm:FrontEnd" variable="logOnRsp" />

                    </sequence>

                  </case>

                  <otherwise>

                    <!-- reject customer session -->
                    <sequence name="accessDeniedSequence">

                      <!-- populate the log on fault -->
                      <assign name="fillAccessDenial">
                        <copy>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -