An error tolerant generic batch step works with one input,
one output stream, and one error stream. This step during each iteration
of the batch loop reads a single entry from the batch data stream
(BDS) input stream and passes it to the BatchRecordProcessor property
for processing.
Before you begin
The BatchRecordProcessor property might either return a
valid data object or a null value in a tolerable error. If the returned
value is null, the record read from the input stream is logged on
to the error stream and the invalidRecordEncountered method is invoked
on the ThresholdPolicy interface. The threshold policy determines
whether the error tolerance threshold has been reached. If so, it
returns STEP_CONTINUE_FORCE_CHECKPOINT_BEFORE_PROCESSING_CANCEL, which
forces a checkpoint and puts the job in the restartable state. Otherwise,
the job continues as normal. If the data returned by BatchRecordProcessor.processRecord
is valid, then the data is passed to the BDS output stream.
About this task
Use the following properties to implement the error tolerant
step.
Table 1. Required properties. The table includes the property name, value, and description.
Property name |
Value |
Description |
threshold_policy
|
Java class
name
|
Class implementing the com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy
interface
|
BATCHRECORDPROCESSOR
|
Java class
name
|
Class implementing the BatchRecordProcessor
interface
|
Table 2. Optional properties. The table includes the property name, value, and description.
Property |
Value |
Description |
debug
|
true or false (default is false)
|
Enable tracing and debugging on the step
|
EnablePerformanceMeasurement
|
true or false (default is false)
|
Measure time spent within the step
|
Procedure
- Implement the interfacecom.ibm.websphere.batch.devframework.steps.technologyadapters.BatchRecordProcessor to
provide the business logic for the step. In the xJCL for the step,
declare a property BATCHRECORDPROCESSOR with the value set to the
implementation of the interface. For example:
...
<props>
<prop name="BATCHRECORDPROCESSOR"
value="com.ibm.websphere.batch.samples.tests.steps.InfrastructureVerificationTest"/>
</props>
...
- Implement the interface com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy to
provide the threshold policy for the step. You can also use the product
implementations such as com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy or com.ibm.websphere.batch.devframework.thresholdpolicies.RecordBasedThresholdPolicy.
Declare the ThresholdPolicy to use in the xJCL as shown in the
following code snippet:
...
<props>
<prop name="threshold_policy"
value="com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy"/>
</props>
...
- Set the BDS input stream logical name to inputStream and
a BDS output stream logical name to outputStream and
the BDS output stream for errors to errorStream.
The logical names are declared in the xJCL. For example:
<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>
- While using the BatchPackager for packaging, the application
for the job step class, jobstepclass, must be set
to com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep.
For example:
ejbname.1=IVTStep1
jndiname.1=ejb/MyThresholdBatchStep
jobstepclass.1=com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep