WebSphere Adapter 客戶定製的錯誤繫結
簡介: 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:
如上圖所示,當 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 基礎實現類中定義的錯誤繫結的型別:
錯誤型別名稱 | 錯誤型別實現類 | 錯誤型別業務物件 |
---|---|---|
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,定義清單如下:
相關文章
- 以客戶端為中心的錯誤處理客戶端
- zblog新增html後臺出錯,zblog後臺設定固定域名繫結錯誤HTML
- 七、Spring Boot 錯誤處理原理 & 定製錯誤頁面Spring Boot
- 多年客戶金幣計算錯誤解決過程
- Go-Micro客戶端請求報500錯誤的解決方法Go客戶端
- React 中 呼叫 lodash.debounce 不錯誤繫結 this 解決方案React
- Flutter 新聞客戶端 - 12 採用 sentry 平臺收集錯誤Flutter客戶端
- MyBatis繫結錯誤:org.apache.ibatis.binding.BindingException:Invalid bound statement (not found)MyBatisApacheException
- win10系統設定登入錯誤次數及鎖定賬戶的方法Win10
- 【問題解決】win10日誌錯誤:建立 TLS 客戶端憑據時發生致命錯誤。 內部錯誤狀態為 10013Win10TLS客戶端
- Swoole 使用on()繫結事件報錯事件
- js 定時器 繫結classJS定時器
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 為什麼總遇到錯誤的客戶,80%的諮詢師都中招了這3點
- IDC客戶定製化需求增長,新競者如何破局
- 複製錯誤案例分享(一)
- 複製錯誤案例分享(二)
- MySQL主從複製錯誤——列型別轉換錯誤MySql型別
- 對MediaPlayer的錯誤使用總結
- async 與 Thread 的錯誤結合thread
- php連結nsq客戶端PHP客戶端
- 零門檻AI 繪圖:教你為客戶定製 ComfyUI Serverless API 應用AI繪圖UIServerAPI
- Random 專案總結 -12 定義定時器,繫結事件random定時器事件
- 事件繫結和樣式規定的原則事件
- Polar mask錯誤總結
- Python部分錯誤總結Python
- 錯誤:System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本問題Oracleclient客戶端
- 微軟配置錯誤導致大量敏感資料洩露,全球客戶受影響微軟
- MySQL 主從複製錯誤1837MySql
- SQL未明確定義列錯誤SQL
- 使用PLSQL客戶端登入ORACLE時報ORA-12502和ORA-12545錯誤的解決方案SQL客戶端Oracle
- 網站提示400 - 請求錯誤,伺服器無法理解客戶端的請求怎麼辦網站伺服器客戶端
- Hadoop安裝錯誤總結Hadoop
- 2024.11.12-2024.11.13錯誤總結
- SqlServer 主從複製錯誤分析--20598SQLServer
- MySQL GTID複製錯誤修復演示MySql
- 擼了一個可除錯 gRPC 的 GUI 客戶端除錯RPCGUI客戶端
- IdentityServer4-客戶端定義-翻譯IDEServer客戶端
- win10系統顯示建立TLS客戶端憑據時發生嚴重錯誤,內部錯誤狀態為10013怎麼辦Win10TLS客戶端