跳過記錄處理

使用跳過記錄處理來跳過交易式批次工作中的讀取及寫入記錄錯誤。 在 xJCL 中指定跳過記錄原則。

跳過記錄處理

每一個批次資料串流都有自己的跳過記錄原則配置。 您可以在 xJCL 中為 com.ibm.batch.bds.skip.count 批次資料串流內容指定非零值,以啟用跳過記錄處理。

You can refine skip record processing by using the com.ibm.batch.bds.skip.include.exception.class.<n> property to specify what record errors to skip and the com.ibm.batch.bds.skip.exclude.exception.class.<n> property to specify what record errors not to skip. 這兩個內容互斥。

批次架構會根據本端工作狀態資料庫中的每個步驟,來追蹤跳過記錄處理。 僅針對來自批次架構的批次資料串流執行此追蹤。 在步驟處理結束時,會將訊息寫入工作日誌。 此訊息指出每個批次資料串流跳過的記錄數,以及每個批次資料串流每秒的記錄數。 每秒記錄數可能不符合批次資料串流所處理的記錄數。 如果處理的實際記錄數小於秒,則會從處理實際記錄數所花費的時間量推斷每秒記錄數的值。

下列清單包含後面接著說明的每一個跳過記錄內容。

com.ibm.batch.bds.skip.count

指定由於讀取或寫入記錄時發生錯誤,批次資料串流可以跳過的記錄數。 達到此限制之後,批次資料串流不會跳過任何其他讀取或寫入錯誤。

跳過輸入記錄時,批次資料串流會移至下一筆記錄並提取它。 在順利讀取記錄、發生不涉及跳過記錄的錯誤或達到跳過限制之前,控制不會回到呼叫端。

跳過輸出記錄時,批次資料串流會正常返回給呼叫者。

在達到跳過限制之後,如果批次資料串流發生讀取或寫入錯誤,則會將讀取或寫入異常狀況傳回給呼叫程式。 未跳過記錄。

如果您向批次資料串流登錄跳過接聽器,則跳過接聽器會接收每筆跳過記錄的控制權。 對於跳過的讀取,會呼叫 SkipListener.onSkippedRead (Throwable t) 方法。 在提取下一筆記錄之前,跳過接聽器會先接收控制。 對於跳過的寫入,會呼叫 SkipListener.onSkippedWrite (Object record , Throwable t) 方法。 跳過的記錄會在第一個引數中傳遞。 在批次資料串流傳回給呼叫者之前,跳過接聽器會接收控制權。

批次資料串流的執行中跳過計數會在每個檢查點持續保存。 當工作步驟再次啟動時,會從前次確定的檢查點還原跳過計數。

依預設會停用跳過記錄處理。

任何延伸 com.ibm.websphere.batch.devframework.datastreams.bdsadapter 的批次資料串流實作。AbstractBatchDataInputStreamRecordMetrics 類別或 com.ibm.websphere.batch.devframework.datastreams.bdsadapter。AbstractBatchDataOutputStreamRecordMetrics 類別會自動繼承 skip-record 支援。 在 com.ibm.websphere.batch.devframework.datastreams 套件下定義的所有批次資料串流都包含 skip-record 支援。

com.ibm.batch.bds.skip.include.exception.class.<n>

指定在讀取或寫入記錄時要跳過之批次資料串流的異常狀況清單。 批次資料串流只會跳過清單中的異常狀況。

The <n> variable is an integer. 從 1 開始變數,並針對每一個異常狀況增加一個變數。

如果您未指定任何異常狀況,則預設值是所有異常狀況都包含在要跳過的讀取/寫出器錯誤清單中。

下列範例使用內容:

<batch-data-streams>
   <bds>
     <logical-name>inputBDS</logical-name>
     <props>
       <prop name="PATTERN_IMPL_CLASS" value="com.ibm.ws.batch.sample.bds.WCGSampleBDS"/>
       <prop name="file.encoding" value="8859_1"/>
       <prop name="FILENAME" value="/tmp/input.txt" />
       <prop name="com.ibm.batch.bds.skip.count" value="5" />
       <prop name="com.ibm.batch.bds.skip.include.exception.class.1"
             value="java.io.IOException" />
       <prop name="com.ibm.batch.bds.skip.include.exception.class.2"
             value="com.xyz.bds.error.BadDataException" />
     </props>
     <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileReader</impl-class>
   </bds>
</batch-data-streams>

批次資料串流會跳過輸入/輸出異常狀況及不正確資料異常狀況的記錄。

com.ibm.batch.bds.skip.exclude.exception.class.<n>

指定在讀取或寫入記錄時無法跳過的異常狀況清單。

The <n> variable is an integer. 從 1 開始變數,並針對每一個異常狀況增加一個變數。

如果您未指定任何異常狀況,則預設值是不會從要跳過的讀寫記錄錯誤清單中排除任何記錄。

下列範例使用內容:

<batch-data-streams>
   <bds>
     <logical-name>inputBDS</logical-name>
     <props>
       <prop name="PATTERN_IMPL_CLASS" value="com.ibm.ws.batch.sample.bds.WCGSampleBDS"/>
       <prop name="file.encoding" value="8859_1"/>
       <prop name="FILENAME" value="/tmp/input.txt" />
       <prop name="com.ibm.batch.bds.skip.count" value="3" />
       <prop name="com.ibm.batch.bds.skip.exclude.exception.class.1"
             value="java.io.FileNotFoundException" />
     </props>
     <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileReader</impl-class>
   </bds>
</batch-data-streams>

批次資料串流不會跳過「找不到檔案」異常狀況的記錄。

跳過接聽器

您可以向批次資料串流登錄跳過接聽器,以接聽跳過的記錄。 每當跳過記錄時,跳過接聽器都會接收控制。

下列程式碼範例會登錄跳過接聽器。
AbstractBatchDataInputStream _inputBDS =
   (AbstractBatchDataInputStream)BatchDataStreamMgr.getBatchDataStream("inputBDS", getJobStepID());
((AbstractBatchDataStreamRecordMetrics)_inputBDS).addSkipListener(new MySkipListener());