Websphere Adapter 中錯誤處理的原理與應用

CloudSpace發表於2009-12-18

轉自:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0912_wuwei_adaptererror/index.html

WebSphere Adapter 6.2 中引入了一個非常重要的功能 — 錯誤繫結。通過錯誤繫結, Adapter 能夠對異常(Exception)實現不同的處理流程。本文首先介紹錯誤繫結的工作機制,並對 WebSphere Adapter 6.2 所支援的全部錯誤繫結型別進行了分析,使讀者在理解錯誤繫結原理的基礎上,能夠很好地使用 WebSphere Adapter 6.2 所提供的錯誤繫結。

錯誤處理機制簡介

什麼是錯誤繫結

在應用系統中,異常(Exception)是經常出現的。這些異常通常分為 2 類,一類是執行時異常(Runtime Exception),這類異常通常是因為程式碼缺陷造成的;另一類是業務邏輯異常 (Business Exception),這類異常通常是由於資料的不準確、不完善、應用系統無法處理造成的。

對於系統開發人員而言,執行時異常容易被捕獲並進行相應的處理,處理的方式主要有忽略、包裝後重新丟擲、記錄日誌等。對於業務邏輯相關的異常,開發人員很難去分析和處理,最佳的處理方式是把這些異常資訊提供給應用系統的呼叫者,由呼叫者對這些業務邏輯進行相關處理。應用系統傳遞給呼叫者的業務邏輯錯誤不應該是一個異常類,而是與業務相關的結構化異常資料,這樣呼叫方不用關心服務的實現方式和程式語言,只需關注返回的資料(正確結果或者異常資料),並對這些資料進行相應的處理。另外,這些資料的格式通常是與程式語言無關的,而這正是 Websphere Adapter 的錯誤繫結(Fault Binding)特性所支援的。也就是說,錯誤繫結是 WebSphere Adapter 提供的一種與程式語言無關的處理業務邏輯異常的機制,通過此錯誤處理機制,能夠將執行時異常和業務邏輯異常進行區分,並給應用系統的呼叫者提供更為有意義的錯誤資料。

注:錯誤繫結機制目前只能在 WebSphere Process Server 以及 WebSphere Application Server Feature Pack 環境中工作。

錯誤繫結實現原理

錯誤繫結是 Websphere Adapter 支援的一種錯誤處理機制,用在 outbound 應用場景中。錯誤繫結具有以下幾個要素:

  1. 錯誤選擇器(Fault selector)
  2. 錯誤名稱(Fault name)
  3. 錯誤繫結型別(Fault binding type)
  4. 錯誤資料(Fault data)

當 WebSphere Adapter 遇到異常時,WebSphere Adapter 先呼叫錯誤選擇器判斷此異常是否為 WebSphere Adapter 支援的錯誤,如果不是,則不做處理,如果是,則呼叫錯誤選擇器生成對應的錯誤名字。然後根據錯誤名字找到對應的錯誤繫結型別,最後呼叫錯誤繫結型別生成相應的錯誤資料,並將此錯誤資料返回給呼叫者。圖 1 是整個錯誤繫結處理的流程圖。


圖 1. 錯誤繫結流程圖
圖 1. 錯誤繫結流程圖

WebSphere Adapter 錯誤繫結的配置

WebSphere Adapter 6.2 的實現已經支援錯誤繫結了,如果使用者要在自己的應用系統中使用錯誤繫結,就需要配置相應的檔案— import 檔案和 wsdl 檔案。WebSphere Adapter 在預設情況下可以直接為使用者生成預定義好的錯誤配置,如果使用者需要使用自己定義的錯誤型別,則需要在 .import 檔案與 .wsdl 檔案中進行相應的配置。

在 import 檔案中,首先需要配置一個錯誤選擇器(faultSelector),然後在每個 method 對應的 methodBindng 中,配置支援的 faultBinding,包括錯誤名稱和錯誤繫結型別,它的格式如下:

