在 WebSphere Process Server 中進行版本管理

CloudSpace發表於2009-04-01
IT 架構師和整合開發人員需要設計基於業務流程的應用程式,這樣的應用程式能夠適應不斷變化的環境和將來的業務需求。本文向您介紹如何構建基於 IBM® WebSphere® Integration Developer V6.1 和 WebSphere Process Server V6.1 最佳實踐的業務流程和人工任務版本。

為什麼需要版本管理?

業務流程隨時間的推移而發展。它們需要反映不斷更改的環境和業務需求。這些更改可能是業務驅動的更改,例如法律法規更改,或者業務流程的優化。此外,技術驅動的更改會影響基於業務流程的應用程式,例如,對流程非常重要的某個服務被替換為另一個服務。

基於業務流程的應用程式非常獨特,因為它們可以包括長時間執行的例項。這些業務流程和人工任務例項可以執行數週、數月甚至數年。這對引入已發展的業務流程或人工任務施加了特定的要求,因為它們的例項可能仍在執行。這些例項需要使用最初建立和啟動時的版本來執行完成。但是,業務可能要求基於新版本的業務流程定義建立新的例項。因此,新版本和舊版本需要共存。

版本管理示例

下面的示例演示了處理旅行審批和登記的業務流程。頂級流程 TravelApprovalAndBooking 控制總體處理,子流程 TravelAvailablitiyAndCosts 確定航班、酒店和計程車的成本及可用性,另一個子流程 TravelBooking 處理登記工作。


圖 1. 旅行審批和登記流程(第一版)
旅行審批

流程啟動 流程在員工輸入商務旅行資料時啟動

呼叫子流程 呼叫一個子流程來評估旅行請求的可用性和成本

經理需要審批請求 取決於成本,經理需要對旅行請求進行審批。這是使用一個內聯人工任務來實現的

呼叫另一個子流程 如果旅行請求獲得批准,則呼叫另一個子流程來登記旅行安排

返回旅行資訊 將旅行資訊(航班號、酒店名稱和計程車公司)返回給員工

由於旅行登記指導原則方面的更改,必須對旅行登記和審批流程進行更新。需要一個附加的審批步驟,以便能夠拒絕針對不安全國家/地區的旅行請求。


圖 2. 具有附加審批步驟的旅行審批和登記流程(第二版)
旅行審批和登記

該更新是通過引入新版本的旅行審批和登記流程來實現的。新版本包括一個用於額外審批步驟的附加人工任務活動。

下面幾個部分將介紹版本管理的概念,以及如何在 WebSphere Process Server 中開發新版本的業務流程和人工任務。這些部分還將描述在使用版本管理時應該考慮的最佳實踐。


 

版本管理概念

本部分介紹一些瞭解版本管理所需要知道的重要概念。

SCA 元件

服務元件體系結構(Service Component Architecture,SCA) 是面向服務的體系結構(service oriented architecture,SOA)的關鍵。此類體系結構的基本單元是 SCA 元件。SCA 元件是通過其連線到其他服務的介面和引用來進行描述的 SOA 服務。其實現隨元件型別而異。業務流程和人工任務就是其中兩種元件型別。業務流程 元件 是使用業務流程定義(BPEL 檔案)來實現的,人工任務元件 是使用人工任務定義(TEL 檔案)來實現的。

模板和例項

流程模板是在 WebSphere Integration Developer 中指定並部署到 WebSphere Process Server 的流程元件的執行時表示形式。類似地,任務模板是部署到執行時環境的人工任務元件的表示形式。當業務流程或人工任務啟動時,將基於特定的模板建立例項。此模板描述瞭如何執行該例項。

模板生命週期

流程模板或任務模板的生命週期如圖 3 所示。模板可以表現為啟動停止 這兩種狀態之一。

狀態轉換是使用 WebSphere 管理控制檯或 wsadmin 控制檯介面來觸發的。


模板生命週期
模板生命週期

