程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> WebSphere >> WebSphere Application Server中現代化的基於 Java 的批處理(三)

WebSphere Application Server中現代化的基於 Java 的批處理(三)

編輯:WebSphere

企業批處理

簡介

IBM WebSphere Application Server V8 為批處理添加了一個新容器,為基於 Java EE 的批處理應用程序的執行提供了一個環境。這個新的批容器提供了全面的功能,使它非常適合用作企業批處理基礎架構提供程序。WebSphere Application Server V7 中提供的 Modern Batch 功能包開了一個好頭,提供了一致的編程模型和工具,但不包含企業環境中需要的高級批處理功能。WebSphere Application Server V8.5 填補了這些空白,提供了:

整個企業基礎架構中的批量負載的並行處理。企業應用服務器環境由多個服務器組成,它們協同提供一個高性能且高度可用的基礎架構。簡單的批處理在單個服務器上運行,所以它無法最優地利用可用的應用服務器基礎架構。WebSphere Application Server 的 Modern Batch 功能提供了一個並行作業管理器,支持容器管理的並行處理,將批處理作業分攤到各種服務器,從而提高效率。從批次的角度講,以 “一個作業” 的形式運行作業提供了操作控制能力,在內部將任務分攤到各個服務器可確保最優地利用硬件資源,同時減少了完成任務所花的時間。

跳過記錄處理支持批處理程序在處理期間省略 “壞” 記錄。此功能在處理中不可或缺;壞數據可能存在於真實場景中,由於一些壞記錄而導致整個批次失敗可能在整個批處理程序計劃中產生連鎖反應。一個批次失敗還會導致在執行任何進一步處理之前不得不進行手動干預。在大部分場景中,更可取的操作是為應用程序記錄事故,在跳過 “壞” 消息後繼續處理 “好” 記錄。

重試步驟處理可用於重新運行同一次作業運行中失敗的作業步驟。這對處理流程作業步驟中的短暫異常很有用。如果已經啟用了重試步驟處理,並在執行一個作業步驟期間發生了異常,那麼作業步驟將會結束,所有資源都會返回到啟動該作業步驟時的狀態。然後再次嘗試執行此作業步驟。

與各種企業計劃程序的集成支持,比如 IBM Tivoli Workload Scheduler。

COBOL 支持,使您能夠在 WebSphere 批處理應用程序中重用 COBOL 模塊。

本文將探討其中一些重要功能,這使得批處理開發人員能夠將精力集中於解決業務問題上,無需構建一個自定義批處理基礎架構。

技術概念

在介紹實例實現之前,您需要知道與這些關鍵功能相關的一些細節。

跳過記錄處理

跳過記錄處理功能可在讀取或寫入時使用。該功能是為一個批處理數據流定義的,需要以下這些額外的組成部分:

xJCL 屬性

com.ibm.batch.bds.skip.count:此屬性的一個非零值告訴批容器跳過 “壞” 記錄。該數量指定可跳過的記錄數,跳過這些記錄後處理將中斷。

com.ibm.batch.bds.skip.include.exception.class.<n>:“壞” 記錄會生成異常。此屬性用於定義可跳過的異常類。

com.ibm.batch.bds.skip.exclude.exception.class.<n>:用於定義無法跳過的異常類的名稱。請注意,此屬性和上一個屬性 com.ibm.batch.bds.skip.include.exception.class.<n> 是互斥的,不應一起定義。

跳過監聽器:這些監聽器用於在每次跳過一個記錄時觸發操作。

記錄指標:跳過的記錄數量和記錄處理速率由批處理框架保存,它還可用於報告有關批處理作業執行的指標。

在這裡提供的練習中,您將在從輸入文件讀取數據時實現跳過記錄處理。圖 1 給出了在讀取時執行跳過記錄處理的簡化流程圖。

圖 1. 跳過記錄處理流(讀取時)
圖 1. 跳過記錄處理流(讀取時)

重試步驟處理

重試步驟處理功能是為一個擁有自己的重試步驟策略配置的作業步驟定義的。可通過為 xJCL 中的 com.ibm.batch.step.retry.count 作業步驟屬性指定一個非零值來啟用重試步驟處理。

重試步驟處理需要以下額外的組成部分:

xJCL 屬性

com.ibm.batch.step.retry.count:此屬性的非零值告訴批容器在發生失敗時重試該作業步驟。

com.ibm.batch.step.retry.delay.time:此值指定在再次嘗試該步驟前要等待的毫秒數。

com.ibm.batch.step.retry.include.exception.class.<n>:此屬性用於定義在一個步驟失敗時可再次嘗試的異常。

com.ibm.batch.step.retry.exclude.exception.class.<n>:用於定義當某個步驟失敗時哪些異常不能再次嘗試。請注意,此屬性和前一個屬性 com.ibm.batch.step.retry.include.exception.class.<n> 是互斥的,不應一起定義。

重試監聽器

可向 JobStepContext 方法注冊重試監聽器,以監聽應再次嘗試的異常。只要出現可再次嘗試的異常,重試監聽器就會獲得控制權,該步驟會被再次嘗試。

並行作業管理

批容器通過 xJCL 的 run 屬性確定作業將以並行模式運行。批容器的並行作業管理器 (PJM) 組件用於創建和管理下級作業。PJM 使用了以下 API:

Parameterizer:用於將作業分解為下級作業,使您能夠向下級作業 xJCL 添加一個可用於對工作負載進行分區的新屬性。這可確保下級作業在不同的記錄上工作。

LogicalTX.Synchronization:用於在並行作業的生命周期內控制作業。

SubJobCollector:在各個檢查點上收集各個下級作業的狀態信息。

SubJobAnalyzer:用於基於來自 SubJobCollector 的數據確定作業的總體返回代碼。

該編程模型的剩余部分類似於事務作業編程模型,而且使用了輸入讀取器、批處理器和輸出寫入器。

圖 2 描繪了如何使用並行作業管理器和計劃程序跨服務器並行地運行作業。

圖 2. 使用 WebSphere Application Server 進行並行作業管理
圖 2. 使用 WebSphere Application Server 進行並行作業管理

在這樣的背景下,您將創建一個支持跳過記錄處理和並行作業處理的批處理作業。

業務場景樣例

任何逼真的場景可能涉及到記錄數據的處理,但為了將關注點保留在 Modern Batch 功能上,這裡提供的簡化示例不會執行任何數據處理。

我們將考慮一種簡單情況,在這種情況下,您需要一個批處理程序,它從一個文件掃描明文形式的記錄數據,然後將這些記錄插入到數據庫中。

您的批處理程序應該:

允許設置中間檢查點。

將處理拆分得更小的部件,並在多個服務器上並發運行它們,以便利用可用的硬件並最大限度縮短批次運行時間。

在不會影響處理的情況下跳過 “不可行的” 記錄,無論是在讀取時還是寫入時。

如果獲得一個瞬態錯誤,請重試處理。

樣例輸入文件(已包含在本文中)中的記錄包含交易 ID、客戶 ID 和客戶為購買的一個商品或服務支付的金額。所有數據值都是整數,使用 “|” 分開。出於本示例的用途,批處理程序應滿足以下規則:

如果輸入交易 ID 不是整數,或者如果它大於 20000,則跳過記錄。

如果遇到超過 5 條的壞記錄,批處理程序將終止。

輸出數據對客戶 ID 長度進行了限制,客戶 ID 長度不得超過 30 個字符。

程序應檢查是否存在鎖文件。如果不存在該文件,那麼作業處理應在 30 秒後重試第二次。

您將開發一個滿足所有上述目標的批處理程序。

此練習假設以下預備軟件已安裝且可用:

