開發簡式交易式批次應用程式

您可以使用批次工作控制器和 Enterprise JavaBeans (EJB) 資料串流、指令行或 Apache ANT 工具來撰寫簡式批次應用程式。

關於這項作業

避免麻煩: 如果批次步驟使用批次資料串流 (BDS) ,且其資料位於已部署批次應用程式之應用程式伺服器的檔案系統本端,則必須遵循某些步驟來支援工作重新啟動實務範例。 如果將這類批次應用程式部署至可以在多部機器上執行的應用程式伺服器,則不保證最初執行批次工作的機器會接受重新啟動要求。 當批次應用程式部署至叢集時,如果針對此類應用程式執行的批次工作被取消然後重新啟動,則會發生此情況。 在此實務範例中,部署可能會將重新啟動要求傳送至在不同機器上執行的應用程式伺服器。 因此,在需要檔案型親緣性的情況下,您可以套用下列解決方案來支援工作重新啟動實務範例:
  • 請確定資料同樣適用於可啟動批次應用程式的每一部機器。 在此範例中使用網路檔案系統。 此動作可能會降低應用程式的效能。
  • 將應用程式部署在只能在本端資料所在的機器上執行的應用程式伺服器上。 請將應用程式部署到只有一個成員節點的節點群組中的叢集,以完成這個動作。
避免麻煩: 批次應用程式開發者必須確保在批次步驟回呼方法中完成的交易式工作繼承由 網格端點啟動的廣域交易。 此動作可確保在批次步驟下執行的工作僅在每個檢查點確定,並在步驟失敗時回復。

為了列印方便,部分指令分成多行。