啟動 在此狀態下,可以建立新的業務流程或人工任務例項。
下一個狀態:可以停止模板以防止在該模板基礎上建立新例項。停止模板將導致停止 狀態。 停止 在此狀態下,不能在該模板基礎上建立新例項。但是,現有的例項可以繼續執行,直到完成。 下一個狀態 在此狀態下,當模板啟動時,其狀態設定為啟動。如果某個模板不再存在任何例項,則可以通過解除安裝對應的企業應用程式來刪除該模板。

包含該模板的企業應用程式可以獨立於模板生命週期停止或啟動。如果企業應用程式停止,企業應用程式中的模板例項未進行處理,並且不能建立例項。

流程和人工任務的版本

業務流程或人工任務的版本是現有業務流程或人工任務經過發展以後的副本。當您希望相同業務流程或人工任務的替代例項在執行時環境中共存時,您將使用版本管理。

版本由以下屬性進行標識:

  • 相同的流程或任務元件名稱
  • 相同的目標名稱空間
  • 不同的起始有效日期

下圖顯示了這些屬性來自於業務流程中的何處。這同樣適用於人工任務。


圖 4. 用於標識版本的屬性
屬性標識版本

業務流程和人工任務版本的範圍是單個部署目標;在網路環境中,該範圍為某個叢集或應用程式伺服器。不同部署目標的模板單獨地操作,因此不能將其視為相同業務流程或人工任務的版本。

起始有效日期

WebSphere Process Server 允許安裝相同業務流程或人工任務的多個版本。這意味著某個流程或任務的多個版本可以在執行時環境中共存。流程或任務的版本在執行時環境中是通過對應的模板實現的。

如果某個任務或流程定義的起始有效日期 是過去的時間中最近的,則該任務或流程版本(即模板)當前有效。起始有效日期適合於後期繫結。

圖 5 顯示了一個版本管理示例。其中安裝了流程 A 的三個版本。伺服器的當前狀態將確定該流程的哪一個版本當前有效。在此例中,有效的是第 2 版的流程模板,因為其起始有效日期“2008 年 5 月 1 日”是過去的時間中最近的。下一個版本 (V3) 將在 2008 年 10 月 1 日變得有效。流程 B 僅安裝了一個版本。其起始有效日期是在將來。如果使用後期繫結呼叫流程 B,您將會看到錯誤。但是,如果使用早期繫結呼叫流程 B,則呼叫將會成功。


圖 5. 顯示哪一個版本當前有效
顯示有效版本

早期繫結和後期繫結

要呼叫特定版本的業務流程或人工任務,需要使用早期繫結 進行呼叫。例如,當 Web 服務客戶端呼叫某個流程的 SCA 匯出,或 SCA 元件使用 SCA 連線呼叫某個流程時,就會發生早期繫結。


圖 6. 早期繫結:SCA 元件之間的連線

SCA 連線是指定早期繫結呼叫的方法之一。一個 SCA 元件具有一個或多個對其他服務的引用。它將這些引用連線到相同模組中的另一個 SCA 元件,或者在目標超出 SCA 模組範圍的情況下,將其連線到某個 SCA 匯出。如果使用 SCA 連線來呼叫人工任務或業務流程,則不考慮任務或流程的起始有效日期。可以通過這種方式呼叫特定的版本。

如果使用後期繫結 呼叫業務流程或人工任務,則 Business Process Choreographer 將確定當前有效的版本,然後使用該版本進行呼叫。後期繫結可應用於業務流程和人工任務。

不同版本的例項

例項的執行基於用於建立它們的模板。在建立某個業務流程或人工任務例項時,將隨同流程或任務例項儲存一個對該模板的引用。對該例項的後續呼叫(例如通過業務流程的事件處理程式)將使用在例項建立過程中儲存的模板來處理。

多個版本的例項可以在執行時環境中共存,因為可以在以前版本的例項正在執行時引入新的版本。如果新版本的業務流程或人工任務變得有效,這不會影響現有的例項。但是,使用後期繫結的客戶端將在建立例項時自動選取新版本。

在下圖所示的示例中,存在三個表示相同業務流程的三個不同版本的模板,以及基於這些版本的例項。