下面是 JDBC Adapter Outbound create 操作錯誤繫結的配置例項。


清單 1. 錯誤繫結 import 檔案配置例項

				 
  
  
     ...   
  faultSelector="com.ibm.j2ca.extension.emd.runtime.WBIFaultSelectorImpl"
  dataBindingType="com.ibm.j2ca.jdbc.emd.databinding.JDBCDataBindingGenerator"> 
     
     
       
        ... 
       
     
     
    
    
	
	
       
         
          Create 
         
       
     
    <!-- other methodBinding --&gt 
   
  

清單 1 中粗體部分分別是前文中提到的錯誤繫結的要素 -- 錯誤選擇器和錯誤名字,錯誤繫結型別。

在配置 wsdl 檔案前,使用者首先需要準備錯誤資料。這些錯誤資料可以是使用者自己定義的,也可以是 WebSphere Adapter 提供了的預設錯誤資料。圖 2 是 WebSphere Adapter 預設提供的 RecordNotFound 錯誤業務物件定義。


圖 2.RecordNotFound 錯誤資料定義
圖 2.RecordNotFound 錯誤資料定義

注:WebSphere Adapter 提供了一個基礎的錯誤資料 WBIFault,其他的所有錯誤資料都繼承自此錯誤資料。

接下來,使用者需在 wsdl 檔案中配置相應的錯誤資料。使用者只需根據 import 檔案中 methodBinding 所支援的錯誤名稱在 wsdl 檔案對應的操作(operation)中配置相應的錯誤資料。清單 2 是 JDBC Adapter Outbound wsdl 檔案中 create 操作的錯誤配置例項。


清單 2.WSDL 檔案錯誤資料配置例項

				 
  
  
   
  
       
       
       
       
     
     
       
       
        ...  
       
        ...   
       
      
  
       
       
       
     
   
  <!-- wsdl:message 
  ... 
   
    
	
	
	
	
	
	
	
   
  

WebSphere Adapter 支援的錯誤繫結

WebSphere Adapter 作為一個與各種 EIS 系統進行連線的產品,支援兩大類的產品,一類稱作 Application Adapter,用來連線諸如 SAP,Siebel,Oracle EBS 等不同的應用系統,另外一類稱為 Technology Adapter,用於連線 JDBC,Email,FTP 等標準的通用技術。各個不同的 Adapter 在其錯誤繫結上有某些相似之處。基於此種考慮,WebSphere Adapter 在其基礎實現類中定義了 5 種通用的錯誤繫結,每個 Adapter 既可以直接使用這 5 種錯誤繫結,也可以很方便的定義自己特殊的錯誤繫結。下面的章節,我們先來看一下 WebSphere Adapter 定義的 5 中通用錯誤繫結和相應的錯誤資料。


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

下面是 IBM WebSphere Adapter for JDBC 所支援的錯誤繫結型別,其他 Adapter 所支援的錯誤繫結型別,本文不再一一列舉,有興趣的讀者可以在附件中找到相應 Adapter 所支援的全部錯誤繫結清單:


