文章僅供大家參考,所有評論
,
錯誤報告
,
其他信息以及批評
,
請郵寄到
Jeffery.Lee AT gmail.com
或者訪問我的個人blog同我交流
(
http://ibuddie.spaces.live.com/
)
。本文遵從
GNU
的自由文檔許可證
(Free Document License)
的條款,歡迎轉載,如若修改、散布,請注明文章原始出處和來源。
業務流程執行語言入門簡介
Jeffery Lee @SEU
業務流程執行語言 ( Business Process Execution Language, BPEL, 發音為 'bipple' 或 'bee-pell' ),也叫業務過程執行語言,是一種基于 XML 的,用來描寫業務流程的編程語言,被描寫的業務流程的每個單一步驟則由 Web 服務來實現。 BPEL 的目標是要實現業務流程定義格式的標準化,使得公司之間可以通過 Web 服務無縫的進行交互。
BPEL 是基于 Web 服務的,并且依賴于 WSDL 。一個 BPEL 流程可以發布為一個 WSDL 定義的服務,并像其它 Web 服務一樣被調用。而且, BPEL 希望一個 Web 服務合成所包含的全部外部 Web 服務,都是用 WSDL 服務契約定義的,這令 BPEL 流程可以調用其它 BPEL 流程,甚至可以遞歸的調用自己。值得注意的是 BPEL 不直接支持人機對話, BPEL 所描寫的過程僅與 Web 服務通信,而這些 Web 服務卻可以提供與用戶的信息交換,但它們不是用戶本身。用 BPEL 編寫的流程可以在任何支持 BEPL 規范的平臺或產品上運行。
BPEL 支持兩類不同類型的業務流程
-
<!--[if !supportLists]-->
可執行流程
:定義了要執行的各項具體任務,以及完成業務流程所需要調用的各個服務,它們遵循編排規范,可以被一個編排引擎所執行。(
orchestration
)
-
<!--[if !supportLists]-->
抽象流程
:詳細說明了雙方或多方的公共消息交換,但沒有定義流程流的內部行為細節,不可執行。(
choreography
)
BPEL
的歷史
BPEL 全稱為 WS-BPEL , WS-BPEL 原名 BPEL4WS ,最初是在 2002 年 7 月隨同 BPEL4WS1.0 規范的發布而出現的,它是 IBM 、 Microsoft 和 BEA 合作的成果。業務處理執行語言結合并且替換了 IBM 的 WebServices Flow Language (WSFL) 和微軟公司的 XLANG 規范。
隨著 SAP 和 Siebel Systems 等其它貢獻者的加入, BPEL4WS 規范的 1.1 版于 2003 年 5 月發布。該版本獲得了較多的關注與廠商的支持,這導致產生大量的商業上遵循 BPEL4WS 的可用編排引擎。 OASIS 隨后宣布將語言本身重新命名為 Web 服務業務流程執行語言( WS-BPEL ),并于 2007 年 4 月 12 日正式發布 WS-BPEL2.0 規范,將其作為一個官方的、開放的標準。
BPEL 現已成為被業界廣泛認可和接受的進行 Web 服務編排的事實標準。
BPEL
與其它
Web
服務技術的關系
BPEL 是建立在 Web services 技術之上的,因此與 WSDL 、 XML 、 SOAP 和 UDDI 等標準密切相關。下圖展示了 Web services 技術中眾多標準之間的關系。
<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:228.75pt; height:159.75pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image001.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
BPEL 流程模型是在 WSDL 定義的服務模型之上的一層。一個業務流程定義了一個流程實例和它的伙伴之間的交互。
為了定義一個業務流程, BPEL 引入了一些新的 XML 元素,例如
-
Partners:
業務事務中的參與者(
actors
)
-
Containers:
組成業務流程中的某一狀態的一組消息
-
Operations:
所需
Web
服務的類型
-
Port types:
operations
所要求的相關
Web
服務的關系
下圖展示了 BPEL 流程定義和 WSDL 文件之間的映射關系。
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:336pt;height:252pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image003.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
更多映射細節還需要查看 BPEL 規范。
BPEL
包含的范圍
-
處理活動的順序,特別是網絡服務互操作?!?
-
消息和處理實例之間的關系。
-
在發生錯誤和例外情況下的恢復行為。
-
處理角色之間的基于網絡服務關系的雙面性。
BPEL
語言支持的兩類任務
BPEL 支持兩類任務或者說是行為: 基本任務( basic tasks ) 和 結構化任務 ( structured tasks ) 。
基本任務是指由業務流程的一個基本的步驟,任務內不會嵌套其它任務;而結構化任務從外部看是一個步驟而從內部看卻有若干個步驟。
基本任務包括:
-
Invoke
任務——允許業務流程在某一個
Web
服務提供的
portType
上調用單向的(
one-way
)或請求
/
響應(
request/respose
)操作。
-
Receive
任務——允許業務流程停下來等待消息到來。
-
Reply
任務——允許業務流程對收到的消息發送一個回復消息。
-
Wait
任務——通知流程等待一段時間。
-
Assign
任務——把數據從一處復制到另一處。
-
Throw
任務——表明發生了某個錯誤。
-
Terminate
任務——終止整個編排實例。
結構化任務包括:
-
Sequence
任務——定義一個有序的任務序列
-
Switch
任務——根據條件選擇某一分支
-
Pick
任務——停下并等待某一適當消息的到來,或者等到超時繼續前進。只要多個觸發器中的一個發生,就執行相應的活動,任務便結束了。
-
While
任務——定義循環執行,直至滿足某一個條件的一組任務。
- Flow 任務——表明一組應并行執行的步驟(可以通過建立連接來定義一個特定流程的執行序列)
以上是是 BPEL4WS1.1 中常見的任務,在最新發布的 WS-BPEL2.0 有較大的改變。支持更多新的任務或行為 ( if-then-else, repeatUntil, validate, forEach, extensionActivity )
關于WS-BPEL2.0,OASIS提供了webinars(web based seminar )推薦大家載下來看看
http://www.oasis-open.org/events/webinars/
BPEL
中表達式
BPEL 支持四種表達式
-
布爾表達式。
-
持續時間表達式。
-
截止時間表達式。
-
普通表達式,可以歸結為
XML Schema
中所定義的
string, number
和
boolean
格式。
BPEL 同時支持一些操作符,如簡單的算術運算 ( 加、減、乘 ) 、簡單的比較運算 ( 等于、不等于、小于、大于、小于等于、大于等于 ) 、布爾運算 (and 和 or 運算 ) 以及對 xml 格式的操作符?,F有的 BPEL 可以通過外部的表達式語言來描述、計算表達式,這通過 process 的 expressionLanguage 屬性進行表達式語言指定,現在只能指定為 XPath1.0
BPEL
中的變量
WS-BPEL 變量標識流程中交換的特定數據。BPEL流程在收到一個消息后,會為相應的變量賦值,以便后續請求能夠訪問。 BPEL 支持的變量類型包括三種 :
1. 由 WSDL 文件所定義的消息類型 (message type);
2. 由 XML Schema 所定義的簡單類型 (simple type);
3. 由 XML Schema 所定義的元素 (element).
每一個變量都從屬于所在的作用域 (scope) 之內。
BPEL 中的作用域
作用域 (scope) 是用來表示流程中的一個區域。如前所述,某個作用域內的變量只在該作用域內有效,但 BPEL 還擴展了作用域的功能,具體體現在如下幾個方面 :
錯誤處理( Fault Handler )
當一個行為出錯的時候,會拋出一個錯誤消息。該消息首先會被自身的錯誤處理器 ( 如果有的話 ) 所處理。錯誤處理器會嘗試三種解決方案 :
-
<!--[if !supportLists]-->
<!--[endif]-->
分析該錯誤信息,并根據指定規則找到對應的合適的行為進行處理;
-
<!--[if !supportLists]-->
使用一個
rethrow
行為,向外再次拋出一個錯誤;
-
<!--[if !supportLists]-->
強制終止該流程的執行。
事件處理( Event Handler )
BPEL 中定義了兩類事件:一類是“消息事件”,即從外部傳來的消息;另一類是由于達到了用戶定義的時間點而發出的警告。事件處理機制從作用域的一開始就激活,一直等待事件的到來而執行內部行為,也會隨著作用域的結束而結束。
補償服務( Compensation Handler )
補償處理是為了將流程的狀態回滾,回到跟進入作用域前一樣。所需要做的就是將該作用域內已執行部分采用其它行為進行撤銷,通常是調用一個效果相反的服務。
錯誤及補償處理程序與 OOP 語言(如 Java )中的 catch 子句類似。如果執行了某個拋出任務,就會觸發錯誤及補償處理程序。
BPEL 組件架構
BPEL 核心組件有三部分組成
-
<!--[if !supportLists]-->
BPEL
設計工具(
BPEL Designer
)
-
<!--[if !supportLists]-->
業務流模板(
Process flow template
)
-
<!--[if !supportLists]-->
BPEL
引擎(
BPEL Engine
)
BPEL 設計工具
大多基于 Eclipse 實現。
業務流模板
業務流模板遵守 BPEL 規范。它在設計階段有 BPEL 設計工具生成,運行階段由 BPEL 引擎執行。
BPEL 引擎
執行任何與 BPEL 標準相符的業務流模板,主要功能包括調用 Web 服務,數據內容映射,錯誤處理,事務支持,安全等等。通常 BPEL 引擎與應用服務器集成在一起。
在一個典型的 BPEL 應用場景中,一家公司的業務分析將使用 BPEL 設計工具( GUI )來定義一個業務流程。一旦流程定義完畢,設計工具將在后臺生成包含業務流程邏輯的業務邏輯模板。運行時,該流程模板將被 BPEL 引擎所執行。
<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:416.25pt; height:263.25pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image005.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
常見的
BPEL
引擎和設計工具
Active BPEL Designer, Active BPEL Engine http://www.active-endpoints.com/products/index.html
BPWS4J, WBI Server Foundation
http://www.alphaworks.ibm.com/tech/bpws4j http://www-306.ibm.com/software/integration/wbisf/
Oracle BPEL Process Manager
http://www.oracle.com/technology/products/ias/bpel/index.html
Bexee
Cape Clear Orchestrator
http://www.capeclear.com/technology/bpel/index.shtml
Parasoft BPEL Maestro
http://www.parasoft.com/jsp/products/home.jsp?product=BPEL
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