圖 7. 例項按照用於建立它們的模板執行
按照模板執行 

指定新版本的注意事項

除了元件名稱和起始有效日期之外,您還需要考慮以下方面。

介面和業務物件

相同任務或流程的版本必須具有完全相同的介面規範。通過這些介面使用後期繫結與流程和任務互動的客戶端一定不能在安裝新版本之後受到影響。如果更改了新版本的介面,則流程或任務的行為將不可預測。

用作這些版本化流程或任務的介面的一部分的業務物件也必須完全相同,即它們的限定名稱 (qname) 和對應的型別規範必須完全相同。


圖 8. 流程中使用的介面和業務物件
介面和業務物件

您可以在新流程版本中更改僅在業務流程中用於內部處理的業務物件。

如果流程介面的引數可能會在將來更改,可以考慮對流程使用較弱型別的介面。有關詳細資訊,請參閱下面的弱型別介面和業務物件部分。

業務流程的相關集規範

當 Business Process Choreographer 接收到請求時,它需要確定該請求所針對的流程例項。例項是通過作為請求的一部分傳遞的相關集來確定的。相關集必須在流程的不同版本中保持有效。因此,用於確定流程例項的相關集規範必須在新流程版本中保持相同。

依賴某些流程或任務特徵的客戶端

客戶端可能依賴與之互動的流程或任務的某些特徵。在設計新版本的流程或任務時,您應該考慮這些特徵,以便在安裝新版本以後,現有的客戶端能夠繼續無縫地工作。

這些特徵包括:

業務流程的型別 長時間執行的業務流程和微流程具有不同的響應行為和事務行為。例如,呼叫某個微流程時,客戶端在同一個事務中接收結果;對於長時間執行的業務流程,結果僅在後續的事務中可用。此外,用於呼叫業務流程的 API 方法可能隨不同的流程型別而異。也就是說,在不同版本之間更改型別會影響流程的客戶端。 授權 客戶端可能需要特定的授權才能與業務流程或人工任務互動。如果修改了流程或任務的授權規範,請驗證該更改是否影響客戶端。 業務流程的查詢屬性 如果為流程指定了查詢屬性以使客戶端能夠查詢業務資料,應該對新版本保留相同的規範,以防止破壞依賴這些查詢屬性的現有客戶端。 介面限定符 SCA 介面限定符適用於流程和人工任務元件,例如,事務限定符或呼叫規範。如果需要更改這樣的規範,請驗證更改後的規範對現有的客戶端是否有效。

支援早期和後期繫結的場合

正如在早期繫結和後期繫結部分中所說明的那樣,在某些情況下,您可以選擇使用早期繫結或後期繫結來呼叫人工任務或業務流程,並且存在某些僅支援早期繫結或後期繫結的情況。

早期繫結和後期繫結支援

本部分描述您可以從早期繫結和後期繫結中做出選擇的場合。

Business Flow Manager 的 Web 服務介面和 EJB API

Business Flow Manager 的 Web 服務介面和 EJB API 提供了用於早期繫結和後期繫結的方法。一般來講,接受流程模板名稱作為引數的方法使用後期繫結。使用模板 ID(例如 PTID、ATID 和 VTID)進行操作的方法使用早期繫結。

例如,BusinessFlowManager EJB 介面提供了以下方法簽名:

  • sendMessage(String processTemplateName,
    String nameSpace, String portType, String operation, ClientObjectWrapper inputMessage)
  • sendMessage(VTID vtid,
    ATID atid, ClientObjectWrapper inputMessage)

第一個簽名 sendMessage 使用由 processTemplateName 表示的當前有效的流程,也就是使用後期繫結。第二個簽名使用模板 ID vtidatid 呼叫特定的流程模板,也就是繫結到該特定的版本。

流程到流程的呼叫

可以通過後期繫結或早期繫結的方式實現流程到流程的呼叫。如果呼叫流程使用 SCA 連線來連線到另一個流程,則呼叫是使用早期繫結實現的,即呼叫的是作為該連線的目標的流程。呼叫流程和被呼叫流程可以在同一個 SCA 模組中,或者可以在通過 SCA 匯入或 SCA 匯出連線的不同模組中。

