在 WebSphere Process Server V7.0 中使用儲存與轉發特性(一)

CloudSpace發表於2010-08-20

Phani Madgula, 軟體開發人員, IBM

2010 年 8 月 09 日

本教程描述了 WebSphere® Process Server V7 中的新儲存與轉發特性,並使用幾個應用程式場景來向您展示如何用它加快應用程式請求的處理。

簡介

在 WebSphere Process Server(以下簡稱為 Process Server)以前的版本中處理非同步請求時,如果出現執行時錯誤,將生成失敗事件。在請求出錯或服務不可用而丟擲執行時錯誤時,恢復系統會持續生成失敗事件。當執行時錯誤被處理後,管理員必須使用管理控制檯或失敗事件管理器(FEM)API 指令碼重新提交失敗事件。這是一個生成和重新提交失敗事件的資源密集型操作。在 Process Server V7.0 中,新引入的儲存與轉發 特性對這一問題有較好的處理。

當一個元件呼叫一個服務、而該服務又不可用時,將丟擲執行時錯誤。這些執行時錯誤只是對非同步呼叫生成失敗事件,而對於後續的服務呼叫不會生成失敗事件。使用者可以在適當的匯入、匯出或元件上配置儲存與轉發特性,使請求能被儲存在相應的佇列中。這些已儲存的請求將不再被重新提交給錯誤的或不可用的服務。這避免了生成大量失敗事件。當目標服務可用時,可以使用業務空間中的 Store and Forward 小部件 對這些請求進行中轉。

關於本教程

本教程展示執行在 Process Server V7.0 上的應用程式的新特性的配置。呈現了各種應用程式示例場景,說明這些特性在執行時是如何工作的。同時介紹了與儲存與轉發特性相對應的業務空間小部件。

本文分為以下幾部分:

  • 儲存與轉發特性簡介
  • 各業務應用程式場景中的儲存與轉發特性
  • 儲存與轉發配置中的異常規範

先決條件

  • 對 J2EE 概念的深入理解。
  • 熟練使用 WebSphere Integration Developer(以下簡稱 Integration Developer)開發 WebSphere Process Server 應用程式以及在伺服器環境中實施管理活動。
  • 具備 WebSphere MQ 及其工具相關知識。


系統需求

以下環境是執行此示例所必需的。

  • 一個 Windows® XP® Service Pack 2 桌面,至少 2 GB RAM
  • 帶測試環境的 IBM® WebSphere Integration Developer V7.0.0.0 Fix Pack 1。您需要為測試環境應用臨時補丁 IZ72101
  • IBM WebSphere Process Server V7.0.0.0 Fix Pack 1
  • WebSphere MQ V6.0

持續時間

3 小時

儲存與轉發特性簡介

這一部分將介紹儲存與轉發特性,並解釋如何在應用程式上配置該特性。這裡也提供了配置限定符的指南。

儲存與轉發特性工作方式

您可以通過在非同步呼叫的元件上配置儲存與轉發限定符 來在應用程式中啟動儲存與轉發特性。該元件可以是一個匯入、一個 SCA 匯出或一個 SCA 元件。您可以將它配置在一個元件,一個指定介面或一個指定操作等所有介面上。作為配置的一部分,執行時異常也是指定的。您可以為每個儲存與轉發配置不同的執行時異常,這些儲存與轉發配置都是在元件的各個介面或操作上指定的,在業務空間小部件中形成服務控制點

當請求流中出現執行時異常時,儲存與轉發的理念是異常將會傳播直至第一個非同步點時停止。如果儲存與轉發被配置在非同步點附近的元件上,後續請求將被儲存在非同步點上,而不是持續生成失敗事件。執行時異常解決後,可以使用 Store and Forward 小部件重放已儲存事件。非同步點對映到服務控制點。

當將一個配置有儲存與轉發特性的應用程式部署到 Process Server、並啟動執行時驗證時,執行時驗證器確認限定符已得到正確配置。如果有錯誤出現,應用程式的安裝將會停止。如果有警告出現,會在日誌檔案顯示,應用程式安裝繼續進行。限定符驗證規則在 儲存與轉發執行時驗證器 中有詳細說明。

