开发简单事务批处理应用程序
可使用批处理作业控制器和 Enterprise JavaBeans (EJB) 数据流、命令行或 Apache ANT 工具来编写简单的批处理应用程序。
关于此任务

- 确保数据以相同方式提供给可启动批处理应用程序的每台机器使用。对此示例使用网络文件系统。此操作可能会降低应用程序的性能。
- 在应用程序服务器上部署只能在具有本地数据的机器上运行的应用程序。通过将该应用程序部署至只有一个成员的节点组的集群来完成此操作。

为了打印方便,这些命令被拆分为多行。
过程
- 使用批处理作业控制器和 EJB 数据流来创建批处理作业。
- 创建批处理作业步骤。
- 创建用于实现 com.ibm.websphere.BatchJobStepInterface 接口的 Java™ 类。
- 实现业务逻辑。
如果您的步骤有一个输入流和一个输出流,那么您可选择使用 GenericXDBatchStep 的通用批处理步骤。
- 创建批处理数据流。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
批处理数据流是通过业务逻辑访问的,例如,通过批处理作业步骤(通过带 jobID 和 stepID 调用 BatchDataStreamMgr)。JobID 和 stepID 是使用键 BatchConstants.JOB_ID 和 BatchConstants.STEP_ID 从步骤 bean 属性列表中检索的。
- 将 BatchConstants.JOB_ID 映射至 com.ibm.websphere.batch.JobID,并将 BatchConstants.STEP_ID 映射至 com.ibm.websphere.batch.StepID。
您应该已经访问了 BatchConstants 类。
批处理数据流框架提供了一些现成的模式来处理不同类型的数据流,例如,文件和数据库。要使用批处理数据流框架,请完成以下步骤。
- 标识要对其执行操作的数据流类型,例如,TextFile、ByteFile、JDBC 或 z/OS® 流。
- 标识要从该流读取数据还是向该流写入数据。
- 请参阅批处理数据流框架和模式中的表。从支持类列中选择与数据流类型和操作相匹配的类。例如,如果要从文本文件中读取数据,请选择 TextFileReader。
- 实现模式名称列中列示的接口,该接口对应您在上一步中选择的支持类。支持类会处理与该流和批处理编程模型相关的所有内务活动。该实现类将重点放在流处理逻辑上。
- 在 xJCL 中声明支持类及您的实现类。
- 对您的步骤中所需的每个数据流重复此过程。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
- 可选: 获取作业步骤上下文。
JobStepContext ctx= JobStepContextMgr.getContext();
JobStepContextMgr 服务类允许批处理作业步骤获取对其 JobStepContext 对象的引用。该作业步骤上下文提供以下功能:- 对唯一标识运行当前批处理作业步骤的上下文的信息(例如,作业标识)的访问
- 瞬态用户数据区域,在此区域中,可在批处理作业步骤生效期间在批处理编程框架方法间传递特定于应用程序的信息
- 持久性用户数据区域,在此区域中,可在步骤间传递特定于应用程序的信息
您可以使用 PersistentMap 辅助类来简化在作业步骤上下文的持久用户数据区域中存储基本类型(例如,布尔值和双精度)的操作。
- 在 xJCL 中定义批处理数据流。
PATTERN_IMPL_CLASS 类表示 BDS 框架模式的用户实现,impl-class 属性表示支持类。<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>
- 可选: 启用跳过级别处理。
使用跳过记录处理来跳过事务批处理作业中的读写记录错误。在 xJCL 中指定跳过记录策略。请阅读有关跳过记录处理的主题以了解进一步信息。
- 可选: 启用重试步骤处理。
processJobStep 方法在事务批处理作业中遇到错误时,使用重试步骤处理来重试作业步骤。在 xJCL 中指定重试步骤策略。请阅读有关重试步骤处理的主题以了解进一步信息。
- 可选: 配置事务方式。
使用事务方式来定义是以全局事务方式还是局部事务方式来调用作业相关工件。请阅读有关可配置事务方式的主题以了解进一步信息。
- 可选: 提供作业侦听器。
提供 com.ibm.websphere.batch.listener.JobListener 接口的实现以对作业和步骤添加其他初始化和清除。在 xJCL 中使用作业级别侦听器元素来指定作业侦听器。
在调用任何用户工件之前调用作业侦听器 beforeJob() 方法。在调用最后一个用户工件之后调用作业侦听器 afterJob() 方法。在任何步骤相关用户工件之前调用作业侦听器 beforeStep() 方法。作业侦听器 afterStep() 方法作为最后一个步骤相关用户工件调用。每次调用该作业侦听器时,它都会将消息记录到作业日志中。
- 声明批处理作业控制器。
- 将无状态会话 bean 添加至部署描述符并使其指向产品提供的实现类。通过将 com.ibm.ws.batch.BatchJobControllerBean 指定为 bean 类来完成此任务。仅对每个批处理应用程序执行一次此规范。
- 对远程 home 接口类使用 com.ibm.ws.batch.BatchJobControllerHome,对远程接口类使用 com.ibm.ws.batch.BatchJobController。
- 配置 EJB 部署描述符。
- 在控制器 bean 上配置对类型为 commonj.work.WorkManager 的缺省 WorkManager wm/BatchWorkManager 的资源引用。
避免故障: 必须在批处理应用程序的 Enterprise JavaBeans (EJB) 部署描述符中声明批处理控制器 bean 的部署描述符。只能对每个批处理应用程序定义一个控制器 bean。gotcha
- 创建批处理作业步骤。
- 使用命令行创建批处理作业。
- 创建批处理作业步骤。
- 创建用于实现 com.ibm.websphere.BatchJobStepInterface 接口的 Java 类。
- 实现业务逻辑。
如果您的步骤正好有一个输入和一个输出流,那么您可选择使用 GenericXDBatchStep 的通用批处理步骤。
- 创建批处理数据流。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
批处理数据流是通过业务逻辑访问的,例如,通过批处理作业步骤(通过带 jobID 和 stepID 调用 BatchDataStreamMgr)。JobID 和 stepID 是使用键 BatchConstants.JOB_ID 和 BatchConstants.STEP_ID 从步骤 bean 属性列表中检索的。
- 将 BatchConstants.JOB_ID 映射至 com.ibm.websphere.batch.JobID,并将 BatchConstants.STEP_ID 映射至 com.ibm.websphere.batch.StepID。
您应该已经访问了 BatchConstants 类。
批处理数据流框架提供了一些现成的模式来处理不同类型的数据流,例如,文件和数据库。要使用批处理数据流框架,请完成以下步骤。
- 标识要对其执行操作的数据流类型,例如,TextFile、ByteFile、JDBC 或 z/OS 流。
- 标识要从该流读取数据还是向该流写入数据。
- 请参阅批处理数据流框架和模式中的表。从支持类列中选择与数据流类型和操作相匹配的类。例如,如果要从文本文件中读取数据,请选择 TextFileReader。
- 实现模式名称列中列示的接口,该接口对应您在上一步中选择的支持类。支持类会处理与该流和批处理编程模型相关的所有内务活动。该实现类将重点放在流处理逻辑上。
- 在 xJCL 中声明支持类及您的实现类。
- 对您的步骤中所需的每个数据流重复此过程。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
- 获取作业步骤上下文。
JobStepContext ctx= JobStepContextMgr.getContext();
JobStepContextMgr 服务类允许批处理作业步骤获取对其 JobStepContext 对象的引用。该作业步骤上下文提供以下功能:- 对唯一标识运行当前批处理作业步骤的上下文的信息(例如,作业标识)的访问
- 瞬态用户数据区域,在此区域中,可在批处理作业步骤生效期间在批处理编程框架方法间传递特定于应用程序的信息
- 持久性用户数据区域,在此区域中,可在步骤间传递特定于应用程序的信息
您可以使用 PersistentMap 辅助类来简化在作业步骤上下文的持久用户数据区域中存储基本类型(例如,布尔值和双精度)的操作。
- 打开命令提示符并确保 Java 在该路径上。
- 在单行上发出以下命令。
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
例如,对于批处理作业,发出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) 描述符。gotcha
- 打包批处理应用程序。
使用以下某种方法。
- 使用 WSBatchPackager 脚本来打包应用程序。
<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]
例如,发出./WSBatchPackager.sh -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
<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]
例如,发出./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) 描述符。gotcha
- 使用 java 命令打包应用程序。
打开命令提示符并确保 java 在该路径上。
- 使用 WSBatchPackager 脚本来打包应用程序。
- 创建批处理作业步骤。
- 使用 ANT 来创建批处理作业。
- 创建批处理作业步骤。
- 创建用于实现 com.ibm.websphere.BatchJobStepInterface 接口的 Java 类。
- 实现业务逻辑。
如果您的步骤正好有一个输入和一个输出流,那么您可选择使用 GenericXDBatchStep 的通用批处理步骤。
- 创建批处理数据流。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
批处理数据流是通过业务逻辑访问的,例如,通过批处理作业步骤(通过带 jobID 和 stepID 调用 BatchDataStreamMgr)。JobID 和 stepID 是使用键 BatchConstants.JOB_ID 和 BatchConstants.STEP_ID 从步骤 bean 属性列表中检索的。
- 将 BatchConstants.JOB_ID 映射至 com.ibm.websphere.batch.JobID,并将 BatchConstants.STEP_ID 映射至 com.ibm.websphere.batch.StepID。
您应该已经访问了 BatchConstants 类。
批处理数据流框架提供了一些现成的模式来处理不同类型的数据流,例如,文件和数据库。要使用批处理数据流框架,请完成以下步骤。
- 标识要对其执行操作的数据流类型,例如,TextFile、ByteFile、JDBC 或 z/OS 流。
- 标识要从该流读取数据还是向该流写入数据。
- 请参阅批处理数据流框架和模式中的表。从支持类列中选择与数据流类型和操作相匹配的类。例如,如果要从文本文件中读取数据,请选择 TextFileReader。
- 实现模式名称列中列示的接口,该接口对应您在上一步中选择的支持类。支持类会处理与该流和批处理编程模型相关的所有内务活动。该实现类将重点放在流处理逻辑上。
- 在 xJCL 中声明支持类及您的实现类。
- 对您的步骤中所需的每个数据流重复此过程。
- 创建用于实现接口 com.ibm.websphere.batch.BatchDataStream 的 Java 类。
- 获取作业步骤上下文。
JobStepContext ctx= JobStepContextMgr.getContext();
JobStepContextMgr 服务类允许批处理作业步骤获取对其 JobStepContext 对象的引用。该作业步骤上下文提供以下功能:- 对唯一标识运行当前批处理作业步骤的上下文的信息(例如,作业标识)的访问
- 瞬态用户数据区域,在此区域中,可在批处理作业步骤生效期间在批处理编程框架方法间传递特定于应用程序的信息
- 持久性用户数据区域,在此区域中,可在步骤间传递特定于应用程序的信息
您可以使用 PersistentMap 辅助类来简化在作业步骤上下文的持久用户数据区域中存储基本类型(例如,布尔值和双精度)的操作。
- 对于批处理作业,请确保 com.ibm.ws.batch.runtime.jar 文件位于类路径中。
- 声明该任务。 使用以下命令来声明该任务:
<taskdef name="pgcpackager" classname="com.ibm.ws.batch.packager.PGCPackager" classpath="${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar" />
- 在应用程序中编译 Java 文件后,调用 pgcpackager 任务。
<pgcpackager appname="<appname>" earFile="<location name of EAR file to generate>" jarfile="location of the POJO jar file"/>
- 创建批处理作业步骤。
结果
下一步做什么
子主题
批处理应用程序的组件
批处理应用程序开发者和批处理运行时环境提供批处理应用程序的组件。批处理编程模型
批处理应用程序是基于 Enterprise JavaBeans (EJB) 的 Java Platform, Enterprise Edition (Java EE) 应用程序。这些应用程序符合一些经过良好定义的接口,可允许批处理运行时环境管理以该应用程序为目标的批处理作业的开始。跳过记录处理
使用跳过记录处理来跳过事务批处理作业中的读写记录错误。在 xJCL 中指定跳过记录策略。重试步骤处理
processJobStep 方法在事务批处理作业中遇到错误时,使用重试步骤处理来重试作业步骤。在 xJCL 中指定重试步骤策略。可配置的事务方式
使用事务方式来定义是以全局事务方式还是局部事务方式来调用作业相关工件。在 xJCL 中指定事务方式。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tgrid_bgridtutorial2
文件名:tgrid_bgridtutorial2.html