在流程到流程的呼叫中,後期繫結不需要在流程之間進行連線,因為目標元件是在執行時動態地確定的。與使用靜態 SCA 連線不同,您將作為呼叫流程的一部分指定被呼叫流程的流程模板名稱。這是作為執行流程呼叫的呼叫活動的引用合作伙伴屬性的一部分,在 WebSphere Integration Developer 中的業務流程編輯器中指定的。請參見“參考資料”部分的“WebSphere Integration Developer V6.1.2 資訊中心,使用合作伙伴連結擴充套件的後期繫結”。

通常,被呼叫流程駐留在單獨的 SCA 模組中。如果是這樣,則需要使用帶 SCA 本機繫結的 SCA 匯出將其匯出。


圖 9. 用於後期繫結的組裝關係圖和業務流程編輯器規範
組裝關係圖

僅支援後期繫結

Human Task Manager 的 Web 服務介面和 EJB API

Human Task Manager 的 Web 服務介面和 EJB API 僅支援使用後期繫結的方法。

例如,HumanTaskManager EJB 介面提供了以下方法簽名:

  • createTask(String taskTemplateName,
    String taskNamespace)

此方法基於由 taskTemplateNametaskNamespace 表示的當前有效的任務建立任務。

按名稱的動態子流程呼叫

端點引用(endpoint reference,EPR)是動態選擇要呼叫的服務的常用方法。為了支援執行時的動態子流程選擇和呼叫,WebSphere Process Server 允許您確定子流程的 EPR。getServiceRefForTemplate 方法用於檢索給定其名稱 processTemplateName 的子流程的 EPR。您可以使用 EPR 呼叫通過其埠型別(portTypeNamespaceportTypeName)指定的子流程的服務。該方法返回流程的當前有效版本的 EPR,也就是使用後期繫結:

  • getServiceRefForTemplate(
    String processTemplateName, String portTypeNamespace, String portType)

該方法對分配活動(請參見 WebSphere Integration Developer 資訊中心,XPath 擴充套件函式)和 Java™ 程式碼片段活動可用。在分配活動中,您可以在 from 表示式中使用 XPath 擴充套件函式 getServiceRefForTemplate,以將返回的 EPR 分配給在分配活動的 to 規範所指定的合作伙伴連結。

在 Java 程式碼片段活動中,如果您呼叫方法 getServiceRefForTemplate,您將檢索到 com.ibm.websphere.sca.addressing.EndpointReference 的一個例項。可以通過方法 setServiceRefToPartnerLink( , ) 使用此 EPR 將該例項分配給某個合作伙伴連結。

Business Process Choreographer Explorer

Business Process Choreographer Explorer 提供了基於 Web 的通用介面,用於建立和處理業務流程和人工任務。


圖 10. 顯示流程模板的 Business Process Choreographer Explorer
顯示流程模板的 BPCE

您只能啟動當前有效的業務流程和人工任務的例項。也就是說,Business Process Choreographer Explorer 是一個使用後期繫結的客戶端。然而,您可以處理以前有效的模板的例項,例如,您可以宣告這些人工任務例項,或者處理這些流程例項。

JSF 和 Lotus Forms 自定義客戶端

在 WebSphere Integration Developer 中,您可以基於 JSF 技術或 Lotus Forms 技術為業務流程或人工任務生成業務使用者客戶端。生成的客戶端程式碼使用 EJB API 與任務和流程互動;生成的客戶端程式碼所呼叫的 EJB 方法使用後期繫結。

僅支援早期繫結

呼叫業務流程或人工任務的 SCA 元件

呼叫某個業務流程或人工任務的 SCA 元件連線到該業務流程或人工任務的對應 SCA 元件。這種靜態連線導致呼叫特定的版本,也就是使用早期繫結。

如果呼叫 SCA 元件是某個流程,您可以使用後期繫結,如前面的僅支援後期繫結所述。

為了使任何 SCA 元件能夠呼叫業務流程或人工任務的當前有效版本,您可以使用下面的業務流程的代理流程人工任務的裝飾流程部分中描述的模式。

不帶 WebSphere Process Server BPEL擴充套件的流程

起始有效日期是一個 BPEL 擴充套件,標準 BPEL 並沒有提供它。如果希望使用不帶 WebSphere Process Server 擴充套件的標準 BPEL,則本文件中描述的基於時間的版本管理將不受支援。

版本管理最佳實踐

下面一個部分將介紹可幫助您對業務流程和人工任務進行版本管理的最佳實踐。

使用版本管理為變化而設計

為了實現將來的業務流程和人工任務更改,您在設計基於業務流程的應用程式時應該考慮版本管理。本部分將描述一些可讓您為更改做好準備的最佳實踐和模式。

模組邊界和庫

應該將一起進行更改的元件分組到一個模組中。一般來講,最佳實踐是在一個模組中包括單個將進行版本管理的流程。這樣,可以容易地引入該流程的新版本,舊版本在不再需要時可以容易地刪除。

將流程和任務版本的介面和業務物件定義放在庫中。每當引入新版本時將使用該庫。

要在 WebSphere Integration Developer 中建立庫,可以在 Business Integration 檢視中右鍵單擊並選擇 New => Library


圖 11. 在 WebSphere Integration Developer 中建立新庫
建立新庫

業務規則

規則邏輯很可能會隨時間推移而更改。因此,與直接將規則邏輯編碼到業務流程邏輯中不同,您應該將規則邏輯作為業務規則來提供,並從業務流程中呼叫它們。業務規則可在執行時動態地更改,並且這些更改會立即生效。這樣,當需要對規則邏輯作出更改時,您就不需要新版本的業務流程。

有關業務規則以及它們如何幫助您解決業務流程的動態方面的進一步資訊,請參考IBM WebSphere Integration Developer 和 WebSphere Process Server 資訊中心

業務流程和子流程

在設計長時間執行的流程時,應該考慮將可能會更改的流程部分實現為子流程。這使得即使正在執行的父流程例項也可以選取這些子流程的較新版本。使用後期繫結,父流程例項將在其導航中到達子流程呼叫點時呼叫子流程的當前有效版本。

弱型別介面和業務物件

由於介面和這些介面使用的業務物件對流程或任務的所有版本都必須完全相同,因此應該考慮使用弱型別介面。例如,對於可能會更改的引數,您可以使用諸如 anyType 等 XML 模式型別,而不是使用特定的型別。WebSphere Process Server V6.1 中引入了使用萬用字元 (xs:any) 和無約束內容(xs:anyType、xs: anySimpleType)的弱型別支援。

這使您可以在不同版本之間更改型別,前提是仍然遵守客戶端與其流程之間的契約——更改型別可能意味著也要更改客戶端。

WebSphere Integration Developer 中的版本管理

建立新版本的典型方法是在 WebSphere Integration Developer 中複製包含早期版本的模組,並在其基礎上發展您的流程或任務。這可以確保建立具有新的模組名稱的新模組。模組名稱在 WebSphere Process Server 單元中必須是唯一的。

