- BPEL 教程
- BPEL - 首頁
- BPEL - 簡介
- BPEL - 活動
- BPEL 流程中的合作伙伴連結
- 建立合作伙伴連結
- BPEL - 介面卡
- 流程監控器
- 單向訊息
- 同步互動
- 非同步互動
- 帶有超時的非同步互動
- 帶有通知定時器的非同步互動
- 一個請求,多個響應
- 一個請求,兩個可能的響應之一
- 一個請求,一個強制響應和一個可選響應
- 部分處理
- 多個應用程式互動
- 呼叫同步 Web 服務
- 呼叫非同步 Web 服務
- 使用並行流程
- 使用條件分支
- 使用故障處理
- 重新提交故障流程
- 整合 Java 和 Java EE 程式碼
- 操作 XML 資料
- 使用關聯集和訊息聚合
- 在 BPEL 流程中使用事件和超時
- 使用通知服務
- 使用 Oracle BPEL 流程管理器感測器
- BPEL 1.1 和 BPEL 2.0 的區別
- BPEL 有用資源
- BPEL 快速指南
- BPEL - 有用資源
- BPEL - 討論
BPEL 快速指南
BPEL - 簡介
SOA 或面向服務的架構是一種架構方法,它利用技術將業務流程呈現為可重用的服務。
它專注於業務,並使流程轉型達到新的整合、視覺化、監控和最佳化水平。
它不是一種技術,而是一個概念和一種使用技術構建業務自動化解決方案的策略。
我們現在將瞭解什麼是 BPEL 以及它如何在 SOA 中提供幫助。
什麼是 BPEL?
業務流程執行語言 (Business Process Execution Language) 是一種用於在 SOA 架構中構建程式的技術。
新增 BPEL 流程服務元件
請按照以下步驟新增 BPEL 流程服務元件:
在應用程式導航器中,選擇檔案 > 新建 > 應用程式 > SOA 應用程式。
這將啟動建立 SOA 應用程式嚮導。
在“應用程式名稱”對話方塊中,在“應用程式名稱”欄位中輸入應用程式名稱。
在“目錄”欄位中,輸入建立 SOA 組合應用程式和專案的目錄路徑。
單擊“下一步”。
在“專案名稱”對話方塊中,在“專案名稱”欄位中輸入名稱。
單擊“下一步”。
在“專案 SOA 設定”對話方塊中,選擇包含 BPEL 流程的組合。
單擊“完成”。
BPEL 組合中的檔案
BPEL 組合包含以下檔案:
composite.xml - 此檔案描述了服務的完整組合程式集、服務元件、引用和連線。
.bpel - 此檔案包含新增到流程的一組活動。
.componentType - 此檔案描述了 BPEL 流程服務元件的服務和引用。
.wsdl - 此檔案定義了此 BPEL 流程流的輸入和輸出訊息、支援的客戶端介面和操作以及其他功能。
BPL 流程中使用的概念
在本節中,我們將學習 BPL 流程中涉及的不同概念。
編排
- 通常用於私有業務流程。
一箇中央流程(可以是另一個 Web 服務)控制所涉及的 Web 服務。
協調對操作中涉及的 Web 服務執行的不同操作。
- 所涉及的 Web 服務不知道(也不需要知道)它們參與了組合流程,以及它們參與了更高級別的業務流程。
只有編排的中央協調器知道此目標,因此編排是集中的,並具有操作的明確定義以及 Web 服務呼叫順序的定義。
編排
不依賴於中央協調器。
參與編排的每個 Web 服務都確切地知道何時執行其操作以及與誰互動。
參與編排的每個 Web 服務都確切地知道何時執行其操作以及與誰互動。
編排中的所有參與者都需要了解業務流程、要執行的操作、要交換的訊息以及訊息交換的時機。
BPEL - 活動
在本章中,我們將學習構成構建塊的不同活動,BPEL 流程服務元件的構建塊。
Oracle BPEL 設計器包含一組活動,您可以將這些活動拖放到 BPEL 流程服務元件中,並雙擊某個活動以定義其屬性和屬性值。
分配活動
分配活動使您可以操作資料,例如將一個變數的內容複製到另一個變數。
呼叫活動
呼叫活動使您可以呼叫服務(由其合作伙伴連結標識)並指定此服務要執行的操作。
接收活動
接收活動等待來自服務的非同步回撥響應訊息。
讓我們在後續部分中進一步瞭解呼叫活動。
呼叫活動
呼叫活動允許指定要為服務(由其合作伙伴連結標識)呼叫的操作。操作可以在服務提供的埠上是單向的或請求-響應的。可以在呼叫活動中自動建立變數。呼叫活動呼叫同步服務或啟動非同步 Web 服務。
呼叫活動在流程中開啟一個埠以傳送和接收資料。此埠可進一步用於提交所需資料並接收響應。對於同步回撥,只需要一個埠即可完成傳送和接收功能。
BPEL - BPEL 流程中的合作伙伴連結
合作伙伴連結定義為 BPEL 流程與之互動的所有各方之間的通訊交換。
它們是對實際實現的引用,透過這些引用,BPEL 流程與外部世界進行互動。
被呼叫合作伙伴連結
這些是 BPEL 流程呼叫的服務的連結。
客戶端合作伙伴連結
這些是可呼叫 BPEL 流程的服務的連結。
合作伙伴連結屬性
合作伙伴連結屬性編輯器允許您為 BPEL 流程建立合作伙伴連結。使用合作伙伴連結屬性編輯器,您可以指定以下內容:
名稱 - 指定呼叫元素的名稱。
WSDL 檔案 - 指示與合作伙伴連結關聯的 WSDL 檔案。
合作伙伴連結型別 - 指示在 WSDL 中定義的合作伙伴連結型別。
我的角色 - 指示業務流程本身的角色。
合作伙伴端點 - 指示合作伙伴的角色。
文件 - 在“屬性”視窗中訪問。
合作伙伴連結在 .bpel 檔案中定義。
BPEL 可以透過以下三種方式與服務互動:
- 呼叫 BPEL 流程的服務
- 被 BPEL 流程呼叫的服務
- 既可以呼叫也可以被呼叫的服務
BPEL - 建立合作伙伴連結
在本章中,我們將學習如何建立合作伙伴連結。
請按照以下步驟建立合作伙伴連結:
在 SOA 組合編輯器中,雙擊 BPEL 流程服務元件。
單擊服務元件後,將顯示 Oracle BPEL 設計器。
在元件選項板中,展開 BPEL 服務。
將合作伙伴連結拖到相應的合作伙伴連結泳道中。
如上所述在合作伙伴連結屬性中完成此對話方塊的欄位。
BPEL - 介面卡
介面卡使您可以將 BPEL 流程服務元件與對檔案系統、FTP 伺服器、資料庫表、資料庫佇列、套接字、Java 訊息服務 (JMS)、MQ 和 Oracle E-Business Suite 的訪問整合。此嚮導使您可以配置下圖中顯示的介面卡型別以用於 BPEL 流程服務元件:
介面卡型別
下圖顯示了不同的介面卡型別:
高階排隊 (AQ)
用於與佇列互動。AQ 為參與應用程式之間的雙向非同步通訊提供了一種靈活的機制。
Oracle 業務活動監控 (BAM)
用於將資料釋出到 Oracle BAM 伺服器中的資料物件。
資料庫
用於透過 JDBC 和 Oracle Business Intelligence(這是一種特殊的資料來源型別)與 Oracle 和非 Oracle 資料庫互動。
FTP 和檔案
用於在本地檔案系統和遠端檔案系統(透過使用檔案傳輸協議 (FTP))上進行檔案交換(讀取和寫入)。
Java 訊息服務 (JMS)
用於與 JMS 互動。JMS 架構使用一個客戶端介面到多個訊息伺服器的架構。
訊息佇列 (MQ)
用於與 WebSphere MQ 排隊系統交換訊息。
Oracle 應用程式
用於與 Oracle 應用程式的一套整合業務應用程式互動。
Oracle B2B
用於在元資料服務 (MDS) 儲存庫中瀏覽 B2B 元資料並選擇文件定義。
套接字
用於對透過 TCP/IP 套接字進行通訊的標準或非標準協議進行建模。
介面卡服務名稱
從選項板中選擇介面卡型別後,“服務名稱”視窗將提示您輸入名稱。對於此示例,選擇了檔案介面卡。嚮導完成後,應用程式導航器中將出現一個以該服務名稱命名的 WSDL 檔案,用於 BPEL 流程服務元件(對於此示例,名為ReadFile.wsdl)。服務名稱在專案中必須唯一。此配置檔案包含使用此嚮導指定的介面卡配置設定。還將建立其他配置檔案(例如標頭檔案和特定於介面卡的檔案)。這些檔案顯示在應用程式導航器中。
BPEL - 流程監控器
可以透過選擇 Oracle BPEL 設計器頂部的“監控”來配置 Oracle BPEL 設計器中的 BPEL 流程監控器。
在此階段,需要配置 Oracle BAM 介面卡。
BPEL - 單向訊息
客戶端 BPEL 流程向服務 BPEL 流程傳送訊息,並且服務 BPEL 流程不需要回復,如下所示:
客戶端 BPEL 流程需要一個有效的合作伙伴連結和一個呼叫活動。
服務 BPEL 流程需要一個接收活動。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。WSDL 檔案如下所示。
<wsdl:portType name = "BPELProcess">
<wsdl:operation name = "process">
<wsdl:input message = "client:BPELProcessRequestMessage" />
<wsdl:output message = "client:BPELProcessResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
BPEL - 同步互動
客戶端 BPEL 流程向服務 BPEL 流程傳送請求(下圖中的 d1),並立即接收回復(下圖中的 d2)。例如,使用者請求訂閱用於大學入學的線上申請表,並立即收到電子郵件確認其請求已被接受。
客戶端 BPEL 流程需要一個呼叫活動。客戶端上的埠傳送請求並接收回復。
服務 BPEL 流程需要一個接收活動來接受傳入的請求,以及一個回覆活動來返回請求的資訊或錯誤訊息(WSDL 中定義的故障;下圖中的 f1)。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。WSDL 檔案如下所示。
WSDL 檔案
<wsdl:portType name = "BPELProcess">
<wsdl:operation name = "process">
<wsdl:input message = "client:BPELProcessRequestMessage" />
<wsdl:output message = "client:BPELProcessResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
BPEL - 非同步互動
客戶端 BPEL 流程向服務 BPEL 流程傳送請求(下圖中的 d1),並等待服務回覆(下圖中的 d2)。
例如,使用者請求訂閱用於大學入學的線上申請表,除非在招生辦公室接受,否則無法確認該請求。
客戶端 BPEL 流程需要一個呼叫活動來發送請求和一個接收活動來接收回復。
服務 BPEL 流程需要一個接收活動來接受傳入的請求和一個呼叫活動來返回請求的資訊或故障。
注意 - 同步和非同步 BPEL 流程響應之間的區別在於,同步服務使用回覆活動來響應客戶端,而非同步服務使用呼叫活動。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。WSDL 檔案如下所示。
WSDL 檔案
<wsdl:portType name = "BPELProcess">
<wsdl:operation name = "process">
<wsdl:input message = "client:BPELProcessRequestMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name = "BPELProcessCallback">
<wsdl:operation name = "processResponse">
<wsdl:input message = "client:BPELProcessResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
帶有超時的非同步互動
客戶端 BPEL 流程向服務 BPEL 流程傳送請求(下圖中的 d1),並等待服務回覆或達到某個時間限制,以先發生者為準。(下圖中的 d2)。
例如,使用者請求訂閱用於大學入學的線上申請表,如果使用者在指定時間內未收到確認回覆,則該請求將被取消。
客戶端 BPEL 流程需要一個呼叫活動來發送請求和一個具有兩個分支的 pick 活動 - 一個onMessage 分支和一個onAlarm 分支。如果回覆在時間限制過期後到達,則訊息將傳送到死信佇列。
服務 BPEL 流程需要一個接收活動來接受傳入的請求和一個呼叫活動來返回請求的資訊或故障。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
帶有通知定時器的非同步互動
在本章中,我們將學習有關使用通知計時器的非同步互動。請考慮以下與非同步互動相關的要點:
客戶端 BPEL 流程向服務 BPEL 流程傳送請求並等待回覆,儘管在計時器過期後會傳送通知。
即使計時器已過期,客戶端 BPEL 流程仍將繼續等待服務 BPEL 流程的回覆。
客戶端 BPEL 流程需要一個包含呼叫活動(用於傳送請求)和接收活動(用於接受回覆)的範圍活動。範圍活動的onAlarm 處理程式具有時間限制以及計時器過期時要執行的操作說明。
例如,等待 60 秒,然後傳送警告,指示流程花費的時間超過預期。
服務 BPEL 流程需要一個接收活動來接受傳入的請求和一個呼叫活動來返回請求的資訊或故障。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
BPEL - 一次請求多次響應
在本章中,我們將學習“一次請求,多次響應”的概念。
客戶端 BPEL 流程向服務 BPEL 流程傳送單個請求,並作為回報接收多個響應。
例如,請求可以是線上訂購產品,第一個響應可以是預計送達時間,第二個響應是付款確認,第三個響應是產品已發貨的通知。在此示例中,響應的數量和型別是預期的。
客戶端 BPEL 流程需要一個呼叫活動來發送請求,以及一個包含三個接收活動的序列活動。
服務 BPEL 流程需要一個接收活動來接受來自客戶端的訊息,以及一個包含三個呼叫活動的序列屬性,每個回覆一個。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
一個請求,兩個可能的響應之一
在本章中,我們將學習“一次請求,兩種可能的響應之一”的概念。
客戶端 BPEL 流程向服務 BPEL 流程傳送單個請求,並接收兩種可能的響應之一。
例如,請求可以是線上訂購產品,第一個響應可以是庫存訊息或缺貨訊息。
客戶端 BPEL 流程需要以下內容:
一個呼叫活動來發送請求。
一個具有兩個分支的 pick 活動:一個用於庫存響應的 onMessage,以及收到庫存訊息時要執行的操作說明。
第二個用於缺貨響應的 onMessage,以及收到缺貨訊息時要執行的操作說明。
服務 BPEL 流程需要一個接收活動來接受來自客戶端的訊息,以及一個具有兩個分支的 switch 活動,一個分支包含一個呼叫活動,如果商品可用則傳送庫存訊息,另一個分支包含一個呼叫活動,如果商品不可用則傳送缺貨訊息。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
一個請求,一個強制響應和一個可選響應
在本章中,我們將瞭解“一次請求,一個必填響應和一個可選響應”的概念。
客戶端 BPEL 服務向服務 BPEL 流程傳送單個請求,並接收一個或兩個響應。
這裡,請求是線上訂購產品。如果產品延遲,服務會發送訊息通知客戶。無論如何,服務都會在商品發貨時始終傳送通知。
客戶端 BPEL 服務需要一個包含呼叫活動(用於傳送請求)和接收活動(用於接受必填回覆)的範圍活動。對於可選訊息,範圍活動的onMessage 處理程式將被設定,並附帶收到可選訊息時要執行的操作說明(例如,通知您產品已延遲)。客戶端 BPEL 流程將等待接收必填回覆。如果首先收到必填回覆,則 BPEL 流程將繼續執行,而無需等待可選回覆。
服務 BPEL 流程需要一個包含接收活動和呼叫活動(用於傳送必填發貨訊息)的範圍活動,以及範圍的onAlarm 處理程式(如果計時器過期則傳送可選延遲訊息;例如,如果商品在 24 小時內未發貨,則傳送延遲訊息)。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
BPEL - 部分處理
現在,我們將學習 BPEL 中的部分處理概念。
客戶端 BPEL 流程向服務 BPEL 流程傳送請求並接收即時響應,但服務端會繼續處理。
此模式還可以包括多個快照回撥,然後是長期處理。
例如,客戶端傳送請求購買度假套餐,服務會發送即時回覆確認購買,然後繼續預訂酒店、航班、租車等。
客戶端 BPEL 流程需要每個請求一個呼叫活動和每個回覆一個接收活動(用於非同步事務),或者每個同步事務只需要一個呼叫活動。
服務 BPEL 流程需要每個來自客戶端的請求一個接收活動,以及每個響應一個呼叫活動。一旦響應完成,服務 BPEL 流程作為服務就可以繼續其處理,使用在事務中收集的資訊執行必要的任務,而無需客戶端的任何進一步輸入。
與所有合作伙伴活動一樣,Web 服務描述語言 (WSDL) 檔案定義了互動。
BPEL - 多個應用程式互動
我們將在本章中學習 BPEL 與多個應用程式互動。
當有多個應用程式參與事務時。
此 A 到 B 到 C 到 A 事務模式可以同時處理許多事務。因此,需要一種機制來跟蹤哪條訊息傳送到哪裡。
這可以使用 WS-Addressing 或相關集來處理。
BPEL - 呼叫同步 Web 服務
我們在前面的章節中討論過,同步 Web 服務是一種對呼叫提供即時響應的服務。
在下圖所示的螢幕截圖中,我們建立了一個同步 BPEL 流程,該流程具有一個接收活動來接受來自使用者的請求。回覆活動同時傳送迴響應。
呼叫非同步 Web 服務
如前所述,非同步 Web 服務是一種向其他 Web 服務傳送請求並等待響應的服務。
在下圖所示的螢幕截圖中,我們建立了非同步 BPEL 流程,該流程具有一個接收活動來接受來自使用者的請求。分配活動進一步將值分配給請求中的不同元素。
接下來,呼叫活動呼叫 HelloWorld 應用程式,該應用程式同時傳送響應,並在接收活動中捕獲該響應。
此外,我們還有回撥活動,該活動最終生成輸出並非同步傳送響應。
如果雙擊receiveInput 或callbackClient,您會看到它們每個都只有一個變數。
receiveInput → inputVariable callbackClient → outputVariable
BPEL - 使用並行流程
在本章中,我們將瞭解 BPEL 中並行流程的工作原理。
什麼是流程活動?
流程活動通常包含許多序列活動,並且每個序列都是並行執行的。流程活動還可以包含其他活動。
例如,兩個非同步回撥並行執行,因此一個回撥不必等待另一個回撥先完成。每個響應都儲存在不同的全域性變數中。
在流程活動中,BPEL 程式碼確定並行分支的數量。但是,通常根據可用資訊,所需的分支數量會有所不同。
什麼是 FlowN 活動?
FlowN 活動建立多個等於 N 值的流程,該值根據可用資料和流程內的邏輯在執行時定義。每次建立新分支時,都會有一個索引變數遞增,直到索引變數達到 N 的值。
FlowN 活動對任意數量的資料元素執行活動。隨著元素數量的變化,BPEL 流程也會相應調整。
FlowN 建立的分支執行相同的活動,但使用不同的資料。每個分支都使用索引變數查詢輸入變數。索引變數可以在 XPath 表示式中使用,以獲取特定於該分支的資料。
BPEL - 使用條件分支
BPEL 應用邏輯透過條件分支進行選擇。基於條件分支的兩種不同操作如下所示:
Switch 活動
在此方法中,您設定兩個或多個分支,每個分支都採用 XPath 表示式的形式。如果表示式為真,則執行該分支。如果表示式為假,則 BPEL 流程移動到下一個分支條件,直到它找到有效的分支條件、遇到 otherwise 分支或用完分支為止。如果多個分支條件為真,則 BPEL 執行第一個為真的分支。
While 活動
您可以使用 while 活動建立 while 迴圈以在兩個操作之間進行選擇。
BPEL - 使用故障處理
要了解如何使用故障處理,我們需要學習 Oracle SOA Suite 中服務組合的基本架構。
服務元件 - BPEL 流程、業務規則、人工任務、中介。這些用於構建 SOA 複合應用程式。
繫結元件 - 建立 SOA 複合應用程式與外部世界之間的連線。
服務 - 為 SOA 複合應用程式提供入口點。
繫結 - 定義與服務通訊的協議,如 SOAP/HTTP、JCA 介面卡等。
WSDL - 定義 Web 服務的服務定義。
引用 - 使 SOA 複合應用程式能夠向外部服務傳送訊息
線 - 使服務元件之間能夠連線。
故障型別
現在讓我們看看不同型別的故障。
業務故障
當應用程式執行THROW活動或INVOKE接收故障作為響應時發生。故障名稱由BPEL流程服務元件指定。使用故障名稱和故障變數的故障處理程式捕獲此故障。
執行時故障
這是由系統丟擲的。這些故障與RunTimeFaultMessage相關聯,幷包含在
http://schemas.oracle.com/bpel/extensionnamespace.
故障處理方法
在本節中,我們將學習故障處理的不同方法。
丟擲活動
丟擲活動顯式丟擲故障。catch塊捕獲此故障,並相應地執行相應的操作。
使用丟擲活動,您可以丟擲業務故障,並且在建立的作用域內,您可以捕獲此故障並重定向給呼叫方(使用者)以採取措施。
除了上述方法之外,您還可以丟擲在建立的作用域的catch活動中捕獲的相同故障。在主作用域中,您可以使用catchall活動捕獲此故障。
錯誤處理框架(EHF)
EHF中使用的兩個主要檔案是:
- Fault-Policy.xml
- Fault-Bindings.xml
每當BPEL流程丟擲錯誤時,EHF都會檢查Fault-Bindings.xml檔案中是否存在該錯誤。如果存在,則將執行Fault-Policy.xml檔案中的操作。如果找不到該操作,則會丟擲故障,並在catch塊中處理。
故障管理框架(Fault-Policy.xml和Fault-Bindings.xml)儲存在SOA複合應用中。
像catch和catchall這樣的故障處理程式位於BPEL內部以捕獲所有故障,但故障策略僅在invoke活動失敗時才會執行。
BPEL - 重新提交故障流程
在本章中,我們將看到與重新提交故障流程相關的不同場景。
場景A
BPEL程式碼使用故障策略,並使用“ora-human-intervention”活動處理故障。然後將故障標記為可恢復,並將例項狀態設定為“執行”。
場景B
BPEL程式碼使用故障策略,並捕獲故障並使用“ora-rethrow-fault”操作重新丟擲。然後將故障標記為可恢復,並將例項狀態設定為“故障”;前提是故障是可恢復的(例如URL不可用)。
BPEL - 整合Java和Java EE程式碼
在BPEL流程中整合Java和Java EE程式碼有幾種方法。以下是一些重要的方法:
包裝為簡單物件訪問協議(SOAP)服務
使用bpelx - exec標籤將Java程式碼片段嵌入到BPEL流程中
使用XML外觀簡化DOM操作
使用bpelx - exec內建方法
使用包裝在服務介面中的Java程式碼
Java嵌入活動允許我們在BPEL流程中新增活動。我們可以使用標準JDK庫、BPEL API、部署的SCA複合應用中JAR檔案(在SCA-INF/lib目錄中)中包含的自定義和第三方Java類以及SOA Suite執行時的類路徑中可用的Java類和庫來編寫Java程式碼片段。
Java嵌入意味著功能隱藏在內部,以一種不太解耦的方式。Java程式碼難以維護。透過將Java嵌入到BPEL(XML驅動)中,我們開始混合技術,這需要不同的技能以及昂貴的XML到Java物件編組和反編組。
Java嵌入的最佳用例似乎是用於高階日誌記錄/跟蹤或特殊驗證/轉換。但是,不要替換BPEL引擎以及SOA Suite 11g中的其他元件以及附帶的介面卡的內建功能。
BPEL - 操作XML資料
XPath主要用於在BPEL流程中操作XML。有一些有價值的Xpath函式可用於操作XML。讓我們看看下面的函式。
bpel:getVaribleData(varName, partName, xpathStr)
這可以用於使用XPath表示式從變數中提取一組元素。
<bpel:copy>
<bpel:from>
<![CDATA[count(bpel:getVariableData(‘$Variable','$partName')/ns:return)]]>
</bpel:from>
<bpel:to variable = "itemNumber">
</bpel:to>
</bpel:copy>
bpel:getLinkStatus()
這可以用於評估並返回一個布林值,指示特定連結是活動還是非活動。:getVariableProperty(string, string)
這有助於提取變數中的屬性。:doXSLTTransform()
這執行XSLT轉換。string ()
這可以用於從元素中提取文字內容,而不是使用/text ()。string-length()
此函式用於計算字串的長度。但是!=運算子似乎不適用於此函式的輸出。因此,您可以使用>或<而不是使用!=。布林值
您可以使用XPath布林函式分配布林值。
<assign>
<!-- copy from boolean expression function to the variable -->
<copy>
<from expression = "true()"/>
<to variable = "output" part = "payload" query="/result/approved"/>
</copy>
</assign>
分配日期或時間
您可以分別使用Oracle BPEL XPath函式getCurrentDate、getCurrentTime或getCurrentDateTime分配日期或時間欄位的當前值。
<!-- execute the XPath extension function getCurrentDate() -->
<assign>
<copy>
<from expression = "xpath20:getCurrentDate()"/>
<to variable = "output" part = "payload"
query = "/invoice/invoiceDate"/>
</copy>
</assign>
連線字串
您可以先執行字串操作(例如連線多個字串),而不是將一個字串變數(或變數部分或欄位)的值複製到另一個變數。
<assign>
<!-- copy from XPath expression to the variable -->
<copy>
<from expression = "concat('Hello ',
bpws:getVariableData('input', 'payload', '/p:name'))"/>
<to variable = "output" part = "payload" query = "/p:result/p:message"/>
</copy>
</assign>
分配字串文字
您可以在BPEL中將字串文字分配給變數。
<assign>
<!-- copy from string expression to the variable -->
<copy>
<from expression = "'GE'"/>
<to variable = "output" part = "payload" query = "/p:result/p:symbol"/>
</copy>
</assign>
分配數值
您可以在XPath表示式中分配數值。
<assign>
<!-- copy from integer expression to the variable -->
<copy>
<from expression = "100"/>
<to variable = "output" part = "payload" query = "/p:result/p:quantity"/>
</copy>
</assign>
注意 - 一些XSLT函式用於轉換XML文件。
使用關聯集和訊息聚合
BPEL相關性將入站訊息與特定流程例項匹配。當您需要將特定資料與業務流程的特定例項關聯時,可以使用相關性。
例如,在建立驗證帳號並檢查帳號信用額度的流程時。驗證後,流程會呼叫另一個系統以檢查庫存,如果專案有庫存,則生成採購訂單。採購訂單如何知道要借記哪個帳號?這個問題的答案是相關性。
相關集
相關集用於唯一標識流程例項。您可以為每個相關集提供一個唯一的名稱,然後透過一個或多個屬性定義它。每個屬性都有一個名稱和一個型別(例如,字串或整數)。
屬性別名
需要定義相關集中每個屬性的屬性別名。屬性別名是將屬性繫結到輸入或輸出值的對映。
要點
請考慮以下與相關集和訊息聚合相關的要點:
包含多個接收或選擇活動的流程必須具有相關集。
相關集使用流程入站或出站訊息中的值進行初始化。
如果您有一組與一個特定流程關聯的訊息,您可以設定一個或多個相關集來處理。
在 BPEL 流程中使用事件和超時
非同步Web服務通常需要很長時間才能返回響應,因此BPEL流程服務元件必須能夠超時或放棄等待,並在特定時間後繼續執行其餘流程。您可以使用選擇活動來配置BPEL流程,使其要麼等待指定的時間量,要麼繼續執行其職責。要為時間設定到期時間段,可以使用等待活動。為了管理訊息,可以使用事件,尤其是在業務流程等待合作伙伴Web服務的回撥時。
事件
BPEL支援兩種型別的事件:
訊息事件
這些事件由透過埠型別上的操作呼叫傳入的訊息觸發。
警報事件
這些事件與時間相關,並在特定持續時間後或特定時間觸發。
然而,通常更有用的是等待多個訊息,其中只有一個會發生。
當您希望流程在一段時間內(例如15分鐘)等待回撥時,警報事件很有用。
如果沒有收到回撥,則流程將按設計繼續。
在鬆散耦合的面向服務的體系結構中很有用,在這些體系結構中,您無法依賴Web服務始終可用。
選擇活動
選擇活動有兩個分支:
onMessage - 此分支上的程式碼等於在新增超時之前接收響應的程式碼。
onAlarm - 此條件包含一分鐘超時的程式碼。
等待活動
等待活動允許流程等待給定的時間段或直到達到時間限制。必須指定一個到期條件。
BPEL - 使用通知服務
BPEL流程可以用於通知服務。可以設計流程來發送以下內容:
- 電子郵件
- 語音訊息
- 即時訊息(IM)或
- 簡訊(SMS)通知
對於上述服務,您可以配置傳入和傳出訊息的通道。
使用 Oracle BPEL 流程管理器感測器
SOA應用程式中的複合感測器提供了在訊息上定義可跟蹤欄位的能力,並使您能夠透過搜尋訊息中的一個或多個欄位來查詢特定複合例項。例如,可以為訊息中的訂單號定義感測器,從而允許我們找到包含該訂單號的例項。
可以在SOA應用程式的多個元件中定義複合感測器:
服務元件(公開的服務)
引用元件(外部引用)
已訂閱業務事件的Mediator或BPEL元件(釋出事件不能有感測器)
定義複合感測器的不同方法
定義複合感測器有不同的方法:
- 透過將現有變數指定為感測器。
- 透過表示式構建器的幫助下的表示式。
- 透過使用屬性(例如訊息頭屬性)。
企業管理器中的感測器
定義感測器允許在EM控制檯中快速搜尋複合例項中的資料。
在EM控制檯儀表板中,使用者可以透過感測器名稱和值搜尋例項。
在“流程例項”選項卡中,您可以從下拉列表中選擇感測器,並可以使用萬用字元類值作為感測器值。
BPEL 1.1 和 BPEL 2.0 的區別
2.0中添加了新的活動,這些活動取代了1.1中的活動。
<forEach>
此活動有助於重複一組活動。此活動替換了BPEL 1.1版本中的FlowN活動。
<repeatUntil>
如果必須至少執行一次活動的正文,此活動將派上用場。repeatUntil活動中的XPath表示式條件在活動正文完成之後進行評估。
<if>-<elseif>-<else>
此活動替換了BPEL 2.0中的switch活動。此活動使您能夠為特定活動定義條件行為,以決定兩個或多個分支之間的選擇。從一組分支中僅選擇一個活動執行。
<compensateScope>
此活動有助於補償指定的子作用域。
<rethrow>
此活動已新增到故障處理程式中。它使您能夠重新丟擲最初由緊鄰的故障處理程式捕獲的故障。