程序

  • 使用批次工作控制器和 EJB 資料串流來建立批次工作。
    1. 建立批次工作步驟。
      1. 建立實作 com.ibm.websphere.BatchJobStepInterface 介面的 Java™ 類別。
      2. 實作商業邏輯。

        如果您的步驟有一個輸入和一個輸出串流,您可以選擇使用 GenericXDBatch步驟的「一般」批次步驟。

    2. 建立批次資料串流。
      1. 建立實作 com.ibm.websphere.batch.BatchDataStream介面的 Java 類別。

        從商業邏輯存取批次資料串流,例如,透過呼叫 BatchDataStreamMgr 並使用 jobID 和 stepID,從批次工作步驟存取批次資料串流。 使用索引鍵 BatchConstants從 Step Bean 內容清單中擷取 JobID 和 stepID 。JOB_ID 和 BatchConstants.STEP_ID。

      2. 對映 BatchConstants。JOB_ID 至 com.ibm.websphere.batch.JobID ,並將 BatchConstants.STEP_ID 對映至 com.ibm.websphere.batch.StepID。

        您應該已具有 BatchConstants 類別的存取權。

        批次資料串流架構提供數個現成可用的型樣,以使用不同類型的資料串流,例如檔案和資料庫。 若要使用批次資料串流架構,請完成下列步驟。

        1. 識別您要用來操作的資料串流類型,例如 TextFile、 ByteFile、 JDBC或 z/OS® 串流。
        2. 識別您是從串流讀取還是寫入串流。
        3. 請參閱批次資料串流架構和型樣中的表格。 從支援類別直欄中選取符合資料串流類型及作業的類別。 例如,如果您要從文字檔讀取資料,請選取 TextFileReader。
        4. 實作型樣名稱直欄中列出的介面,其對應於您在前一個步驟中選取的支援類別。 支援類別會處理與串流和批次程式設計模型相關的所有書籍保留活動。 實作類別著重於串流處理邏輯。
        5. 在 xJCL中宣告支援類別和實作類別。
        6. 針對步驟中所需的每一個資料串流,重複此程序。
    3. 選用: 取得工作步驟環境定義。
      JobStepContext ctx= JobStepContextMgr.getContext();
      JobStepContextMgr 服務類別可讓批次工作步驟取得其 JobStepContext 物件的參照。 工作步驟環境定義提供下列功能:
      • 存取可唯一識別執行現行批次工作步驟之環境定義的資訊,例如工作 ID
      • 在批次工作步驟的生命期間,可在批次程式設計架構方法之間傳遞應用程式特定資訊的暫時使用者資料區
      • 可跨步驟傳遞應用程式特定資訊的持續性使用者資料區

      您可以使用 PersistentMap Helper 類別,在工作步驟環境定義的持續使用者資料區域中簡化基本類型的儲存,例如布林和倍精準數。

    4. 在 xJCL中定義批次資料串流。
      <batch-data-streams>	 
         <bds> 	
      <logical-name>inputStream</logical-name>  	
      <props>  	    
           <prop name="PATTERN_IMPL_CLASS" value="MyBDSStreamImplementationClass"/>
      <prop name="file.encoding" value="8859_1"/>  
           <prop name="FILENAME" value="${inputDataStream}" />
           <prop name="PROCESS_HEADER" value="true"/>  
           <prop name="AppendJobIdToFileName" value="true"/> </props> 
      <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.FileByteReader
      </impl-class> 
      </bds>
      PATTERN_IMPL_CLASS 類別表示 BDS 架構型樣的使用者實作,而 impl-class 內容表示支援類別。
    5. 選用項目: 啟用跳過層次處理。

      使用跳過記錄處理來跳過交易式批次工作中的讀取及寫入記錄錯誤。 在 xJCL中指定跳過記錄原則。 如需進一步資訊,請閱讀有關跳過記錄處理的主題。

    6. 選用項目: 啟用重試步驟處理。

      當 processJobStep 方法在交易式批次工作中發現錯誤時,請使用重試步驟處理程序來重試工作步驟。 在 xJCL中指定重試步驟原則。 如需進一步資訊,請閱讀有關重試步驟處理的主題。

    7. 選用項目: 配置交易模式。

      使用交易模式來定義是在廣域交易模式還是區域交易模式中呼叫工作相關構件。 如需進一步資訊,請閱讀關於可配置交易模式的主題。

    8. 選用項目: 提供工作接聽器。

      提供 com.ibm.websphere.batch.listener.JobListener 介面的實作,以新增其他起始設定及清除工作和步驟。 使用工作層次接聽器元素,在 xJCL 中指定工作接聽器。

      在呼叫任何使用者構件之前,會先呼叫工作接聽器 beforeJob() 方法。 在呼叫最後一個使用者構件之後,會呼叫工作接聽器 afterJob() 方法。 在任何步驟相關使用者構件之前,都會呼叫工作接聽器 beforeStep() 方法。 會呼叫工作接聽器 afterStep() 方法作為最後一個步驟相關的使用者構件。 每次呼叫工作接聽器時,都會將訊息記載至工作日誌。

    9. 宣告批次工作控制器。
      1. 將 Stateless Session Bean 新增至部署描述子,並指向 產品 提供的實作類別。 如果要這麼做,請指定 com.ibm.ws.batch.BatchJobControllerBean 作為 Bean 類別。 每個批次應用程式只執行一次此規格。
      2. 使用 com.ibm.ws.batch.BatchJobControllerHome 代表遠端 Home 介面類別,使用 com.ibm.ws.batch.BatchJobController 代表遠端介面類別。
    10. 配置 EJB 部署描述子。
      1. 將 Controller Bean 上的資源參照配置成 commonj.work.WorkManager類型的預設 WorkManager wm/BatchWorkManager。
      避免麻煩: 您必須在批次應用程式的 Enterprise JavaBeans (EJB) 部署描述子中宣告批次控制器 Bean 的部署描述子。 每個批次應用程式只能定義一個控制器 Bean。
  • 使用指令行建立批次工作。
    1. 建立批次工作步驟。
      1. 建立 Java 類別來實作 com.ibm.websphere.BatchJobStepInterface 介面。
      2. 實作商業邏輯。

        如果您的步驟只有一個輸入及一個輸出串流,則您可以選擇使用 GenericXDBatch步驟的「一般」批次步驟。

    2. 建立批次資料串流。
      1. 建立實作 com.ibm.websphere.batch.BatchDataStream介面的 Java 類別。

        從商業邏輯存取批次資料串流,例如,透過呼叫 BatchDataStreamMgr 並使用 jobID 和 stepID,從批次工作步驟存取批次資料串流。 使用索引鍵 BatchConstants從 Step Bean 內容清單中擷取 JobID 和 stepID 。JOB_ID 和 BatchConstants.STEP_ID。

      2. 對映 BatchConstants。JOB_ID 至 com.ibm.websphere.batch.JobID ,並將 BatchConstants.STEP_ID 對映至 com.ibm.websphere.batch.StepID。

        您應該已具有 BatchConstants 類別的存取權。

        批次資料串流架構提供數個現成可用的型樣,以使用不同類型的資料串流,例如檔案和資料庫。 若要使用批次資料串流架構,請完成下列步驟。

        1. 識別您要用來操作的資料串流類型,例如 TextFile、 ByteFile、 JDBC或 z/OS 串流。
        2. 識別您是從串流讀取還是寫入串流。
        3. 請參閱批次資料串流架構和型樣中的表格。 從支援類別直欄中選取符合資料串流類型及作業的類別。 例如,如果您要從文字檔讀取資料,請選擇 TextFileReader。
        4. 實作型樣名稱直欄中列出的介面,其對應於您在前一個步驟中選取的支援類別。 支援類別會處理與串流和批次程式設計模型相關的所有書籍保留活動。 實作類別著重於串流處理邏輯。
        5. 在 xJCL中宣告支援類別和實作類別。
        6. 針對步驟中所需的每一個資料串流,重複此程序。
    3. 選用: 取得工作步驟環境定義。
      JobStepContext ctx= JobStepContextMgr.getContext();
      JobStepContextMgr 服務類別可讓批次工作步驟取得其 JobStepContext 物件的參照。 工作步驟環境定義提供下列功能:
      • 存取可唯一識別執行現行批次工作步驟之環境定義的資訊,例如工作 ID
      • 在批次工作步驟的生命期間,可在批次程式設計架構方法之間傳遞應用程式特定資訊的暫時使用者資料區
      • 可跨步驟傳遞應用程式特定資訊的持續性使用者資料區

      您可以使用 PersistentMap Helper 類別,在工作步驟環境定義的持續使用者資料區域中簡化基本類型的儲存,例如布林和倍精準數。

    4. 開啟命令提示字元,並確定 Java 位於路徑上。
    5. 發出下列指令,全部在單行上。
      [AIX Solaris HP-UX Linux Windows][IBM i]
      java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar 
      com.ibm.ws.batch.packager.WSBatchPackager
      	 -appname=<Application_Name>
      	 -jarfile=<jarfile containing the POJO batch steps>
      	 -earfile=<name of the output EAR file without the .ear extension>
      	 [-utilityjars=<semicolon separated list of utility jars>]
      	 [-debug]
      	 [-gridJob]
      例如,若為批次工作,請發出
      java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar 
      com.ibm.ws.batch.packager.WSBatchPackager
      	 -appname=XDCGIVT
      	 -jarfile=XDCGIVTEJBs.jar
      	 -earfile=XDCGIVT
      [z/OS]
      java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar 
      com.ibm.ws.batch.packager.WSBatchPackager
       -Dfile.encoding=ISO8859-1
      	 -appname=<Application_Name>
      	 -jarfile=<jarfile containing the POJO batch steps>
      	 -earfile=<name of the output EAR file without the .ear extension>
      	 [-utilityjars=<semicolon separated list of utility jars>]
      	 [-debug]
      	 [-gridJob]
      例如,若為批次工作,請發出
      java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar 
      com.ibm.ws.batch.packager.WSBatchPackager
       -Dfile.encoding=ISO8859-1	 
       -appname=XDCGIVT
      	 -jarfile=XDCGIVTEJBs.jar
      	 -earfile=XDCGIVT
      附註: 如果不包含 -Dfile.encoding=ISO8859-1,則字碼頁差異會產生無效的 EAR 和 Enterprise JavaBeans (EJB) Java 保存檔 (JAR) 描述子。
    6. 包裝批次應用程式。

      請使用下列其中一種方法。

      • 使用 WSBatchPackager Script 來包裝應用程式。
        [AIX Solaris HP-UX Linux Windows]
        <WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh
        		 		 -appname=<application_name>
        		 		 -jarfile=<jar_file_containing_POJO_step_classes>
        		 		 -earfile=<output_ear_file_name>
        		 		 [-utilityjars=<semicolon_separated_utility_jars>]
        		 		 [-nonxadsjndiname=<non-xa_datasource_JNDI_name_for_CursorHoldableJDBCReader>;<non-XA_datasource_JNDI_name_2>;...]
        		 		 [-debug]
        例如, issue
        ./WSBatchPackager.sh -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
        [z/OS]
        <WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh
                 -Dfile.encoding=ISO8859-1
        		 		 -appname=<application_name>
        		 		 -jarfile=<jar_file_containing_POJO_step_classes>
        		 		 -earfile=<output_ear_file_name>
        		 		 [-utilityjars=<semicolon_separated_utility_jars>]
        		 		 [-nonxadsjndiname=<non-xa_datasource_JNDI_name_for_CursorHoldableJDBCReader>;<non-XA_datasource_JNDI_name_2>;...]
        		 		 [-debug]
        例如, issue
        ./WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar
         -nonxadsjndiname=jdbc/ivtnonxa
        附註: 如果不包含 -Dfile.encoding=ISO8859-1,則字碼頁差異會產生無效的 EAR 和 Enterprise JavaBeans (EJB) Java 保存檔 (JAR) 描述子。
      • 使用 java 指令包裝應用程式。

        開啟命令提示字元,並確定 java 位於路徑上。

  • 使用 ANT 建立批次工作
    1. 建立批次工作步驟。
      1. 建立 Java 類別來實作 com.ibm.websphere.BatchJobStepInterface 介面。
      2. 實作商業邏輯。

        如果您的步驟只有一個輸入及一個輸出串流,則您可以選擇使用 GenericXDBatch步驟的「一般」批次步驟。

    2. 建立批次資料串流。
      1. 建立實作 com.ibm.websphere.batch.BatchDataStream介面的 Java 類別。

        從商業邏輯存取批次資料串流,例如,透過呼叫 BatchDataStreamMgr 並使用 jobID 和 stepID,從批次工作步驟存取批次資料串流。 使用索引鍵 BatchConstants從 Step Bean 內容清單中擷取 JobID 和 stepID 。JOB_ID 和 BatchConstants.STEP_ID。

      2. 對映 BatchConstants。JOB_ID 至 com.ibm.websphere.batch.JobID ,並將 BatchConstants.STEP_ID 對映至 com.ibm.websphere.batch.StepID。

        您應該已具有 BatchConstants 類別的存取權。

        批次資料串流架構提供數個現成可用的型樣,以使用不同類型的資料串流,例如檔案和資料庫。 若要使用批次資料串流架構,請完成下列步驟。

        1. 識別您要用來操作的資料串流類型,例如 TextFile、 ByteFile、 JDBC或 z/OS 串流。
        2. 識別您是從串流讀取還是寫入串流。
        3. 請參閱批次資料串流架構和型樣中的表格。 從支援類別直欄中選取符合資料串流類型及作業的類別。 例如,如果您要從文字檔讀取資料,請選取 TextFileReader。
        4. 實作型樣名稱直欄中列出的介面,其對應於您在前一個步驟中選取的支援類別。 支援類別會處理與串流和批次程式設計模型相關的所有書籍保留活動。 實作類別著重於串流處理邏輯。
        5. 在 xJCL中宣告支援類別和實作類別。
        6. 針對步驟中所需的每一個資料串流,重複此程序。
    3. 選用: 取得工作步驟環境定義。
      JobStepContext ctx= JobStepContextMgr.getContext();
      JobStepContextMgr 服務類別可讓批次工作步驟取得其 JobStepContext 物件的參照。 工作步驟環境定義提供下列功能:
      • 存取可唯一識別執行現行批次工作步驟之環境定義的資訊,例如工作 ID
      • 在批次工作步驟的生命期間,可在批次程式設計架構方法之間傳遞應用程式特定資訊的暫時使用者資料區
      • 可跨步驟傳遞應用程式特定資訊的持續性使用者資料區

      您可以使用 PersistentMap Helper 類別,在工作步驟環境定義的持續使用者資料區域中簡化基本類型的儲存,例如布林和倍精準數。

    4. 若為批次工作,請確定 com.ibm.ws.batch.runtime.jar 檔位於類別路徑上。
    5. 宣告作業。
      請使用下列指令來宣告作業:
      <taskdef name="pgcpackager" classname="com.ibm.ws.batch.packager.PGCPackager"
      		classpath="${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar" />
    6. 在應用程式中編譯 Java 檔之後,請呼叫 pgcpackager 作業。
      <pgcpackager appname="<appname>" earFile="<location name of EAR file to generate>" 
      jarfile="location of the POJO jar file"/>

結果

您已使用批次工作控制器和 Enterprise JavaBeans (EJB) 資料串流、指令行或 ANT 工具來開發簡式交易式批次應用程式。

下一步

安裝密集運算的應用程式,並配置 WebSphere® 網格端點。