IBM WebSphere Application Server V8.5(或更高版本)Network Deployment

IBM Rational Application Developer 8.5(或更高版本)

IBM DB2 9(或更高版本)

執行以下為該練習創建環境的步驟:

為作業計劃程序和 DB2 上的網格端點創建一個名為 LRSCHED 的數據庫。在部署管理器的管理控制台中,在單元級別上為此數據庫創建數據源。(請參閱 WebSphere Application Server V8.5 信息中心,並搜索主題 “創建作業計劃程序和網格端點數據庫”,了解有關的更多信息。)

使用 WebSphere Customization Toolbox 為部署管理器和作業計劃程序創建一個配置文件。在 Environment Selection 面板上,選擇 Cell(部署管理器和一個連鎖的應用服務器)選項來創建一個部署管理器和應用服務器 server1,這個服務器將用作作業計劃程序。(為了使配置保持簡單,不要在任何服務器上啟用安全性。)

啟動部署管理器和應用服務器 server1 的節點代理。

使用 WebSphere Customization Toolbox 為網格端點創建一個配置文件。在 Environment Selection 屏幕上,選擇 Custom 選項並提供在第 2 步中創建的部署管理器的詳細信息,以確保聯合了此配置文件。

在自定義配置文件中創建一個集群,然後向此集群添加兩個服務器 server2 和 server3。啟動此配置文件的節點代理。

為 server1 上的作業計劃程序配置一個 DB2 數據源。請在 WebSphere Application Server V8.5 信息中心中搜索主題 “配置作業計劃程序”。

配置網格端點,以便它們使用 DB2 數據源。請在 WebSphere Application Server V8.5 信息中心中搜索主題 “配置 WebSphere 網格端點”。

從部署管理器管理控制台啟動 server1、server2 和 server3。

創建數據庫 PAYMENTS,用它來存儲來自某個文件的支付數據。該命令可從 create_database 文件(下載材料中已提供)引用。

上述配置將得到如圖 3 所示的布局。

圖 3. 用於示例的基礎架構布局
圖 3. 用於示例的基礎架構布局

構建批處理程序

與在本系列的 第 2 部分 中一樣,您將使用 Rational Application Developer 創建一個批處理項目,並為其添加一個批處理作業:

使用 Create a new batch project 向導開發示例作業。在執行向導步驟的過程中,為下面相應的對話框中列出的字段和屬性輸入或選擇值。

輸入有關新批處理作業的信息,如圖 4 所示:

Batch Project = dwSamplePartThree

Job Name = SkipAndParallelJob


圖 4. 創建批處理作業
圖 4. 創建批處理作業

單擊 Next。

輸入作業步驟詳細信息,如圖 5 所示:

Name = SkipAndParallelStep

Pattern = Custom

Implementation Class =                              com.ibm.dw.payment.batch.processor.PaymentJobStep.

Checkpoint Algorithm = chkpt
                         Pattern = Record based
                          TransactionTimeOut=120
                         recordcount = ${checkpoint}

Result Algorithm = jobsum
                         Pattern = Job Sum

添加以下屬性:

屬性 = BATCHRECORDPROCESSOR,值 = com.ibm.dw.payment.batch.processer.PaymentProcessor

屬性 = max_record_count,值 = ${numberRecords}

屬性 = EnablePerformanceMeasurement,值 = true

屬性 = debug,值 = ${debugEnabled}


圖 5. 創建批處理作業步驟
圖 5. 創建批處理作業步驟

                 單擊 Next。

提供輸入數據詳細信息,如圖 6 所示:

Name = inputStream

Select Pattern = Text File Reader

Implementation Class =                              com.ibm.dw.payment.batch.bds.PaymentFileReader

