FileWriterPattern
El patrón FileWriterPattern se utiliza para grabar datos de texto en un archivo.
Clases de soporte
La clase TextFileWriter proporciona la lógica para abrir y grabar datos de serie en el archivo determinado. El archivo se abre o en modalidad append o bien overwrite, dependiendo de las propiedades especificadas. El archivo se abre en modalidad siempre append durante un reinicio de trabajo.
Hay dos formas de establecer el nombre de archivo TextFileWriter dinámicamente desde JobStepContext:
- Utilice una única propiedad de nivel de trabajo conocida, definida por Compute
Grid. En el ejemplo siguiente:
si establece el valor "/mi/nombreArchivo" antes de la inicialización de TextFileWriter, TextFileWriter usa este valor como nombre de archivo.JobStepContext ctx= JobStepContextMgr.getContext(); Properties jobProps = ctx.getJobLevelProperties(); jobProps.set(TextFileWriter. FILENAME_JOBSTEPCONTEXT_DEFAULT_PROPERTY_NAME, "/mi/nombreArchivo");
- Utilice su propia propiedad personalizada, definida por una propiedad xJCL de nivel de escritor BDS. Utilice este método si tiene dos escritores y cada uno necesita un nombre de archivo diferente. En este método, utilice la propiedad xJCL de nivel BDS llamada com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter.FILENAME.xjcl.custom.property.name para identificar el nombre de propiedad JobStepContext. Por ejemplo:
xJCL <bds> <logical-name>outputStream</logical-name> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter</impl-class> <props> <prop name="PATTERN_IMPL_CLASS" value="mypkg.MyWriter"/> <prop name="FILENAME" value="/my/staticFileName.txt"/> <!-- Esto tendrá efecto si no se ha definido la configuración dinámica.--> <prop name="AppendJobIdToFileName" value="true"/> <!-- Las opciones existentes se pueden seguir utilizando con nombres de archivo determinados dinámicamente --> <prop name="debug" value="true"/> <prop name="com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter.FILENAME.xjcl.custom.property.name" value="my.bds.specific.property.name"/> </props> </bds> </batch-data-streams> </job-step>
Como en el primer método, defina la propiedad de nivel de trabajo antes de la inicialización de TextFileWriter. Por ejemplo:JobStepContext ctx= JobStepContextMgr.getContext(); Properties jobProps = ctx.getJobLevelProperties(); jobProps.set("mi.nombre.propiedad.concreta.bds", "/mi/nombreArchivo");
Propiedades obligatorias
Las propiedades siguientes son necesarias para el patrón.
Nombre de propiedad | Value |
---|---|
PATTERN_IMPL_CLASS | Clase que implementa la interfaz FileWriterPattern |
FILENAME | Vía de acceso completa al archivo de entrada |
Propiedades opcionales
Para el patrón las propiedades siguientes son opcionales.
Nombre de propiedad | Value | Descripción |
---|---|---|
debug | true o false (el valor predeterminado es false) | Habilita el rastreo detallado en esta secuencia de datos por lotes. |
EnablePerformanceMeasurement | true o false (el valor predeterminado es false) | Calcula el tiempo total invertido en las secuencias de datos por lotes y el método processRecord, si se utiliza GenericXDBatchStep. |
EnableDetailedPerformanceMeasurement | true o false (el valor predeterminado es false) | Proporciona un desglose más detallado del tiempo invertido en cada método de las secuencias de datos por lotes. |
file.encoding | Codificación del archivo | Por ejemplo, 8859_1 |
AppendJobldToFileName | true o false (el valor predeterminado es false) | Añade el JobID al nombre de archivo antes de cargar el archivo. |
append | true o false (el valor predeterminado es true) | Determina si se abre el archivo en modalidad append. Importante: Durante un reinicio, el archivo se abre siempre en modalidad append.
|
Definición de interfaz
public interface FileWriterPattern {
/**
* Se invoca durante la fase de configuración de paso
* @parámetro props
*/
public void initialize(Properties props);
/**
* Este método debe grabar el objeto de registro dado
* en bufferedwriter.
* @parámetro out
* @parámetro record
* @emite una excepción IOException
*/
public void writeRecord(BufferedWriter out, Object record) throws IOException;
/**
* Este método sólo se invoca una vez justo después de abrir
* bufferedwriter. Se debe utilizar para grabar cualquier información de cabecera
* @parámetro out
* @emite una excepción IOException
*/
public void writeHeader(BufferedWriter out) throws IOException;
/**
* Este método se puede invocar opcionalmente durante el paso de proceso para
* inicializar y grabar de forma explícita la cabecera.
* @parámetro header
* @emite una excepción IOException
*/
public void writeHeader(BufferedWriter out, Object header) throws IOException;
}
Ejemplo xJCL
<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="file.encoding" value="8859_1"/>
<prop name="FILENAME" value="/opt/txlist.txt" />
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.TextFileWriter</impl-class>
</bds>
</batch-data-streams>