Desarrollo de una aplicación de proceso por lotes transaccional simple
Puede desarrollar una aplicación de lotes simple mediante un controlador de trabajos por lotes la secuencia de datos de Enterprise JavaBeans (EJB), la línea de mandatos o la herramienta Apache ANT.
Acerca de esta tarea

- Asegúrese de que los datos estén igualmente disponibles para todas las máquinas en las que se puede iniciar la aplicación por lotes. Utilice un sistema de archivos de red para este ejemplo. Esta acción podría reducir el rendimiento de la aplicación.
- Despliegue la aplicación en servidores de aplicaciones que sólo se puedan ejecutar en la máquina en la que existen los datos locales. Para ello, despliegue la aplicación en un clúster que exista en un grupo de nodos que sólo tenga un nodo.

Para facilitar la impresión, algunos mandatos se han partido en varias líneas.
Procedimiento
- Cree trabajos por lotes mediante un controlador de trabajo por lotes y una
secuencia de datos EJB.
- Cree pasos de trabajo por lotes.
- Cree una clase Java™ que implemente la interfaz com.ibm.websphere.BatchJobStepInterface.
- Implemente la lógica empresarial.
Si el paso tiene una secuencia de entrada y una secuencia de salida, puede utilizar, de forma alternativa, el paso de proceso por lotes Genérico de GenericXDBatchStep.
- Cree secuencias de datos de proceso por lotes.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
Se accede a las secuencias de datos de proceso por lotes desde la lógica empresarial, por ejemplo, desde los pasos del trabajo por lotes llamando a BatchDataStreamMgr con el jobID y el stepID. JobID y stepID se recuperan de la lista de propiedades de bean del paso utilizando las claves BatchConstants.JOB_ID y BatchConstants.STEP_ID.
- Correlacione BatchConstants.JOB_ID con com.ibm.websphere.batch.JobID y
BatchConstants.STEP_ID con com.ibm.websphere.batch.StepID.
Ya debe tener acceso a la clase BatchConstants.
La infraestructura de la secuencia de datos del proceso por lotes proporciona varios patrones listos para utilizar para trabajar con distintos tipos de secuencias de datos como, por ejemplo, un archivo y una base de datos. Para utilizar la infraestructura de secuencia de datos de proceso por lotes, complete los pasos siguientes.
- Identifique el tipo de secuencia de datos con la que quiere operar, como una secuencia TextFile, ByteFile, JDBC o z/OS.
- Identifique si desea leer desde la secuencia o escribir en la secuencia.
- Consulte la tabla en la infraestructura de la secuencia de datos de proceso por lotes y los patrones. Seleccione la clase en la columna de clases de soporte que coincide con el tipo y operación de la secuencia de datos. Por ejemplo, si desea leer los datos de un archivo de texto, seleccione TextFileReader.
- Implemente la interfaz listada en la columna del nombre de patrón que corresponde a la clase de soporte que ha seleccionado en el paso anterior. La clase de soporte maneja todas las actividades de contabilidad relacionadas con la secuencia y el modelo de programación por lotes. La clase de implementación se centra en la lógica de proceso de la secuencia.
- Declare la clase de soporte y la clase de implementación en el xJCL.
- Repita este procedimiento para cada secuencia de datos que necesite en el paso.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
- Opcional: Obtenga el contexto del paso de trabajo.
JobStepContext ctx= JobStepContextMgr.getContext();
La clase de servicio JobStepContextMgr permite al paso de trabajo por lotes obtener una referencia a su objeto JobStepContext. El contexto de paso de trabajo proporciona las siguientes prestaciones:- Acceso a la información que identifica de forma exclusiva el contexto en el que se ejecuta el paso de trabajo por lotes actual, por ejemplo, el ID de trabajo
- Un área de datos de usuario transitoria en la que puede pasarse información específica de aplicación entre los métodos de la infraestructura de programación por lotes durante el ciclo de vida del paso de trabajo por lotes
- Un área de datos de usuario persistente en la que puede pasarse información específica de aplicación entre pasos
Puede utilizar la clase de ayuda PersistentMap para simplificar el almacenamiento de tipos básicos, como por ejemplo Boolean y double, en el área de datos de usuario persistente del contexto de paso de trabajo.
- Defina las secuencias de datos de proceso por lotes en xJCL.
La clase PATTERN_IMPL_CLASS denota la implementación de usuario del patrón de infraestructura BDS y la propiedad impl-class denota la clase de soporte.<batch-data-streams> <bds> <logical-name>inputStream</logical-name> <props> <prop name="PATTERN_IMPL_CLASS" value="MyBDSStreamImplementationClass"/> <prop name="file.encoding" value="8859_1"/> <prop name="FILENAME" value="${inputDataStream}" /> <prop name="PROCESS_HEADER" value="true"/> <prop name="AppendJobIdToFileName" value="true"/> </props> <impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.FileByteReader </impl-class> </bds>
- Opcional: Habilite el proceso de nivel de salto.
Utilice este proceso de registro de saltos para saltar u omitir errores de registro de lectura y grabación en trabajos por lotes transaccionales. Especifique políticas de registro de saltos en el xJCL. Consulte el tema sobre el proceso de salto de registro para obtener más información.
- Opcional: Habilite el proceso de reintento de paso.
Utilice el proceso de retry-step para reintentar pasos de trabajo cuando el método processJobStep encuentre errores en un trabajo por lotes de transacción. Especifique las políticas retry-step en el xJCL. Consulte el tema sobre el proceso de retry-step para obtener más información.
- Opcional: Configure la modalidad de transacción.
Utilice la modalidad de transacciones para definir si se llama a artefactos relacionados con trabajos en la modalidad de transacciones global o local. Consulte el tema sobre la modalidad de transacción configurable para obtener más información.
- Opcional: Especifique un escucha de trabajos.
Proporcione una implementación para la interfaz com.ibm.websphere.batch.listener.joblistener para añadir inicialización y limpieza adicionales de trabajos y pasos. Especifique el escucha de trabajo en el xJCL utilizando el elemento listener a nivel de trabajo.
El método beforeJob() de escucha de trabajos se invoca antes de invocar que ningún artefacto de usuario. El método afterJob() de escucha de trabajos se invoca después de invocar el último artefacto de usuario. El método beforeStep() de escucha de trabajos se invoca antes que ningún artefacto de usuario relacionado con un paso. El método afterStep() de escucha de trabajos se invoca cómo último artefacto de usuario relacionado con un paso. Cada vez que se invoca el escucha de trabajos, anota un mensaje en el registro de trabajo.
- Declare un controlador de trabajos por lotes.
- Añada un bean de sesión sin estado a su descriptor de despliegue y haga referencia a la clase de implementación que proporciona producto. Hágalo mediante la especificación de com.ibm.ws.batch.BatchJobControllerBean como clase de bean. Realice esta especificación sólo una vez por cada aplicación de proceso por lotes.
- Utilice com.ibm.ws.batch.BatchJobControllerHome para la clase de interfaz remota de inicio y com.ibm.ws.batch.BatchJobController para la clase de interfaz remota.
- Configure el descriptor de despliegue de EJB.
- Configure una referencia de recurso en el bean del controlador en el gestor de trabajo predeterminado wm/BatchWorkManager del tipo commonj.work.WorkManager.
Avoid trouble: Debe declarar el descriptor de despliegue del bean de controlador por lotes en el descriptor de despliegue de Enterprise JavaBeans (EJB) de una aplicación por lotes. Sólo se puede definir un bean de controlador por cada aplicación de proceso por lotes.gotcha
- Cree pasos de trabajo por lotes.
- Cree trabajos de proceso por lotes utilizando la línea de mandatos.
- Cree pasos de trabajo por lotes.
- Cree una clase Java que implemente la interfaz com.ibm.websphere.BatchJobStepInterface.
- Implemente la lógica empresarial.
Si su paso tiene exactamente una secuencia de entrada y una secuencia de salida puede utilizar de forma alternativa el paso por lotes genérico GenericXDBatchStep.
- Cree secuencias de datos de proceso por lotes.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
Se accede a las secuencias de datos de proceso por lotes desde la lógica empresarial, por ejemplo, desde los pasos del trabajo por lotes llamando a BatchDataStreamMgr con el jobID y el stepID. JobID y stepID se recuperan de la lista de propiedades de bean del paso utilizando las claves BatchConstants.JOB_ID y BatchConstants.STEP_ID.
- Correlacione BatchConstants.JOB_ID con com.ibm.websphere.batch.JobID y
BatchConstants.STEP_ID con com.ibm.websphere.batch.StepID.
Ya debe tener acceso a la clase BatchConstants.
La infraestructura de la secuencia de datos del proceso por lotes proporciona varios patrones listos para utilizar para trabajar con distintos tipos de secuencias de datos como, por ejemplo, un archivo y una base de datos. Para utilizar la infraestructura de secuencia de datos de proceso por lotes, complete los pasos siguientes.
- Identifique el tipo de secuencia de datos con el que desea trabajar como, por ejemplo una secuencia TextFile, ByteFile, JDBC o z/OS.
- Identifique si desea leer desde la secuencia o escribir en la secuencia.
- Consulte la tabla en la infraestructura de la secuencia de datos de proceso por lotes y los patrones. Seleccione la clase en la columna de clases de soporte que coincide con el tipo y operación de la secuencia de datos. Por ejemplo, si desea leer los datos de un archivo de texto, elija TextFileReader.
- Implemente la interfaz listada en la columna del nombre de patrón que corresponde a la clase de soporte que ha seleccionado en el paso anterior. La clase de soporte maneja todas las actividades de contabilidad relacionadas con la secuencia y el modelo de programación por lotes. La clase de implementación se centra en la lógica de proceso de la secuencia.
- Declare la clase de soporte y la clase de implementación en el xJCL.
- Repita este procedimiento para cada secuencia de datos que necesite en el paso.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
- Obtenga el contexto del paso de trabajo.
JobStepContext ctx= JobStepContextMgr.getContext();
La clase de servicio JobStepContextMgr permite al paso de trabajo por lotes obtener una referencia a su objeto JobStepContext. El contexto de paso de trabajo proporciona las siguientes prestaciones:- Acceso a la información que identifica de forma exclusiva el contexto en el que se ejecuta el paso de trabajo por lotes actual, por ejemplo, el ID de trabajo
- Un área de datos de usuario transitoria en la que puede pasarse información específica de aplicación entre los métodos de la infraestructura de programación por lotes durante el ciclo de vida del paso de trabajo por lotes
- Un área de datos de usuario persistente en la que puede pasarse información específica de aplicación entre pasos
Puede utilizar la clase de ayuda PersistentMap para simplificar el almacenamiento de tipos básicos, como por ejemplo Boolean y double, en el área de datos de usuario persistente del contexto de paso de trabajo.
- Abra un indicador de mandatos y asegúrese de que Java esté en la vía de acceso.
- Emita el mandato siguiente, en una única línea.
java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=<nombre_aplicación> -jarfile=<archivo jar que contiene el paso de proceso por lotes POJO> -earfile=<nombre del archivo EAR de salida sin la extensión .ear> [-utilityjars=<lista separada por puntos y coma de jars de programa de utilidad>] [-debug] [-gridJob]
Por ejemplo, para trabajos por lotes, emitajava -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT
Por ejemplo, para trabajos de proceso por lotes, emitajava -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -Dfile.encoding=ISO8859-1 -appname=<nombre_aplicación> -jarfile=<archivo jar que contiene el paso de proceso por lotes POJO> -earfile=<nombre del archivo EAR de salida sin la extensión .ear> [-utilityjars=<lista separada por puntos y coma de jars de programa de utilidad>] [-debug] [-gridJob]
java -cp ${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar com.ibm.ws.batch.packager.WSBatchPackager -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT
Avoid trouble: Si no incluye -Dfile.encoding=ISO8859-1, las diferencias de la página de códigos generan un rendimiento EAR no válido y descriptores JAR (archivado Java) de EJB (Enterprise JavaBeans). gotcha
- Empaquete una aplicación por lotes.
Utilice uno de los siguientes métodos.
- Empaquete la aplicación mediante el script WSBatchPackager.
<WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh -appname=<nombre_aplicación> -jarfile=<archivo_jar_que_contiene_clases_paso_POJO> -earfile=<nombre_archivo_ear_salida> [-utilityjars=<jars_utilidad_separados_por_signos_de_punto_y_coma>] [-nonxadsjndiname=<nombre_JNDI_origen_datos_no-xa_para_CursorHoldableJDBCReader>;<nombre_JNDI_origen_datos_no-XA_2>;...] [-debug]
Por ejemplo, ejecute./WSBatchPackager.sh -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
<WASHOME>/stack_products/WCG/bin/WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=<nombre_aplicación> -jarfile=<archivo_jar_que_contiene_clases_paso_POJO> -earfile=<nombre_archivo_ear_salida> [-utilityjars=<jars_utilidad_separados_por_signos_de_punto_y_coma>] [-nonxadsjndiname=<nombre_JNDI_origen_datos_no-xa_para_CursorHoldableJDBCReader>;<nombre_JNDI_origen_datos_no-XA_2>;...] [-debug]
Por ejemplo, ejecute./WSBatchPackager.sh -Dfile.encoding=ISO8859-1 -appname=XDCGIVT -jarfile=XDCGIVTEJBs.jar -earfile=XDCGIVT -utilityjars=myutility.jar -nonxadsjndiname=jdbc/ivtnonxa
Avoid trouble: Si no incluye -Dfile.encoding=ISO8859-1, las diferencias de la página de códigos generan un rendimiento EAR no válido y descriptores JAR (archivado Java) de EJB (Enterprise JavaBeans). gotcha
- Empaquete la aplicación con el mandato java.
Abra un indicador de mandatos y asegúrese de que java esté en la vía de acceso.
- Empaquete la aplicación mediante el script WSBatchPackager.
- Cree pasos de trabajo por lotes.
- Cree trabajos por lotes utilizando ANT.
- Cree pasos de trabajo por lotes.
- Cree una clase Java que implemente la interfaz com.ibm.websphere.BatchJobStepInterface.
- Implemente la lógica empresarial.
Si su paso tiene exactamente una secuencia de entrada y una secuencia de salida puede utilizar de forma alternativa el paso por lotes genérico GenericXDBatchStep.
- Cree secuencias de datos de proceso por lotes.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
Se accede a las secuencias de datos de proceso por lotes desde la lógica empresarial, por ejemplo, desde los pasos del trabajo por lotes llamando a BatchDataStreamMgr con el jobID y el stepID. JobID y stepID se recuperan de la lista de propiedades de bean del paso utilizando las claves BatchConstants.JOB_ID y BatchConstants.STEP_ID.
- Correlacione BatchConstants.JOB_ID con com.ibm.websphere.batch.JobID y
BatchConstants.STEP_ID con com.ibm.websphere.batch.StepID.
Ya debe tener acceso a la clase BatchConstants.
La infraestructura de la secuencia de datos del proceso por lotes proporciona varios patrones listos para utilizar para trabajar con distintos tipos de secuencias de datos como, por ejemplo, un archivo y una base de datos. Para utilizar la infraestructura de secuencia de datos de proceso por lotes, complete los pasos siguientes.
- Identifique el tipo de secuencia de datos con el que desea trabajar como, por ejemplo una secuencia TextFile, ByteFile, JDBC o z/OS.
- Identifique si desea leer desde la secuencia o escribir en la secuencia.
- Consulte la tabla en la infraestructura de la secuencia de datos de proceso por lotes y los patrones. Seleccione la clase en la columna de clases de soporte que coincide con el tipo y operación de la secuencia de datos. Por ejemplo, si desea leer los datos de un archivo de texto, seleccione TextFileReader.
- Implemente la interfaz listada en la columna del nombre de patrón que corresponde a la clase de soporte que ha seleccionado en el paso anterior. La clase de soporte maneja todas las actividades de contabilidad relacionadas con la secuencia y el modelo de programación por lotes. La clase de implementación se centra en la lógica de proceso de la secuencia.
- Declare la clase de soporte y la clase de implementación en el xJCL.
- Repita este procedimiento para cada secuencia de datos que necesite en el paso.
- Cree una clase Java que implemente la interfaz
com.ibm.websphere.batch.BatchDataStream.
- Obtenga el contexto del paso de trabajo.
JobStepContext ctx= JobStepContextMgr.getContext();
La clase de servicio JobStepContextMgr permite al paso de trabajo por lotes obtener una referencia a su objeto JobStepContext. El contexto de paso de trabajo proporciona las siguientes prestaciones:- Acceso a la información que identifica de forma exclusiva el contexto en el que se ejecuta el paso de trabajo por lotes actual, por ejemplo, el ID de trabajo
- Un área de datos de usuario transitoria en la que puede pasarse información específica de aplicación entre los métodos de la infraestructura de programación por lotes durante el ciclo de vida del paso de trabajo por lotes
- Un área de datos de usuario persistente en la que puede pasarse información específica de aplicación entre pasos
Puede utilizar la clase de ayuda PersistentMap para simplificar el almacenamiento de tipos básicos, como por ejemplo Boolean y double, en el área de datos de usuario persistente del contexto de paso de trabajo.
- Para un trabajo por lotes, asegúrese de que el archivo com.ibm.ws.batch.runtime.jar esté en la classpath.
- Declare la tarea. Utilice el mandato siguiente para declarar la tarea:
<taskdef name="pgcpackager" classname="com.ibm.ws.batch.packager.PGCPackager" classpath="${WAS_INSTALL_ROOT}/plugins/com.ibm.ws.batch.runtime.jar" />
- Tras compilar los archivos Java en su aplicación,
invoque la tarea pgcpackager.
<pgcpackager appname="<nombre_apl>" earFile="<nombre ubicación de archivo EAR para generar>" jarfile="ubicación del archivo jar POJO"/>
- Cree pasos de trabajo por lotes.
Resultados
Qué hacer a continuación
Subtopics
Los componentes de una aplicación por lotes
El desarrollador de aplicaciones por lotes y el entorno de tiempo de ejecución por lotes proporciona los componentes de una aplicación de proceso por lotes.Modelo de programación por lotes
Las aplicaciones por lotes son aplicaciones Java Platform, Enterprise Edition (Java EE) basadas en Enterprise JavaBeans (EJB). Estas aplicaciones se ajustan a unas interfaces bien definidas que permiten que el entorno de tiempo de ejecución por lotes gestione el inicio de los trabajos por lotes destinados para la aplicación.Proceso de omisión de registros
Utilice el proceso de skip-record para omitir errores de lectura y grabación de registros en trabajos por lotes de transacción. Especifique políticas de omisión de registros en el xJCL.Proceso de reintento de pasos
Utilice el proceso de retry-step para reintentar pasos de trabajo cuando el método processJobStep encuentre errores en un trabajo por lotes de transacción. Especifique políticas de reintento de pasos en el xJCL.Modalidad de transacción configurable
Utilice la modalidad de transacción para definir si los artefactos relacionadas con los trabajos se invocan en modalidad de transacción global o en modalidad de transacción local. Especifique la modalidad de transacción en el xJCL.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tgrid_bgridtutorial2
File name: tgrid_bgridtutorial2.html