FILENAME = ${inputPaymentFile


圖 6. 提供輸入的詳細信息
圖 6. 提供輸入的詳細信息

單擊 Next。

提供輸出詳細信息,如圖 7 所示:

Name = outputStream

Select Pattern = JDBC Writer

Implementation Class =                              com.ibm.dw.payment.batch.bds.PaymentDBWriter

添加以下可選的屬性:

屬性 = ds_jndi_name,值 = jdbc/dw

屬性 = debug,值 = ${debugEnabled}

屬性 = batch_interval,值 = ${numberRecords}


圖 7. 提供輸出的詳細信息
圖 7. 提供輸出的詳細信息

                 單擊 Finish 完成使用向導創建批處理作業的步驟。

接下來,您需要添加一些替換變量。在 xJCL 編輯器中打開 xJCL 並添加以下替換屬性,如圖 8 所示:

屬性 = inputPaymentFile,值 = C:/batch/data/InputData.txt(或您保存數據文件的位置)

屬性 = numberRecord,值 = 20

屬性 = checkpoint,值 = 50

屬性 = debugEnabled,值 = false


圖 8. 添加替換變量
圖 8. 添加替換變量

在 xJCL 編輯器中打開 xJCL 並添加以下替換變量:  

屬性 = inputPaymentFile,值 = C:/batch/data/InputData.txt(或您保存數據文件的位置)

屬性 = numberRecord,值 = 20

屬性 = checkpoint,值 = 50

屬性 = debugEnabled,值 = false

要在讀取輸入文件時啟用跳過記錄處理,可將清單 1 中的代碼添加到 xJCL 的輸入批處理數據流部分中。將該代碼添加到文件中在這裡以粗體顯示的行之後。

清單 1

                        <prop name="FILENAME" value="${inputPaymentFile}" />
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error:  The previous line is longer than the max of 90 characters ---------|
<prop name="com.ibm.batch.bds.skip.count" value="5"  />
<prop name="com.ibm.batch.bds.skip.include.exception.class.1"
    value="java.lang.NumberFormatException"  />
<prop name="com.ibm.batch.bds.skip.include.exception.class.2"
value="com.ibm.dw.payment.batch.error.InvalidDataException"  />

如果出現列出的一個異常類,那麼 5 個這樣的異常都將被丟棄,正常處理將繼續進行。經過 5 次跳過後,處理將停止,表明批次已超出允許的最大跳過次數。在交易 ID 不是整數時,會發出 NumberFormatException。要執行自定義驗證,則必須拋出一個運行時異常。為此,可以添加一個 InvalidDataException,在交易 ID 大於 20,000 時會觸發該異常。

PaymentSkip Listener 類 com.ibm.dw.payment.batch.process.PaymentSkipListener 將跳過事件記錄在日志文件中。
要在將輸出寫入數據庫時啟用跳過記錄處理,可將清單 2 中的代碼添加到 xJCL 的輸出批處理數據流部分中。將該代碼添加到該文件中在這裡以粗體顯示的行之後。

清單 2

                        <prop name="ds_jndi_name" value="jdbc/dw" />
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error:  The previous line is longer than the max of 90 characters ---------|
<prop name="debug" value="${debugEnabled}" />
<prop name="com.ibm.batch.bds.skip.count" value="2"  />
<prop name="com.ibm.batch.bds.skip.include.exception.class.1"
value="com.ibm.dw.payment.batch.error.InvalidDataException"  />

如果客戶 ID 的長度大於 30,則必須拋出一個運行時異常。PaymentSkip Listener 類 com.ibm.dw.payment.batch.process.PaymentSkipListener 會將跳過事件記錄到日志文件中。

實現並行作業管理需要更多的更改。這些更改向批容器表明,作業需要在並行模式下運行,提供了並行作業管理器所需的類。將清單 3 中所示的代碼添加到作業步驟類名稱下方。

清單 3

<classname>com.ibm.dw.payment.batch.processer.PaymentJobStep</classname>
<run instances="multiple" jvm="multiple">
<props>
         <prop name="com.ibm.websphere.batch.parallel.parameterizer"
         value="com.ibm.dw.payment.batch.parallel.PaymentParameterizer" />
         <prop name="com.ibm.websphere.batch.parallel.synchronization"
         value="com.ibm.dw.payment.batch.parallel.PaymentTXSynchronization" />
         <prop name="com.ibm.websphere.batch.parallel.subjobanalyzer"
         value="com.ibm.dw.payment.batch.parallel.PaymentSubJobAnalyzer" />
         <prop name="com.ibm.websphere.batch.parallel.subjobcollector"
         value="com.ibm.dw.payment.batch.parallel.PaymentSubJobCollector" />
         <prop name="com.ibm.wsspi.batch.parallel.subjob.name"
         value="PaymentSubJob"  />
         <prop name="parallel.jobcount" value="2"  />
</props>
</run>

將清單 4 中所示的 3 個步驟級屬性添加到批處理作業的記錄處理器步驟中。這些屬性會在作業提交時由 ParallelJobManager 更改。

清單 4

<props>
<prop name="BATCHRECORDPROCESSOR"
value="com.ibm.dw.payment.batch.processer.PaymentProcessor" />
    ...
    ...
    <prop name="com.ibm.wsspi.batch.parallel.jobname"
        value="${parallel.jobname}" />
    <prop name="com.ibm.wsspi.batch.parallel.logicalTXID"
        value="${logicalTXID}" />
    <prop name="com.ibm.wsspi.batch.parallel.jobmanager"
        value="${parallel.jobmanager}" />
    <prop name="job" value="${JOB}" />
        
   </props>
   <results-ref name="jobsum" />

要添加重試功能,可添加清單 5 中所示的代碼。此代碼檢查是否存在一個鎖文件,如果不存在,則在 30 秒後重試一條記錄。

清單 5

                        <prop name="job" value="${JOB}" />
<prop name="filepath" value="C:/Shishir/check.txt" />
        <prop name="com.ibm.batch.step.retry.count" value="2"  />
        <prop name="com.ibm.batch.step.retry.delay.time" value="30000"  />
        <prop name="com.ibm.batch.step.retry.include.exception.class.1"
        value="com.ibm.dw.payment.batch.error.MissingFileException"  />

將實現類替換為本文的 下載 部分中包含的類。代碼的大部分都很簡單,讓我們更詳細地查看以下部分:  

PaymentParameterizer.java:(清單 6)基於服務器數量,支付參數化器幫助定位數據,以便可以並行處理記錄不同的服務器。對於本示例,您有兩個端點服務器,所以作業被拆分為兩部分。應該使用一個適當的策略,基於實際場景來進行參數化。

    清單 6

Properties newprops [] = new Properties[jobcount];
for ( int i=0; i<jobcount; i++) {
    newprops[i] = new Properties();
        if(i == 0 ){
            newprops[i].put("JOB", "1");
        }else{
            newprops[i].put("JOB", "2");
    }
}
parms.setSubJobProperties(newprops);
return parms;

PaymentJobStep.java:(清單 7)processJobStep 方法確保服務器基於交易 ID 為偶數還是奇數來處理記錄,這會影響到並行處理。

清單 7

if (jobNumber == 2) {
    if (Integer.parseInt(paymentRecord.get_transactionId()) % 2 == 0) {
        paymentRecord.set_jobName(getJobID());
        _outputDBBDS.write(paymentRecord);
        logger.fine("read record from inputPaymentBDS: "
        + paymentRecord + " job step id"
        + getJobID());
        _recordCountJob2++;
        }
    }
    
if (jobNumber == 1) {
    if (Integer.parseInt(paymentRecord.get_transactionId()) % 2 != 0) {
        paymentRecord.set_jobName(getJobID());
        _outputDBBDS.write(paymentRecord);
        logger.fine("read record from inputPaymentBDS: "
        + paymentRecord + " job step id"
        + getJobID());
        _recordCountJob1++;
    }
}

對數據庫運行 create_table.sql 腳本(可在 下載材料 中找到),以便創建將保存支付數據的表。

到此就完成了樣例批處理作業的開發。

運行示例

要運行示例,可使用作業管理控制台將作業控制 xJCL 文件提交給作業計劃程序。

測試重試功能

要驗證充實功能,請確保 <prop name="filepath" value="C:/Shishir/check.txt" /> 中注明的文件最初在作業運行時不存在,但在作業啟動大約 10 秒後放入它。該作業最初將由於該文件不存在而失敗,並進入重試模式,因為您啟用了重試功能。該作業正常情況下將在 30 秒後找到該文件並繼續運行。您應在日志中注意到,該批次會在 30 秒後重試(清單 8)。

清單 8

System.out: [09/12/12 21:04:22:116 EDT] com.ibm.dw.payment.batch.processor.
PaymentJobStep:caught exception in processJobStep; com.ibm.dw.payment.batch.
error.MissingFileException: file not found
file not found
CWLRB2280E: [Long Running Job Container step execution failed]
[Job SkipAndParallelJob:00237:00239] [Step SkipAndParallelStep]:
com.ibm.dw.payment.batch.error.MissingFileException: file not found
CWLRB2460I: [09/12/12 21:04:22:118 EDT]  [09/12/12 21:04:22:118 EDT]
Job [SkipAndParallelJob:00237:00239] Step [SkipAndParallelStep] is in step breakdown.
CWLRB5606I: [09/12/12 21:04:22:118 EDT] Destroying job step: SkipAndParallelStep
.................................................
CWLRB5853I: [09/12/12 21:04:52:186 EDT] Retry started for job
SkipAndParallelJob:00237:00239 step SkipAndParallelStep due to error
com.ibm.dw.payment.batch.error.MissingFileException: file not found
CWLRB1860I: [09/12/12 21:04:52:186 EDT] Dispatching Job
[SkipAndParallelJob:00237:00239] Step [SkipAndParallelStep]
CWLRB2420I: [09/12/12 21:04:52:203 EDT]  [09/12/12 21:04:52:203 EDT]
Job [SkipAndParallelJob:00237:00239] Step [SkipAndParallelStep] is in step setup.

測試跳過記錄功能

輸入數據文件擁有 10000 條記錄並包含以下錯誤:

記錄 9998 或者的客戶 ID 大於 30 個字符。
   第 9999 條記錄的事務 ID 不是一個數字。
   第 10000 條記錄的事務 ID 大於 20000。

您應注意到這些記錄被跳過了(清單 9),同樣的信息也報告到日志中(清單 10)。

清單 9

System.out: [09/12/12 21:05:03:342 EDT] record is9998|99099980000000000000000000000000|788
System.out: [09/12/12 21:05:03:342 EDT] com.ibm.dw.payment.batch.processor.
PaymentJobStep:input :processRecord
System.out: [09/12/12 21:05:03:342 EDT] com.ibm.dw.payment.batch.processor.
PaymentProcessor:record is :PaymentRecord:9998|99099980000000000000000000000000|788|null
System.err: [09/12/12 21:05:03:342 EDT] com.ibm.dw.payment.batch.error.
InvalidDataException: Cust Id length is greater than 30System.err: [09/12/12
21:05:03:342 EDT]
System.err: [09/12/12 21:05:03:342 EDT]     at com.ibm.dw.payment.batch.bds.
PaymentDBWriter.writeRecord(PaymentDBWriter.java:55)System.err: [09/12/12
21:05:03:342 EDT]
.......................
CWLRB5852I: [09/12/12 21:05:03:343 EDT] Record skipped by batch data stream
outputStream in job SkipAndParallelJob:00237:00239 step SkipAndParallelStep due to
error com.ibm.dw.payment.batch.error.InvalidDataException: Cust Id length is greater
than 30
System.out: [09/12/12 21:05:03:343 EDT] com.ibm.dw.payment.batch.processor.
PaymentJobStep:read record from inputPaymentBDS: PaymentRecord:9998|
99099980000000000000000000000000|788|SkipAndParallelJob:00237:00239 job step
idSkipAndParallelJob:00237:00239
System.out: [09/12/12 21:05:03:343 EDT] com.ibm.dw.payment.batch.processor.
PaymentJobStep:RecordMetric data for inputPayment BDS.  Number of skipped
records = 0. Records/second = 7475
System.out: [09/12/12 21:05:03:343 EDT] record is9999A|9909999|842
CWLRB5852I: [09/12/12 21:05:03:343 EDT] Record skipped by batch data stream
inputStream in job SkipAndParallelJob:00237:00239 step SkipAndParallelStep due to error
java.lang.NumberFormatException: For input string: "9999A"
System.out: [09/12/12 21:05:03:344 EDT] record is30000|99010000|542
CWLRB5852I: [09/12/12 21:05:03:344 EDT] Record skipped by batch data stream
inputStream in job SkipAndParallelJob:00237:00239 step SkipAndParallelStep due
to error com.ibm.dw.payment.batch.error.InvalidDataException: trans id is greater
than 20000
.............................

清單 10

CWLRB5854I: [09/12/12 21:05:03:420 EDT] Job Step [SkipAndParallelJob:00237:00239,
SkipAndParallelStep]: Metric = clock  Value = 00:00:11:098
CWLRB5854I: [09/12/12 21:05:03:421 EDT] Job Step [SkipAndParallelJob:00237:00239,
SkipAndParallelStep]: Metric = retry  Value = 1
CWLRB5844I: [09/12/12 21:05:03:421 EDT] Job Step Batch Data Stream
[SkipAndParallelJob:00237:00239,SkipAndParallelStep,outputStream]: Metric = skip
Value = 1
CWLRB5844I: [09/12/12 21:05:03:423 EDT] Job Step Batch Data Stream
[SkipAndParallelJob:00237:00239,SkipAndParallelStep,outputStream]: Metric = rps
Value = 8,186
CWLRB5844I: [09/12/12 21:05:03:424 EDT] Job Step Batch Data Stream
[SkipAndParallelJob:00237:00239,SkipAndParallelStep,inputStream]: Metric = skip
Value = 2
CWLRB5844I: [09/12/12 21:05:03:424 EDT] Job Step Batch Data Stream
[SkipAndParallelJob:00237:00239,SkipAndParallelStep,inputStream]: Metric = rps
Value = 7,476

已處理的記錄應插入到數據庫中。如果查詢數據據庫,您就會注意到,除 3 個 “壞” 記錄以外的所有記錄都插入到了數據庫中。圖 9 顯示了表中的記錄數量。

圖 9. 驗證數據庫中的記錄
圖 9. 驗證數據庫中的記錄

測試並行作業功能

提交後,您應該已經注意到,這裡創建了兩個下級作業並進行了行處理(圖 10)。

圖 10. 下級作業
圖 10. 下級作業

圖 4 還顯示了每個並行下級作業所處理的記錄數量。

結束語

WebSphere Application Server 的 Modern Batch 功能提供了一個健壯的企業批編程模型,使您能夠以極少的工作開發批處理程序。因為 Modern Batch 是 WebSphere Application Server 的一部分,所以可以使用與所有其他應用程序相同的平台來構建批處理基礎架構,從而支持重用應用程序、技能和工具。本文介紹了 Modern Batch 的高級功能,比如並行處理和跳過記錄處理,還使用這些功能開發了一個示例應用程序。本系列的下一期(第 4 部分)將探討批處理作業分組、與企業計劃程序的集成,以及其他高級功能。

下載

描述 名字 大小 下載方法 樣例應用程序的項目文件 1210_narain_attachment.zip 122 KB HTTP
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved