Un paso por lotes genérico tolerante a errores funciona con exactamente una secuencia de entrada, una de salida y una secuencia de error. Durante cada iteración del bucle por lotes este paso lee una sola entrada de la corriente de datos por lotes
(BDS) y la corriente de entrada la pasa a BatchRecordProcessor para su proceso.
Antes de comenzar
BatchRecordProcessor puede devolver un objeto de datos válido o un valor nulo en caso de que se produzca un error tolerable. Si el valor devuelto es nulo, el registro leído de inputStream se anota en la secuencia de error y se invoca el método invalidRecordEncountered en
ThresholdPolicy. La política del umbral determina si se ha alcanzado el umbral de tolerancia a errores. Si es así, devuelve STEP_CONTINUE_FORCE_CHECKPOINT_BEFORE_PROCESSING_CANCEL, que fuerza un punto de control y pone el trabajo en estado reiniciable. De lo contrario, el trabajo sigue ejecutándose normalmente. Si los datos devueltos por BatchRecordProcessor.processRecord son válidos, éstos se pasan a la secuencia de salida de BDS.
Acerca de esta tarea
Tabla 1. Propiedades necesarias
Nombre de propiedad |
Valor |
Descripción |
threshold_policy
|
nombre de clase java
|
Clase que implementa la interfaz com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy
|
BATCHRECORDPROCESSOR
|
nombre de clase java
|
Clase que implementa la interfaz BatchRecordProcessor
|
Tabla 2. Propiedades opcionales
Propiedad |
Valor |
Descripción |
debug
|
true o false (el valor predeterminado es false)
|
Habilite el rastreo y la depuración del paso
|
EnablePerformanceMeasurement
|
true o false (el valor predeterminado es false)
|
Mide el tiempo transcurrido dentro del paso
|
Procedimiento
-
Implemente la interfaz com.ibm.websphere.batch.devframework.steps.technologyadapters.BatchRecordProcessor para proporcionar la lógica empresarial para el paso. El xJCL para el paso debe declarar una propiedad BATCHRECORDPROCESSOR con el valor establecido en la implementación de la interfaz:
Por ejemplo:
...
<props>
<prop name="BATCHRECORDPROCESSOR" value="com.ibm.websphere.batch.samples.tests.steps.InfrastructureVerificationTest"/>
</props>
...
-
Implemente la interfaz com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy para proporcionar la política de umbral para el paso. También podría utilizar las implementaciones de producto como
com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy
o com.ibm.websphere.batch.devframework.thresholdpolicies.RecordBasedThresholdPolicy.
Declare ThresholdPolicy para que se utilice en el xJCL tal como se muestra en el siguiente fragmento de código:
...
<props>
<prop name="threshold_policy" value="com.ibm.websphere.batch.devframework.thresholdpolicies.PercentageBasedThresholdPolicy"/>
</props>
...
-
Establezca el nombre lógico de la corriente de entrada de BDS como inputStream y un nombre lógico de corriente de salida de BDS como outputStream y la corriente de salida de BDS para errores como errorStream. Los nombres lógicos se declaran en el xJCL.
Por ejemplo:
<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>
-
Aunque se utilice BatchPackager para empaquetar la aplicación,
jobstepclass debe establecerse en com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep.
Por ejemplo:
ejbname.1=IVTStep1
jndiname.1=ejb/MyThresholdBatchStep
jobstepclass.1=com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep