Java 人生

java (Java EE)&Linux

BlogJava 首页 新随笔 联系 聚合 管理
  15 Posts :: 2 Stories :: 5 Comments :: 0 Trackbacks
 

BPEL的概念

      BPEL(Business Process Execution Language)又叫BPEL4WS(Business Process Execution Language For Web Service),面向Web服務的業務流程執行語言。是一種使用Web服務定義和執行業務流程的語言。BPEL提供了一種相對簡單易懂的方法,可將多個WEB服務組合到一個新的復合服務(稱作業務流程)中。

      BPEL本身是一個Web服務,可以作為服務的提供者。

      BPEL是基於Web服務的,沒有Web服務就沒有BPEL


  

 BPEL
的運作方式


 BPEL的一般構成

      一個以bpel為後綴的文件(例如MyFlow.bpel)

      一個WSDL文件

      一個部置XML文件,樣子形似bpel.xml

 BPEL的實現需求

      需要熟悉單個的Web Service的使用方法

      需要了解具體的業務流程

      需要一個運行BPEL的處理器

      需要一個流程設計器

      當然需要對BPEL語法標簽的掌握等

8.6 BPEL的結構

BPEL的一般結構

            <process>

              <partnerLinks>

                <partnerLink>

                </partnerLink>

              </partnerLinks>

              <variables>

                <variable/>

              </variables>

              <faultHandlers>   

              </faultHandlers>

              <sequence>

                  Activities

              </sequence>

            </process>

<process>的屬性

<process name="ncname" targetNamespace="uri"

         queryLanguage="anyURI"?

         expressionLanguage="anyURI"?

         suppressJoinFailure="yes|no"?

         enableInstanceCompensation="yes|no"?

         abstractProcess="yes|no"?         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

.

.

</process>

<partnerLinks>樣式

<partnerLinks>

    <!– 注意:至少要指定一個角色. -->

    <partnerLink name="ncname"

                         partnerLinkType="qname"

                         myRole="ncname“

                         partnerRole="ncname">

    </partnerLink>

 </partnerLinks>

<variables>樣式

<variables>

    <variable name="ncname"  

                    messageType="qname/>

 </variables>

<faultHandlers>樣式

<faultHandlers>

 <catch faultName="qname“

             faultVariable="ncname">

      activity

    </catch>

    <catchAll>

      activity

    </catchAll>

 </faultHandlers>

Activities包含具體如下

            <receive>

            <reply>

            <invoke>

            <assign>

            <throw>

            <terminate>

            <wait>

            <empty>

            <sequence>

            <switch>

            <while>

            <pick>

            <flow>

            <scope>

            <compensate>

基本活動一

            <invoke>

– 調用某個 Web 服務上的操作

            <receive>

– 等待一條消息來回應由某人從外部進行調用的服務介面的操作

            <reply>

– 生成輸入/輸出操作的回應

            <wait>

– 等待一段時間

基本活動二

            <assign>

– 把資料從一個地方複製到另一個地方

            <throw>

– 指明某個地方出錯了

            <terminate>

– 終止整個服務實例

            <empty>

– 什麽也不做

結構化活動

            <sequence>

– 定義一組步驟的有序序列

            <switch>

– 使用現在常見的“case-statement”辦法來産生分支

            <while>

– 定義一個迴圈

            <pick>

– 執行幾條可選路徑中的一條

            <flow>

– 以及指明一組步驟應該並行地執行

一個完整的簡單示例

<process name="test" targetNamespace="http://acm.org/samples"

               suppressJoinFailure="yes"

               xmlns:tns="http://acm.org/samples"

               xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"

               xmlns:bpelx="http://schemas.oracle.com/bpel/extension"

               xmlns:ora="http://schemas.oracle.com/xpath/extension"

               xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

   <partnerLinks>

   <!-- The 'client' role represents the requester of this service. -->

      <partnerLink name="client" partnerLinkType="tns:test" myRole="testProvider"/>

   </partnerLinks>

   <variables>

      <variable name="input" messageType="tns:testRequestMessage"/>

      <variable name="output" messageType="tns:testResponseMessage"/>

   </variables>

   <sequence name="main">

      <receive name="receiveInput" partnerLink="client" portType="tns:test" operation="process" variable="input" createInstance="yes"/>

      <assign name="creatReturnStr">

         <copy>

            <from expression="concat(&quot;Hello&quot;, bpws:getVariableData('input','payload','/tns:testRequest/tns:input'))"></from>

            <to variable="output" part="payload" query="/tns:testResponse/tns:result"/>

         </copy>

      </assign>

      <reply name="replyOutput" partnerLink="client" portType="tns:test" operation="process" variable="output"/>

   </sequence>

</process>

posted on 2007-09-14 08:51 jinmy liao 阅读(477) 评论(0)  编辑  收藏 所属分类: SOA

只有注册用户登录后才能发表评论。


网站导航: