您可以將批次應用程式的許多不同作業分成一些批次步驟來執行。
批次步驟實作為本端儲存器管理的 Enterprise JavaBeans (EJB),
它將 com.ibm.websphere.batch.BatchJobStepLocalInterface 指定為批次步驟的商業介面。
BatchJobStepLocalInterface 中的回呼方法允許長時間執行的執行環境 (LREE) 在執行批次工作時執行批次步驟。
批次步驟 EJB 包含針對部分批次工作執行的批次式商業邏輯。通常,批次步驟含有從批次資料串流讀取記錄、
利用該記錄執行商業邏輯,然後繼續讀取下一筆記錄的程式碼。批次步驟 EJB 的 processJobStep 方法由 LREE 在批次迴圈
中呼叫。這個方法應包含能夠對資料批次執行的所有邏輯。
LREE 會在廣域交易下呼叫批次步驟 EJB 方法。此廣域交易由 LREE 管理。此交易的行為(如交易逾時值或交易確定間隔)
受制於與步驟所屬批次工作相關聯的核對點演算法。
以下是 BatchJobStepLocalInterface 的 LREE 回呼方法,LREE 會依列示的次序呼叫它們:
- setProperties(java.util.Properties properties) - 可讓 xJCL 中定
義的內容適用於 java.util.Properties 物件中的批次步驟。
這個方法將在廣域交易下呼叫。
- void createJobStep() - 指示步驟已起始設定。您可以在此加入起始設定邏輯,如擷取批次資料串流的控點。
這個方法將在廣域交易下呼叫。
- int processJobStep() - 由 LREE 在批次迴圈中重複呼叫,直到這個方法的回覆
碼整數指出步驟已完成處理。請在批次 API 中查看 BatchConstants,以瞭解哪些是可傳回的回覆碼。
BatchConstants.STEP_CONTINUE 回覆碼指示 LREE 應繼續在批次迴圈中呼叫這個方法。
BatchConstants.STEP_COMPLETE 回覆碼指示 LREE 步驟已完成,現在可以呼叫 destroyJobStep。
- int destroyJobStep() - 指示步驟已完成。
這個方法的整數回覆碼可完全由批次應用程式開發人員自行選擇。這個回覆碼儲存在 LREE 資料庫中,
它代表批次步驟的回覆碼。如果結果演算法與批次工作相關聯,則會傳遞這個回覆碼給它。
如果批次工作的 xJCL 中具有以回覆碼為基礎的條件式邏輯,LREE 將會使用這個回覆碼來評估該邏輯。
請注意,BatchJobStepLocalInterface 上的 getProperties() 方法目前不是由
LREE 呼叫。為了對稱及供未來使用起見,它已併入介面中。
批次開發的疑難排解
- 批次控制器 Bean 的部署描述子必須在批次應用程式的 EJB 部署描述子中宣告,
而且它必須有批次應用程式所使用步驟 EJB 的本端 EJB 參照。每一個批次應用程式只能定義一個控制器 Bean。
- 所有批次步驟方法的交易屬性都應該設為 required。
- 批次應用程式開發人員必須確定批次步驟回呼方法內完成的交易式工作繼承了 LREE 所啟動的廣域交易。
這可確保批次步驟下執行的工作只在每個核對點進行確定,以及在步驟發生失敗狀況時進行回復。
- 如果批次步驟使用批次資料串流 (BDS),而其資料是部署了批次應用程式的應用程式伺服器之
檔案系統的本端資料,請務必採取某些步驟來支援工作重新啟動實務。
如果這種批次應用程式部署到可在多部機器上執行的應用程式伺服器(例如部署到具有多個節點成
員的節點群組中存在的動態叢集),並且對這種應用程式執行的批次工作在取消後又重新啟動,
則不保證重新啟動要求會傳至原本執行此批次工作的機器。如果是部署到具有多個節點成員的節點群組中存
在的動態叢集,並且對這種應用程式執行的批次工作在取消後又重新啟動了,則不保證重新啟動要求會傳至相同的機器。
在這個情況中,長時間執行的配置可能將重新啟動要求傳送至不同機器上執行的應用程式伺服器。
因此,在需要以檔案為基礎的親緣性情況下,可套用下列解決方案來支援工作重新啟動實務:
- 確定資料可同時在能夠啟動批次應用程式的每部機器上使用。例如,透過網路檔案系統
(這可能會降低應用程式執行效能)。
- 將應用程式部署到只能存在於含有本端資料的機器之應用程式伺服器上。若要達成此目的,可將應用程式部署到只有一
個成員節點的節點群組中存在的動態叢集。