當配置儲存與轉發特性的元件非同步呼叫一個服務、且服務丟擲執行時錯誤時,將為請求生成一個失敗事件。但是,這個失敗事件也將為該元件啟動儲存。如果失敗事件能在控制檯中檢索到,事件限定符這列將有一個 “initiated store” 值。在業務空間中 Store and Forward 小部件將指出儲存在元件服務控制端點啟動。服務控制點的狀態將被設定為 “storing”。元件的後續請求將被儲存在與元件對應的佇列中。在目標服務可用時或執行時錯誤解決後,可在 Store and Forward 小部件中將服務控制點的狀態設定為 “forwarding”。狀態設定為 “forwarding” 時,已儲存事件將被轉發到目標服務進行處理。



 

為應用程式配置儲存與轉發特性

Integration Developer 用於配置儲存與轉發限定符。在配置儲存與轉發限定符時注意以下幾點:

  • 限定符可以配置在以下元件上:
    • SCA Export(不可以配置在其他匯出上)
    • Imports
    • SCA Component
  • 此外,在上面提到的每個元件上,可將限定符獨立配置在所有介面以及介面的操作上。
  • 每個配置都提供有一個名稱,且形成一個服務控制點。所有服務控制點將在業務空間的儲存與轉發小部件中顯示。參見圖 1 中的 “Configuration name” 欄位。
  • 為每個儲存與轉發配置都提供異常規範。它會指出哪個異常規範觸發了儲存。如果元件接收的異常不同於指定的那個,儲存將不能被觸發。預設情況下,異常是 ServiceUnavailableException。更多資訊,參見 Service Runtime Exception handling。見圖 1 插圖。
  • 異常規範包括已配置的異常如何解決由該元件接收的包裝異常。通常,在異常傳播中,根異常被包裝在更高階的異常中,元件接收這個包裝異常,其中包含一個系列異常。在圖 1 中 “Exception chain” 核取方塊指定了其值。
  • 異常規範包括一個匹配接收異常的訊息。為了觸發儲存,接收異常中的訊息同指定的訊息相匹配。在配置客戶執行時異常時這是很有用的。參見圖 1 中的 “Message to match” 欄位。
  • 如果收到的異常是指定異常的一個子類,異常規範也可以指定觸發儲存。這在配置客戶執行時異常時是很有用的。參見圖 1 “Match types that inherit from this type” 欄位。
  • 圖 1 提供了各種在配置儲存與轉發限定符時可用的選項(如上所述)。在組裝圖中單擊 EmployeeServiceComponent 並導航到底部的 Properties > Details 選項卡。

    圖 1. 配置儲存與轉發特性
    配置儲存與轉發特性

注意,您不能使用儲存與轉發特性進行同步呼叫。關於儲存與轉發限定符的更多資訊,參見資訊中心的 儲存與轉發限定符 主題。

儲存與轉發特性應用程式場景

這一部分介紹可以使用儲存與轉發特性的各種業務應用程式場景。每個場景中的特性行為將通過一個示例應用程式予以說明,您可以將這些示例部署到 Process Server 環境中。所有應用程式以 Project Interchange (PI) 形式提供,使它們可以匯入 Integration Developer 並在測試環境中執行。

場景 1: 非同步匯入(JMS、MQ、MQJMS、GenericJMS)上的儲存與轉發

該部分討論儲存與轉發特性如何使用訊息繫結匯入。業務場景和示例應用程式如下所述。

XYZ 計算機制造公司有一個組裝單元和一個庫存部門。庫存部門提供關於 CPU 可用性資訊。組裝單元請求庫存部門提供某個特定 CPU 的可用性以及數量。庫存部門響應請求的 CPU 數量是否充足。如果數量不夠,它會就何時達到所請求數量作出響應。庫存部門通過 WebSphere MQ 傳輸接受請求。客戶必須傳送請求給 WebSphere MQ 上的一個指定佇列,隨後檢索響應。因此請求流是一個單向操作。組裝圖如圖 2 所示。


圖 2. 庫存服務組裝圖
庫存服務組裝圖

從上面組裝圖中可以看出,CPUInventory 元件被作為 CPUInventoryExport 匯出,並附有 MQJMS 匯出繫結。AssemblyUnit 元件通過 CPUInventoryImport 和 MQJMS 匯入繫結呼叫 CPUInventory 元件。儲存與轉發限定符配置在 CPUInventoryImport 上。圖 3 顯示了配置在匯入上的儲存與轉發限定符。


圖 3. CPUInventoryImport 上的儲存與轉發限定符
CPUInventoryImport 上的儲存與轉發限定符

有時候會有不受接納的停機情況,這使得 WebSphere MQ 服務不可用。這種情況下,如果 AssemblyUnit 通過 CPUInventoryImport 呼叫 CPUInventory 元件,匯入將未能與 WebSphere MQ 連線,從而生成失敗事件。由於儲存與轉發配置在匯入上,第一個失敗事件將啟動儲存。來自匯入的後續請求將被儲存在匯入佇列中。這就是說,無論 WebSphere MQ 傳輸是否可用,都將生成請求。一旦 WebSphere MQ 服務恢復聯機,儲存的請求通過業務空間中的 Store and Forward 小部件被轉發。

執行示例:

  1. 下載 Example1.zip(在 samples.zip 檔案中)。PI 有兩個模組,AssemblyService 和 InventoryService,以及一個庫。
  2. 將示例匯入到 Integration Developer。
  3. 建立一個名為 Test_QM 的佇列管理器。建立一個名為 CHANNEL1 的伺服器連線通道,並在 WebSphere MQ 中配置監聽埠為1414。使用客戶端繫結將匯入連線到佇列管理器上。在 Test_QM 中建立一個名為 inventory_export_queue 的佇列。您可以使用 MQ Explorer 來完成這些活動。觀察 Integration Developer 中的匯入和匯出屬性,注意 CPUInventoryImport 將請求放置在 CPUInventoryExport 監聽的 inventory_export_queue,這些值配置在 Import 和 Export 上。在 Import 和 Export 的 Security attributes 部分為 J2C authentication data entry 設定適當的值。關於 MQJMS 繫結的更多資訊,參見 WebSphere MQ JMS 主題。
  4. 在測試伺服器上部署示例。
  5. 使用 Integration Developer 測試客戶端測試一個請求流。右鍵單擊 AssemblyUnit 元件,選擇 Test component 選項。輸入以下值:
    CPU_item_no:1
    Quantity:5

  6. 檢查 Systemout.log 檔案檢視以下輸出:
    Status=Available
    Available_date=Today
    CPU_details=Intel PENTIUM

  7. 使用 MQ Explorer 停止佇列管理器 Test_QM。傳送如下請求:
    CPU_item_no:2
    Quantity:12

  8. 生成失敗事件,如圖 4 所示。使用管理控制檯檢視失敗事件。注意 Event 限定符的值是 Initiated store

    圖 4. 佇列管理器不可用時,生成失敗事件
    佇列管理器不可用時,生成失敗事

  9. 傳送另外兩個使用以下輸入值的請求:
    CPU_item_no:3
    Quantity:16 and
    CPU_item_no:3
    Quantity:29

  10. 檢視並確保無失敗事件生成。請求將被儲存到匯入佇列,如圖 5 所示。使用管理控制檯中的 Service Integration Bus Explorer 來檢視 SCA-SYSTEM 匯流排上的佇列點。

    圖 5. 儲存在 Import 佇列的請求
    儲存在 Import 佇列的請求

  11. 啟動業務空間並建立一個名為 StoreAndForward 的空間,向空間新增 Store and Forward 小部件並儲存。如圖 6 所示小部件狀態顯示為 “Storing”。注意小部件中的服務控制點,這裡僅有一個服務控制點,名字同儲存與轉發配置的 Configuration name 一樣(參見 圖 3)。在伺服器檢視中右鍵單擊 Server 啟動業務空間,並在 Integration Developer 中選擇 Launch > Business Space 選項。

    圖 6. 業務空間中的 Store and Forward 小部件
    業務空間中的 Store and Forward 小部件

  12. 啟動佇列管理器 Test_QM。在 Store and Forward 小部件上選擇儲存核取方塊,並單擊 Forward 按鈕。這將所有已存訊息轉發到佇列管理器。CPUInventory 服務將處理請求。檢查 Systemout.log 檔案檢視輸出訊息,最初生成的失敗事件必須通過管理控制檯手動提交
  13. 如圖 7 所示,Store and Forward 小部件顯示儲存狀態為 “Forwarding”。

    圖 7. Store and Forward 小部件顯示儲存狀態為 “Forwarding”
    Store and Forward 小部件顯示儲存狀態為 “Forwarding”


 

場景 2: 同步匯入(WebServices)上的儲存與轉發特性

在這個場景中,儲存與轉發限定符配置在一個帶有 Web 服務繫結的匯入上。然而,Web 服務匯入是非同步呼叫的。這在 Web 服務丟擲執行時錯誤時(它不可用時)將會觸發訊息儲存。訊息儲存將是為匯入建立的佇列。業務場景和示例應用程式如下所述。

ABC 計算機制造公司有一個裝配部門,裝配計算機顯示器。裝配部門聯絡供應商購買計算機顯示器,供應商提供一個客戶能夠提交訂單的 Web 服務。訂單由顯示器專案號和數量組成。Web 服務對是否請求的訂單能夠立即提供,以及何時庫存可用做出響應,具體裝配細節如圖 8 所示。


圖 8. Vendor Web 服務裝配圖
Vendor Web 服務裝配圖

在圖 8 中,ComputerMonitorVendor 元件使用 WebService 繫結被匯出。AssemblyDivision 元件通過 ComputerMonitorVendorImport 發出訂單,呼叫 Web 服務。訂單請求是一個帶有回撥函式的非同步請求響應。儲存與轉發限定符配置在 ComputerMonitorVendorImport 上,如圖 9 所示。


圖 9. 配置在 Web 服務匯入上的儲存與轉發特性
配置在 Web 服務匯入上的儲存與轉發特性

在供應商環境中可能存在一些網路或其他方面的問題,使 Web 服務不可用。由於儲存與轉發限定符是配置在 ComputerMonitorVendorImport 上的,而且是從 AssemblyDivision 元件非同步呼叫,訂單儲存在匯入佇列中。只有第一個訂單(失敗的)建立失敗事件,隨後的訂單都儲存在匯入佇列中,這樣一來,裝配部門就可以繼續生成訂單請求,不管供應商 Web 服務是否可用。當 Web 服務聯機後,儲存的訂單將使用業務空間中 Store and Forward 小部件被轉發。這些請求由 ComputerMonitorVendor 部件處理,響應將被推向 AssemblyDivision 元件。

執行示例:

  1. 下載 Example2.zip(在 samples.zip 檔案中)。PI 有兩個模組,AssemblyService 和 ComputerMonitorVendorService,以及一個庫。
  2. 將示例匯入到 Integration Developer 中。將 Web 服務端點的埠號改為合適的值。
  3. 部署示例並使用 Integration Devloper 測試客戶端測試 AssemblyDivision 元件。
  4. 在 Integration Developer 中停止 ComputerMonitorVendorService 模組併傳送一個請求。將生成一個事件限定符值為 “Initiated store” 的失敗事件。
  5. 傳送另外兩個訂單請求。這兩個請求將不生成失敗事件。請求被儲存在 Web 服務匯入佇列中,如圖 10 所示。

    圖 10. 儲存在 Web 服務匯入佇列中的訂單請求
    儲存在 Web 服務匯入佇列中的訂單請求

  6. 在業務空間中開啟 Store and Forward 小部件,注意服務控制點(ComputerMonitorVendorService_Unavailable)的狀態是否為 “Storing” 。參考 場景 1 的 11 步,獲取關於如何開啟業務空間以及檢視 Store and Forward 小部件的更多資訊。
  7. 啟動 ComputerMonitorVendorService 模組並在 Store and Forward 小部件中將狀態設定回 “Forward”。
  8. 重新提交最初生成的失敗事件。
  9. 在 SystemOut.log 檔案中觀察輸出訊息。


 

