Un paso por lotes genérico de tolerancia a errores funciona con una entrada, una secuencia
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 entrada de la corriente de datos por lotes (BDS) y la pasa a la propiedad BatchRecordProcessor
para su
proceso.
Antes de empezar
La propiedad BatchRecordProcessor o bien puede devolver un objeto de datos válido o un valor nulo
en un error tolerable. Si el valor devuelto es nulo, el registro leído desde la corriente de entrada se
conecta a la secuencia de error y se invoca el método invalidRecordEncountered en la interfaz
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 normalmente. Si los datos devueltos por BatchRecordProcessor.processRecord
son válidos, los datos se pasan a la corriente de salida de BDS.
Acerca de esta tarea
Utilice las propiedades siguientes para implementar el paso tolerante a errores.
Tabla 1. Propiedades obligatorias. La tabla incluye el nombre de la propiedad, el valor y la descripción. Nombre de propiedad |
Value |
Descripción |
threshold_policy |
Nombre de la clase Java |
Clase que implementa la interfaz
com.ibm.websphere.batch.devframework.thresholdpolicies.ThresholdPolicy |
BATCHRECORDPROCESSOR |
Nombre de la clase Java |
Clase que implementa la interfaz BatchRecordProcessor |
Tabla 2. Propiedades opcionales. La tabla incluye el nombre de la propiedad, el valor y la descripción. Propiedad |
Value |
Descripción |
debug |
true o false (el valor predeterminado es false) |
Habilitar el rastreo y la depuración en el paso |
EnablePerformanceMeasurement |
true o false (el valor predeterminado es false) |
Mide el tiempo transcurrido en el paso |
Procedimiento
- Implemente la
interfazcom.ibm.websphere.batch.devframework.steps.technologyadapters.BatchRecordProcessor para
proporcionar la lógica de negocio del paso.
En el xJCL del paso, declare 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 puede 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 en inputStream y el
nombre lógico de la corriente de salida de BDS en outputStream y la corriente de salida de
BDS para errores en 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 empaquetado, la aplicación
para la clase del paso de trabajo, jobstepclass, debe
establecerse en com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep.
Por ejemplo:
Utilizando WebSphere Extended Deployment Compute
Grid versión 6.1.1:
ejbname.1=IVTStep1
jndiname.1=ejb/MyThresholdBatchStep
jobstepclass.1=com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep
Utilizando
WebSphere Extended Deployment Compute Grid versión 8.0:
...
<job-step name="Step1">
<classname>com.ibm.websphere.batch.devframework.steps.technologyadapters.ThresholdBatchStep</classname>
...