容错通用批处理步骤使用一个输入、一个输出流和一个错误流。在批处理循环的每一次迭代期间,此步骤会从批处理数据流 (BDS) 输入流中读取单个条目并将其传递给 BatchRecordProcessor 属性以进行处理。
开始之前
在容错时,BatchRecordProcessor 属性可能会返回有效的数据对象,也可能会返回空值。如果返回值是空值,那么会将从输入流中读取的记录记录至错误流并对 ThresholdPolicy 接口调用 invalidRecordEncountered 方法。阈值策略确定是否已达到容错阈值。如果这样,那么它会返回 STEP_CONTINUE_FORCE_CHECKPOINT_BEFORE_PROCESSING_CANCEL,这会强制创建检查点并将作业置于可重新启动状态。否则,作业将正常继续进行。如果 BatchRecordProcessor.processRecord 返回的数据有效,那么会将该数据传递至 BDS 输出流。
关于此任务
使用以下属性来实现容错步骤。
表 1. 必需属性. 该表包括属性名称、值和描述。属性名称 |
值 |
描述 |
threshold_policy |
Java 类名称 |
用于实现 com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy 接口的类 |
BATCHRECORDPROCESSOR |
Java 类名称 |
用于实现 BatchRecordProcessor 接口的类 |
表 2. 可选属性. 该表包括属性名称、值和描述。属性 |
值 |
描述 |
debug |
true 或 false(缺省值为 false) |
在步骤中启用跟踪和调试 |
EnablePerformanceMeasurement |
true 或 false(缺省值为 false) |
测量步骤中所花费的时间 |
过程
- 实现 com.ibm.websphere.batch.devframework.steps.technologyadapters.BatchRecordProcessor 接口以为步骤提供业务逻辑。
在步骤的 xJCL 中,声明 BATCHRECORDPROCESSOR 属性并将值设置为该接口的实现。例如:
...
<props>
<prop name="BATCHRECORDPROCESSOR"
value="com.ibm.websphere.batch.samples.tests.steps.InfrastructureVerificationTest"/>
</props>
...
- 实现 com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy 接口以为步骤提供阈值策略。也可以使用产品实现,例如 com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy 或 com.ibm.websphere.batch.devframework.thresholdpolicies.RecordBasedThresholdPolicy。
按以下代码片段中所示来声明要在 xJCL 中使用的 ThresholdPolicy:
...
<props>
<prop name="threshold_policy"
value="com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy"/>
</props>
...
- 将 BDS 输入流逻辑名设置为 inputStream,将 BDS 输出流逻辑名设置为 outputStream 并将错误的 BDS 输出流设置为 errorStream。
逻辑名是在 xJCL 中进行声明。例如:
<batch-data-streams>
<bds>
<logical-name>inputStream</logical-name>
<props>
....
</bds>
<bds>
<logical-name>outputStream</logical-name>
<props>
...
</bds>
<bds>
<logical-name>errorStream</logical-name>
<props>
...
</bds>
</batch-data-streams>
- 使用 BatchPackager 进行包装时,必须将应用程序的作业步骤类 jobstepclass 设置为 com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep。
例如:
使用 WebSphere Extended Deployment Compute Grid V6.1.1:
ejbname.1=IVTStep1
jndiname.1=ejb/MyThresholdBatchStep
jobstepclass.1=com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep
使用
WebSphere Extended Deployment Compute Grid V8.0:
...
<job-step name="Step1">
<classname>com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep</classname>
...