Java 人生

java (Java EE)&Linux

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

2007年9月14日 #

 

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 @ 2007-09-14 08:51 jinmy liao 阅读(596) | 评论 (0) | 编辑 收藏