場景 3: SCA 匯出上的儲存與轉發

到目前為止,我們已經展示了訊息繫結匯入和 Web 訊息繫結上的儲存與轉發特性。類似地,您可以在 SCA 匯出上(不能在其他的匯出上)配置儲存與轉發限定符。在 SCA 匯出上配置之後,如果匯出同步呼叫一個 SCA 元件,且元件丟擲一個執行時異常,第一個失敗的請求將產生一個失敗事件,後續請求將儲存在 SCA 匯出佇列中。圖 11 顯示了示例應用程式場景以及一系列啟動儲存的呼叫。注意,預設情況下,SCA 匯入和匯出的首選互動樣式是同步的。但是為了啟動儲存,必須將 SCA 匯入或匯出的首選互動樣式設定為 “非同步”。您可以通過以下類似於前面場景的步驟來輕鬆地模擬這個場景。


圖 11. SCA 匯出上的儲存與轉發限定符
SCA 匯出上的儲存與轉發限定符

圖 11 中通過第 6 步將請求儲存在匯出佇列中。


 

場景 4: 帶有非同步匯出(JMS、MQ、MQJMS、GenericJMS)的儲存與轉發

訊息匯出非同步呼叫與其相對應的元件。因此,當儲存與轉發限定符配置在元件上、且元件出現了執行時錯誤時,儲存被觸發且訊息儲存在元件佇列中。圖 12 展示了一個示例應用程式場景以及一系列啟動儲存的步驟。也可以通過上述場景提供的類似步驟輕鬆地模擬這個場景。


圖 12. SCA 元件上的儲存與轉發限定符
SCA 元件上的儲存與轉發限定符

在圖 12 中,通過第 4 步將訊息儲存在元件佇列中


 

場景 5: 帶有多個介面和引用的儲存與轉發特性

在這個場景中,儲存與轉發限定符配置在一個 SCA 元件上,同步呼叫兩個服務。呼叫的服務是 Web 服務。如果其中一箇中斷,元件接收到一個執行時錯誤並生成錯誤事件。後續的請求將被儲存在元件佇列中。注意,即使只有一個服務中斷,另一個仍然可用,元件的所有請求也要被儲存。業務場景和示例如下所述。

一個計算機制造公司需要計算機顯示器進行組裝。它聯絡一個提供計算機顯示器的供應商。供應商有兩個服務執行訂單處理。第一個服務是 ComputerMonitorVendorServicemputer,它接受訂單並返回所需產品以及數量是否有庫存的資訊。如果產品和數量都有庫存,供應商要求通過信用卡付賬。支付服務由 PaymentGatewayService 提供。

兩個服務都是通過 Web 服務匯入。計算機制造公司首先必須使用 ComputerMonitorVendorService 核實所需產品及數量,然後聯絡 PaymentGatewayService 進行支付。計算機制造公司部署了 ComputerMonitorBuyerService,它依次非同步呼叫 ComputerMonitorVendorService 和 PaymentGatewayService 來傳送請求訂單以及付款(如果產品和數量足夠),圖 13 是組裝圖。


圖 13. ComputerMonitorBuyerService 組裝圖
ComputerMonitorBuyerService 的組裝圖

儲存與轉發限定符配置在 ComputerMonitorBuyer 元件上,如圖 14 所示。


圖 14. 元件上的儲存與轉發配置
元件上的儲存與轉發配置

如果 ComputerMonitorVendorService 或者 PaymentGatewayServicethen 其中一個是不可用的,那麼所有 ComputerMonitorBuyer 請求都被儲存。當不可用服務可用時,儲存的請求在兩個服務上依次重放。例如,如果 PaymentGatewayService 不可用 ,ComputerMonitorBuyer 將呼叫 ComputerMonitorVendorService 來查明是否訂單的庫存不足。

然而,如果 PaymentGatewayService 呼叫失敗,將生成失敗事件並啟動儲存。後續的訂單請求將被儲存。當 PaymentGatewayService 可用時,儲存的請求將被重放。示例包含 Test.jsp ,您可以使用它來向 ComputerMonitorBuyer 元件傳送訂單請求。Test.jsp 通過訂單請求非同步呼叫 ComputerMonitorBuyer。該請求是單向操作。

帶有長期執行業務流程的儲存與轉發

在這個例子中,如果 ComputerMonitorBuyer 是一個長期執行 BPEL 流程,那麼儲存與轉發將不能 工作,這是因為長期執行業務流程不支援儲存與轉發。

執行示例:

  1. 下載 Example3.zip(在 samples.zip 檔案中),並將其匯入 Integration Developer。
  2. 將模組部署到測試伺服器。適當修改 Web 服務終端的埠號。
  3. 訪問 Test.jsp,它在 WebClient 專案中。右鍵單擊並選擇 Run as > Run on server。圖 15 提供了輸入值。

    圖 15. 通過 Test.jsp 輸入提供的值
    通過 Test.jsp 輸入提供的值

  4. 在 SystemOut.logs 中,觀察以下輸出:
    Inventory status=Available
    Available date=Today
    Computer monitor details=IBM Monitor
    Payment status=PAYMENT DONE
    Payment details=CREDIT CARD ACCEPTED

  5. 停止 PaymentGatewayService 模型。
  6. 重發圖 15 所示的請求。
  7. 生成失敗事件,啟動儲存。
  8. 傳送圖 16 所示的另一個請求。

    圖 16. 通過 Test.jsp 輸入提供的值
    通過 Test.jsp 輸入提供的值

  9. 傳送圖 17 所示的請求。

    圖 17. 通過 Test.jsp 輸入提供的值
    通過 Test.jsp 輸入提供的值

  10. 觀察並確保無失敗事件生成,但請求儲存在元件佇列中,如圖 18 所示。

    圖 18. 儲存在元件佇列中的請求
    儲存在元件佇列中的請求

  11. 找到 Store and Forward 小部件,會發現 ComputerMonitorVendorService_Unavailable 服務控制點的狀態為 “Storing”。
  12. 啟動 PaymentGatewayService 模組並在 Store and Forward 小部件中將其狀態設定回 “Forwarding”。
  13. 重新提交最初建立的失敗事件。

這一部分將討論儲存與轉發配置中的異常規範,參見 為應用程式配置儲存與轉發特性 瞭解更多異常規範資訊。

EmployeeServiceComponent 呼叫 EmployeeDetailsServiceComponent,目的是通過員工號(Empno)來檢索某個員工的詳細資訊。服務呼叫是一個通過 SCA 匯入和 SCA 匯出的同步呼叫,您可以在 SystemOut.log 檔案中檢視輸出。儲存與轉發限定符配置在 EmployeeServiceComponent 上。EmployeeService 模組同自定義 RuntimeException1 類( java.lang.RuntimeException 的一個子類)一起打包。

如果 Empno 是『1,2,3,4,5,6』之外的數字,EmployeeDetailsServiceComponent 將丟擲一個 “RuntimeException1”。Test.jsp 非同步呼叫 EmployeeServiceComponent。我們將闡述儲存與轉發特性如何使用異常規範中的各選項。將 Example4.zip(在 samples.zip檔案中)匯入到 Integration Developer 並遵循以下說明。

儲存與轉發限定符上的 ServiceRuntimeException

  1. 下載的應用程式將在 EmployeeServiceComponent 上配置儲存與轉發限定符,如圖 19 所示。

    圖 19. 為儲存與轉發指定的 ServiceRuntimeException
    為儲存與轉發指定的 ServiceRuntimeException

  2. 在測試伺服器上部署應用程式,並使用 Test.jsp 呼叫請求流,Test.jsp 包裝在 EmployeeServiceWebClient 專案中。右鍵點選 JSP file 並選擇 Run as > Run on server。驗證請求流成功執行。
  3. 停止 EmployeeDetailsService 模組並觸發一個請求。一個失敗事件生成,後續事件被儲存。
  4. 啟動 EmployeeDetailsService 並使用 Store and Forward 小部件轉發請求,重新提交失敗事件。
  5. EmployeeDetailsService 模組啟動之後,通過 Empno 為 10 的 Test.jsp 觸發一個請求。EmployeeDetailsService 將丟擲一個 “RuntimeException1”。RuntimeException1 包裝在 ServiceRuntimeException 中,配置在儲存與轉發限定符上。因此一個失敗事件生成,後續請求被儲存。


 

儲存與轉發限定符上的 RuntimeException1

  1. 使用 RuntimeException1 修改儲存與轉發限定符,如圖 20 所示。

    圖 20. 為儲存與轉發指定的 RuntimeException1
    為儲存與轉發指定的 RuntimeException1

  2. 使用上述修改重新部署應用程式並使用 Test.jsp 成功測試請求流。停止 EmployeeDetailsService 模組並觸發一個請求流。失敗事件生成,但它不會觸發儲存。這是因為 RuntimeException1 是為儲存與轉發限定符配置的。然而,不可用的 EmployeeDetailsService 丟擲一個 ServiceRuntimeException,這並不是為儲存與轉發配置的。
  3. 啟動 EmployeeDetailsService 模組並重新提交失敗事件。
  4. 使用值為 11 的 Empno 觸發一個請求。這將使 EmployeeDetailsServiceComponent 丟擲一個 RuntimeException1,生成一個失敗事件,之後儲存被觸發。


 

儲存與轉發限定符上的 RuntimeException1 和異常訊息

  1. 修改儲存與轉發限定符,如圖 21 所示。

    圖 21. 儲存與轉發上的異常和異常訊息
    儲存與轉發上的異常和異常訊息

  2. 注意 “Message to match” 屬性。已經為它提供了一個值 “This is RuntimeException1”,這個值事實上是 EmployeeDetailsServiceComponent 中丟擲的 RuntimeException1 中包含的訊息文字。
  3. 部署應用程式並使用 Test.jsp 觸發一個請求。測試請求是否成功執行。使用值為 11 的 Empno 觸發一個請求,這將生成一個失敗事件,並且儲存將被觸發,這是因為異常和異常訊息匹配。
  4. 將 “Message to match” 屬性修改為 RuntimeException1 Message。重新部署應用程式並使用值為 11 的 Empno 觸發一個請求。失敗事件生成,但是不會觸發儲存,這是因為異常訊息與在儲存與轉發限定符上指定的異常不匹配。


 

場景 4: 儲存與轉發限定符上的異常鏈配置

  1. 修改 EmployeeServiceComponent 上的儲存與轉發限定符,如圖 22 所示。

    圖 22. 儲存與轉發上的異常鏈配置
    儲存與轉發上的異常鏈配置

  2. 注意異常鏈值。它被設定為 “Match only the top level exception”。異常依然是 RuntimeException1。
  3. 使用值為 11 的 Empno 觸發一個請求。這將使 EmployeeServiceComponent 丟擲一個 RuntimeException1。但是 RuntimeException1 包裝在頂級異常 ServiceRuntimeException 中,如圖 23 所示。由於 儲存與轉發配置被設定為僅匹配頂級異常,失敗事件生成,但是儲存沒有被觸發。類似地,您可以測試其他異常鏈的值,您也可以使用一個示例應用程式測試繼承自該選項型別的匹配型別。

    圖 23.失敗事件中的異常棧跟蹤
    失敗事件中的異常棧跟蹤

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

相關文章