有關在 WebSphere Integration Developer 中建立流程或任務的新版本的更多資訊,請參考 WebSphere Integration Developer 資訊中心(請參閱參考資料部分:

UTC 與本地時間

WebSphere Integration Developer 中為業務流程和人工任務指定的起始有效日期和時間是以 UTC 指定的。例如,如果在洛杉磯工作的開發人員希望某個業務流程版本在本地時間 (UTC-8) 上午 10 點變得有效,他必須在業務流程編輯器中指定 18:00 UTC。


圖 12. 以 UTC 指定起始有效日期和時間
指定起始有效日期

如果未提供起始有效日期規範,但是在編輯器中選中了對應的核取方塊,則使用當前 UTC 日期和時間自動填充起始有效日期欄位。

刪除版本

如果安裝某個業務流程或人工任務的新版本,通常舊版本的例項仍然存在。只要舊版本的例項還存在,您就不能刪除該版本,因為執行的例項仍然需要完成其處理,並且已完成、失敗或終止的例項可能重新啟動。此外,要確保保留這些例項使用的所有服務,以使這些例項能夠完成。

為了避免在舊版本的基礎上建立新例項,可以停止對應的模板。當某個模板不再存在任何例項時,可以通過解除安裝對應的企業應用程式刪除該模板。

用於版本管理的模式

以下兩種模式說明了任意 SCA 元件如何使用後期繫結與人工任務和業務流程互動。請注意,通過 BPC API 與任務和流程互動的客戶端不需要這些模式,因為 BPC API 直接支援後期繫結(請參閱前面的支援早期和後期繫結的場合部分)。

業務流程的代理流程

如果某個 SCA 元件呼叫另一個 SCA 元件,則這些元件將靜態地繫結,也就是說,無論起始有效日期如何,都將呼叫所連線的流程元件。唯一受支援的後期繫結組合是一個流程元件呼叫另一個流程元件。但是,可以將後期繫結擴充套件到其他 SCA 元件或始終應該呼叫流程元件的當前有效版本的客戶端。這是通過在呼叫 SCA 客戶端(例如另一個 SCA 元件或 Web 服務客戶端)與流程之間新增代理流程來實現的。這樣,SCA 客戶端將靜態地繫結到代理流程;但是,代理流程將使用後期繫結動態地呼叫流程的當前有效版本。


圖 13. 使用代理流程的 SCA 客戶端後期繫結
SCA 後期繫結

代理流程的實現非常簡單。代理流程包含一個接收活動,後面跟著一個呼叫活動,以及一個僅當該流程提供的操作是雙向操作時才需要的應答活動。確保呼叫活動的引用合作伙伴指定了流程模板名稱。介面合作伙伴和引用合作伙伴都必須使用要呼叫的流程的介面。


圖 14. 代理流程實現
代理流程實現

代理流程的型別取決於所要代表的流程的型別。由於微流程的效能比長時間執行的流程的效能更好,應該儘可能使用微流程來實現代理流程。下表提供了有關何時使用哪種型別的代理流程的建議。


表 1. 提供有關何時使用每一種代理流程的建議

流程型別 流程介面的操作
單向 雙向
流程為微流程 代理流程為微流程 代理流程為微流程 (*)
流程為長時間執行的流程 代理流程為微流程 代理流程為長時間執行的流程

(*) 如果該流程可能在將來更改為長時間執行的流程,則使用長時間執行的代理流程。

應該謹慎選擇代理流程的型別,因為無法容易地替換此流程。例如,如果您的流程是具有雙向介面的微流程,您通常會將代理流程實現為微流程。然而,如果您的流程的後續版本變為長時間執行的流程,您也需要更改代理流程。

人工任務的裝飾流程

通常,SCA 客戶端使用 SCA 連線呼叫人工任務元件,也就是靜態地繫結到對應的任務。

如果 SCA 元件需要呼叫人工任務的當前有效版本,則人工任務裝飾流程 模式可以幫助實現此目的。一般的“裝飾模式”是一種設計模式,允許動態地向現有元件新增新的行為。此模式使用後期繫結來呼叫表示實際人工任務的裝飾流程的當前有效版本,從而實現到該任務的後期繫結。

例如,如果某個流程以後期繫結方式呼叫某個人工任務,則它將使用後期繫結呼叫裝飾流程,而裝飾流程又靜態地呼叫該任務。裝飾流程或者作為內聯任務包含該任務,或者呼叫對應的人工任務元件。下圖顯示了實現為人工任務元件的人工任務的不同版本的示例。


圖 15. 使用裝飾流程呼叫人工任務的流程
呼叫人工任務的流程

裝飾流程公開了與其呼叫的任務相同的介面。由於人工任務始終是非同步的,對應的裝飾流程通常為長時間執行的流程。對於人工任務的單向操作,您可以考慮使用微流程。

然而,裝飾流程模式不僅適用於人工任務,還可以應用它來對任何型別的長時間執行的非同步服務進行基於時間的版本管理。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-582710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章