WebSphere Adapter 客戶定製的錯誤繫結

CloudSpace發表於2010-08-30
吳 衛, 軟體開發工程師, IBM
王 斌, 高階軟體工程師, IBM
邢 常亮, 高階軟體工程師, IBM

簡介: WebSphere Adapter 6.2 中引入了一個非常重要的功能 — 錯誤繫結。通過錯誤繫結, Adapter 能夠對異常(Exception)實現不同的處理流程。本文首先介紹錯誤繫結的工作機制,然後講述了 WebSphere Adapter 預定義的一些錯誤繫結以及侷限,最後以 JDBC Adapter 為例項講述瞭如何配置客戶定製的錯誤繫結。

為什麼要錯誤繫結

關於 WebSphere Adapter 錯誤繫結原理與應用,可以參加作者的另外一篇文章(連結如下:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0912_wuwei_adaptererror/),本文中,作者將簡單的描述一下為什麼客戶需要錯誤繫結,WebSphere Adapter 目前所支援的錯誤繫結,客戶定製的錯誤繫結的意義與實現方法。

錯誤繫結是 WebSphere Adapter 提供的一種與程式語言無關的處理業務邏輯異常的機制,通過此錯誤處理機制,能夠將執行時異常和業務邏輯異常進行區分,並給應用系統的呼叫者提供更為有意義的錯誤資料。

錯誤繫結的意義在於,可以提供給客戶一種機制來區分執行時異常和業務邏輯異常,使用者處理業務邏輯異常時不需要去檢查冗長的執行時異常日誌,而是直接處理返回的錯誤業務物件。基於這種機制,可以大大減少使用者處理異常的代價,並且所返回的錯誤資料更加具體,更有意義。

在本章節中,我們將用 WebSphere Adapter for JDBC 為例子,簡單回顧一下錯誤繫結的處理過程,請見下圖 1:


圖 1. 錯誤繫結流程圖 檢視大圖
圖 1. 錯誤繫結流程圖

如上圖所示,當 WebSphere Adapter 遇到異常 (Exception) 時,WebSphere Adapter 先呼叫錯誤選擇器 (Fault Selector) 判斷此異常是否為 WebSphere Adapter 支援的錯誤,如果不是,則不做處理,如果是,則呼叫錯誤選擇器生成對應的錯誤名字 (Fault Name)。然後根據錯誤名字找到對應的錯誤繫結型別 (Fault Binding Type),最後呼叫錯誤繫結型別生成相應的錯誤資料 (Fault Data),並將此錯誤資料返回給呼叫者。

由此可見,使用者可以自定義錯誤選擇器來判斷什麼型別的異常應該被處理為錯誤,同時也可以自定義錯誤繫結實現在錯誤物件中放置定製的錯誤資訊。

WebSphere Adapter 作為一個與各種 EIS 系統進行連線的產品,支援兩大類的產品,一類稱作 Application Adapter,用來連線諸如 SAP,Siebel,Oracle EBS 等不同的應用系統,另外一類稱為 Technology Adapter,用於通過 JDBC,Email,FTP 等標準與相應的系統互動。各個不同的 Adapter 在其錯誤繫結上有某些相似之處。基於此種考慮,WebSphere Adapter 在其基礎實現類中定義了 5 種通用的錯誤繫結,每個 Adapter 既可以直接使用這 5 種錯誤繫結,也可以很方便的定義自己特殊的錯誤繫結。WebSphere 基礎實現類中定義的錯誤繫結,是最常見錯誤型別,除了這 5 個錯誤繫結之外,每個 Adapter 還自己擴充套件了一些預定義好的錯誤繫結,來滿足自身 adapter 對於錯誤處理的需要,以 JDBC Adapter 為例,擴充套件了 IntegrityConstraintFault,ObjectNotFoundFault,UniqueConstraintFault 3 個錯誤繫結,用以滿足 JDBC Adapter 的錯誤處理的需要。

下表 1 列舉了 WebSphere Adapter 基礎實現類中定義的錯誤繫結的型別:


表 1. 基本錯誤繫結型別

錯誤型別名稱 錯誤型別實現類 錯誤型別業務物件
DUPLICATE_RECORD DuplicateRecordException DuplicateRecordFault
MATCHES_EXCEEDED_LIMIT MatchesExceededLimitException MatchesExceededLimitFault
MULTIPLE_MATCHING_RECORDS MultipleMatchingRecordsException MultipleMatchingRecordsFault
RECORD_NOT_FOUND RecordNotFoundException RecordNotFoundFault
MISSING_DATA MissingDataException MissingDataFault

通過前面的章節讀者已經可以發現,每個 Adapter 預先定義好的錯誤繫結數量都是有限的,這樣就會帶來一個問題,WebSphere Adapter 預定義的錯誤繫結的型別不能滿足客戶的所有需求,例如:客戶在訪問資料庫時遇到 Table Locked 這個 SQL 錯誤資訊,顯然屬於業務層面的異常,但是目前的 WebSphere Adapter for JDBC 就不能夠將該型別的異常按照錯誤繫結的機制進行處理,客戶需要按照一般的執行時異常進行處理,造成很大的不便。

問題在於,每個客戶所期望的錯誤繫結型別都不一致,對於 WebSphere Adapter 而言,很難預先定義好所有的錯誤繫結型別來供使用者使用,所以需要有一種機制讓客戶自己定製相應的錯誤繫結,這就是我們為什麼需要客戶定製的錯誤繫結。

從上面的分析可以看出,實現客戶定製的錯誤繫結所需要的工作是:

1)定製的錯誤業務物件。

2)定製錯誤選擇器。

3)定製錯誤繫結實現類

4)配置定製的錯誤選擇器,錯誤繫結,錯誤業務物件到需要該定製錯誤的功能操作上

下面的章節將以 WebSphere Adapter for JDBC 為例,實現一個使用者定製的錯誤繫結。

使用者場景中,使用 WebSphere Adapter for JDBC 支援的儲存過程業務物件從資料庫中提取資料。使用者使用的儲存過程需要訪問多張資料表,由於有併發的應用程式也在同時訪問這些資料表,因此在呼叫儲存過程的過程中有時候會得到“Record is already locked”這類 SQL 異常。使用 JDBC Adapter 預設提供的錯誤繫結,該類 SQL 異常不能被處理為錯誤,只能當作執行時異常處理,會導致使用者的異常處理程式碼非常複雜。因此使用者需要實現自己定製的錯誤繫結,將這類 SQL 異常處理為錯誤業務物件,以簡化業務流程處理。

根據前文所述,客戶的第一個工作是定義錯誤業務物件,在這個例項中,為了簡單起見,我們新定義的錯誤業務物件直接繼承於 Adapter 基礎實現類定義的基礎錯誤業務物件,新定義的錯誤業務物件命名為 myFault,定義清單如下:


清單 1. myFault 錯誤業務物件定義

				 
 

相關文章