Una aplicación de proceso por lotes en WebSphere Extended Deployment Versión 6.1 se implementa como un POJO (Plain Old Java Object) y se empaqueta como módulos de EJB (Enterprise JavaBeans) en archivos EAR (archivador empresarial) para su despliegue. El método preferido para crear una aplicación de proceso por lotes es crear una aplicación de proceso por lotes basada en POJO.
En las secciones siguientes se describen los componentes de una aplicación de proceso por lotes.
Una aplicación de proceso por lotes puede constar de uno o más pasos por lotes. Cada paso por lotes es un POJO, que implementa la interfaz com.ibm.websphere.batch.BatchJobStepInterface. La implementación de esta interfaz proporciona la lógica empresarial del paso por lotes que el tiempo de ejecución del proceso por lotes invoca para ejecutar la aplicación de proceso por lotes.
Durante el empaquetado de una aplicación de proceso por lotes, cada paso por lotes se declara como un bean de entidad CMP y la lógica empresarial en el POJO se asocia con el bean utilizando una entrada de entorno en el descriptor de despliegue de EJB. El bean de entidad CMP actúa como un derivador de paso de trabajo por lotes. El tiempo de ejecución de WebSphere Extended Deployment proporciona su implementación. Por lo tanto, este bean se declara en el descriptor de despliegue de EJB y no se empaqueta. Se definen varios pasos en una aplicación de proceso por lotes individual
Una aplicación por lotes también incluye un bean de sesión sin estado proporcionado por el tiempo de ejecución de WebSphere Extended Deployment que actúa como un controlador de paso por lotes. Como el bean de entidad CMP del paso, el bean de sesión sin estado del controlador se declara en el descriptor de despliegue de la aplicación. Declare el bean de controlador una vez por aplicación de proceso por lotes.
Cada paso por lotes puede utilizar cero o más secuencias de datos por lotes para la entrada y salida de datos. Una secuencia de datos por lotes es un POJO que implementa la interfaz com.ibm.websphere.batch.BatchDataStream.
Los algoritmos de puntos de control permiten que el tiempo de ejecución por lotes decida con qué frecuencia se va a comprometer la transacción global en la que se invocan los pasos por lotes. Los algoritmos de puntos de control se crean como los POJO, implementando la interfaz com.ibm.wsspi.batch.CheckpointAlgorithm. El tiempo de ejecución por lotes también proporciona algoritmos de punto de control basados en el tiempo y basados en el registro, listos para su uso.
Una característica opcional del modelo de programación por lotes, los algoritmos de resultados, se utiliza para manipular los códigos de retorno de los trabajos por lotes. El tiempo de ejecución por lotes proporciona un algoritmo de resultados sencillo que devuelve el valor máximo de código de retorno numérico de todos los pasos de trabajo.
Componente | Tipo | Implementación | Proveedor |
---|---|---|---|
Paso de trabajo por lotes | POJO | com.ibm.websphere.BatchJobStepInterface | Aplicación de proceso por lotes |
Secuencia de datos por lotes | POJO | com.ibm.websphere.batchDataStream | Aplicación de proceso por lotes |
Algoritmo de punto de control | POJO | com.ibm.wsspi.batchCheckpointAlgorithm | Aplicación de proceso por lotes (puede utilizar la implementación proporcionada por el tiempo de ejecución en su lugar) |
Algoritmo de resultados | POJO | com.ibm.wsspi.batchResultsAlgorithm | Aplicación de proceso por lotes (puede utilizar la implementación proporcionada por el tiempo de ejecución en su lugar) |
Componente | Tipo | Implementación | Proveedor |
---|---|---|---|
Controlador de trabajos por lotes | Bean de sesión | Tiempo de ejecución por lotes | |
Derivador del paso de trabajo por lotes | Bean de entidad CMP | Tiempo de ejecución por lotes | |
Algoritmo de punto de control | POJO | Tiempo de ejecución por lotes (las aplicaciones pueden proporcionar el suyo propio) | |
Algoritmo de resultados | POJO | Tiempo de ejecución por lotes (las aplicaciones pueden proporcionar el suyo propio) |
Descriptor de despliegue de EJB:
<ejb-jar id="ejb-jar_ID"> <display-name>POJOSampleEJBs</display-name> <enterprise-beans> <!--Bean de controlador de trabajo por lotes --> <session id="POJOJob"> <ejb-name>POJOJob</ejb-name> <home>com.ibm.ws.batch.BatchJobControllerHome</home> <remote>com.ibm.ws.batch.BatchJobController</remote> <ejb-class>com.ibm.ws.batch.BatchJobControllerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <ejb-local-ref id="EJBLocalRef_1168709876999"> <ejb-ref-name>ejb/POJOStep1</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep1</ejb-link> </ejb-local-ref> <ejb-local-ref id="EJBLocalRef_1127247535990"> <ejb-ref-name>ejb/POJOStep2</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface</local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep2</ejb-link> </ejb-local-ref> <resource-ref id="ResourceRef_1168711637701"> <!-- Gestor de trabajo predeterminado de trabajos por lotes --> <res-ref-name>wm/BatchWorkManager</res-ref-name> <res-type>commonj.work.WorkManager</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </session> <!-- Paso # 1 del trabajo por lotes --> <entity id="POJOStep1"> <ejb-name>POJOStep1</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Derivador de paso de trabajo por lotes --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey </prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep1</abstract-schema-name> <cmp-field id="CMPAttribute_1168709093522"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1168709093542"> <field-name>stepID</field-name> </cmp-field> <!-- Entrada de entorno que asocia el paso POJO con el derivador --> <env-entry> <description>POJO class name for the batch step</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementación del paso de trabajo de POJO --> <env-entry-value>com.ibm.websphere.samples.POJOStep1</env-entry-value> </env-entry> </entity> <!-- Paso # 2 del trabajo por lotes --> <entity id="POJOStep2"> <ejb-name>POJOStep2</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Derivador de paso de trabajo por lotes --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep2</abstract-schema-name> <cmp-field id="CMPAttribute_1127248451496"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1127248451497"> <field-name>stepID</field-name> </cmp-field> <!-- Entrada de entorno que asocia el paso POJO con el derivador --> <env-entry> <description>POJO class name for the batch step</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementación del paso de trabajo de POJO --> <env-entry-value>com.ibm.websphere.samples.POJOStep2</env-entry-value> </env-entry> </entity> </enterprise-beans> <assembly-descriptor id="AssemblyDescriptor_1168711087550"> <container-transaction> <method> <ejb-name>POJOStep1</ejb-name> <method-name>*</method-name> </method> <method> <ejb-name>POJOStep2</ejb-name> <method-name>*</method-name> </method> <!-- SE NECESITA TX --> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>