表 2.IBM WebSphere Adapter for JDBC 錯誤繫結定義清單
錯誤型別名稱 詳細描述
RecordNotFoundFault 執行 Retrieve,RetrieveAll,Delete,Update 操作時,如果相應的資料庫記錄不存在,JDBC Adapter 會丟擲該類錯誤,指示使用者所存取的記錄並不存在,使用者可以根據相應的錯誤資訊進行處理
MissingDataFault 執行 outbound 操作時,業務物件沒有填寫必須填寫的的屬性資訊,JDBC Adapter 會丟擲該類錯誤,例如在執行 Create 操作時,使用者沒有輸入相應的主鍵鍵值,JDBC adapter 就會丟擲該錯誤提示使用者。預設情況下 Create, Delete, Update, Retrieve, ApplyChanges 和 Exists 操作時會產生該類錯誤。
IntegrityConstraintFault JDBC Adapter 單獨定義的一種錯誤。當執行 Create 操作時,如果資料庫丟擲違背完整性限制的異常資訊,JDBC Adapter 會丟擲此類錯誤。例如,執行 Update 操作時對於子業務物件的外來鍵鍵值和父業務物件對應的鍵值不能匹配時,JDBC adapter 就會丟擲該錯誤
MatchesExceededLimitFault JDBC Adapter 執行 RetrieveAll 操作時,當返回的查詢結果記錄條目超過了 MaxRecords 屬性所配置的條目時,JDBC Adapter 會丟擲該錯誤
MultipleMatchingRecordsFault 執行 Retrieve 或者 Update 操作時,如果有超過一條記錄符合查詢條件,JDBC Adapter 會丟擲該錯誤
ObjectNotFoundFault 此錯誤型別為 JDBC adapter 單獨定義的一種錯誤。執行 Create 或者 Update 操作時,JDBC Adapter 處理 Single-cardinality 子業務物件,如果子業務物件對應的記錄在資料庫中不存在,JDBC Adapter 會丟擲該錯誤
UniqueConstraintFault 此錯誤型別為 JDBC adapter 單獨定義的一種錯誤。執行 Create 或 Update 操作時,如果 JDBC Adapter 接收到 SQLException,JDBC Adapter 會丟擲該錯誤

除了本文列舉了 IBM WebSphere Adapter for JDBC 預定好的錯誤型別外,使用者還可以根據自己的需求定製自己的錯誤繫結,不過這不在本文的討論範圍。下面的章節我們將通過 IBM WebSphere Adapter for JDBC 來展示一個錯誤繫結的應用例項。

錯誤繫結應用示例

下面,我們將通過 WebSphere Adapter for JDBC Adapter 的一個示例來展示錯誤繫結的應用。對於 WebSphere Adapter 而言,每個操作支援的錯誤繫結是每個 Adapter 預先定義的,並在生成服務介面的時候自動生成相應的錯誤資料型別。下圖所示的是一個 JDBC Adapter 的服務介面定義檔案,可以看到,針對 Retrieve 操作,生成了 3 個不同的錯誤資料型別:


圖 3. 服務介面定義示例
圖 3. 服務介面定義示例

關於每個操作所支援的錯誤繫結的含義,請參考上文。

除了在 WSDL 服務定義檔案中定義這些錯誤資料型別外,JDBC Adapter 還會在對應的 Import 檔案定義相應的錯誤繫結,見清單 3。


清單 3.Import 檔案示例

				 
  
  
   
     
       
     
   
   
     
     
    
    
	
    
	
	
	RetrieveAll
	
	
	
… 
 <!-- other methodBinding --&gt 
   
  

對於應用程式的呼叫者而言,只需要知道 JDBC Adapter 的每個操作能夠支援哪些錯誤,並且根據返回的錯誤資料進行相應處理即可。執行時,如果 JDBC Adapter 捕獲的異常資訊為一個業務邏輯異常,通過錯誤繫結機制的處理,將會返回對應的錯誤資料,呼叫者只需處理該錯誤資料物件即可。見下圖顯示的是返回的錯誤資料:


圖 4. 業務邏輯異常處理結果
圖 4. 業務邏輯異常處理結果

如果執行時丟擲的異常資訊不是業務邏輯錯誤的話, Adapter 會直接丟擲相應的異常資訊,而不是錯誤資料物件。見下圖的處理結果:


圖 5. 一般異常處理結果
圖 5. 一般異常處理結果

結束語

本文首先介紹了錯誤繫結的原理,並介紹了 WebSphere Adapter 所支援的錯誤繫結及其使用場景。最後通過 2 個例子展現了錯誤繫結在處理業務邏輯異常與執行時異常時的區別。通過本文的介紹,讀者能夠在實際的應用開發中理解錯誤繫結,並能夠靈活應用這些錯誤繫結。

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

相關文章