An error tolerant generic batch step works with exactly
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 passes it to the BatchRecordProcessor
for processing.
Before you begin
The BatchRecordProcessor may either return
a valid data object or a null value in case of a tolerable error.
If the returned value is null, the record read from the inputStream
is logged onto the errorstream and the invalidRecordEncountered method
is invoked on the ThresholdPolicy. 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 Outputstream.
About this task
Table 1. Required properties
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
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. The xJCL for the step should
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 could 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
the 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