En este tema se describe cómo grabar una aplicación de proceso por lotes sencilla.
Antes de comenzar
Antes de comenzar esta tarea, debe configurar el entorno. Es posible que deba configurar la propiedad personalizada com.ibm.websphere.ejbcontainer.expandCMPCFJNDIName antes de desarrollar una aplicación de proceso por lotes Compute Grid.
Consulte
Propiedades personalizadas de la máquina virtual Java
para obtener información de configuración.
Acerca de esta tarea
En esta tarea de ejemplo se supone que el usuario utiliza Rational Application
Developer. También se pueden utilizar otras herramientas de desarrollo.
Procedimiento
-
Cree un nuevo proyecto de aplicación de empresa titulado PostingsSample2.
-
Añada un nuevo módulo de proyecto EJB (Enterprise JavaBeans).
Se crea un nuevo archivo EAR (Enterprise ARchive) y proyecto de Enterprise
EJB.
-
Añada batchruntime.jar a la vía de acceso de construcción Java del proyecto
PostingsSample2EJB. El archivo batchruntime.jar se encuentra en la carpeta
<INICIO_WAS>/lib.
-
Suponga que hay una clase Java existente, AccountOp, que es
un objeto Java que tiene dos métodos de interfaz públicos, creditAccount(..) y debitAccount(..).
Se llama a estos métodos desde el bean de proceso por lotes según sea adecuado. Importe esta
clase del espacio de trabajo o grabe una clase que llame a un proceso por lotes.
-
Cree la clase BatchStep.
El bean de proceso por lotes es un bean de entidad que se hereda de una clase BatchStep
abstracta. Efectúe los siguientes subpasos para crear el paso de trabajo abstracto, PostingSample2Step:
-
En el proyecto PostingsSample2EJB, cree la clase Java abstracta,
PostingSample2Step, que se hereda de BatchJobStepInterface.
-
Añada la interfaz BatchJobStepInterface.
-
Cree la clase abstracta.
-
Cree el bean de proceso por lotes.
En los siguientes pasos se describe cómo crear manualmente el bean de proceso por lotes.
El bean de proceso por lotes reutiliza la interfaz BatchJobStepLocalInterface, BatchJobStepKey y las clases BatchJobStepLocalHome del modelo de programación proporcionado. Estas clases no se vuelven a crear. Sólo se genera la implementación del bean de proceso por lotes.
-
En el proyecto PostingSample2EJB, cree un nuevo EJB CMP, titulado PostingsSample2Data.
-
Para la clase de interfaz de factoría local, seleccione BatchJobStepLocalHomeInterface.
-
Para la clase de interfaz local, seleccione BatchJobStepLocalInterface.
-
Deseleccione Utilizar tipo de atributo de clave única para la clase de clave.
-
Para la clase de clave, seleccione BatchJobStepKey.
-
Elimine el ID de atributo CMP.
-
En el atributo CMP, añada los dos atributos CMP, jobID y stepID de tipo serie.
-
Añada jobID de nombre y java.lang.String de tipo.
Seleccione Clave.
-
De forma similar, añada stepID, escriba java.lang.String e inserte este nombre de tipo en el campo Clave.
-
Seleccione BeanSuperclass. Cree un tipo coincidente de PostingStep2.
Esta acción crea el nuevo EJB, pero en los proyectos sólo se mostrará la clase de bean EJB. La interfaz local, la interfaz de factoría y la clase de clave se seleccionan
de clases proporcionadas del modelo de programación.
-
Edite el descriptor de despliegue. Realice estos cambios
en el archivo ejb-jar.xml para PostingSample2Data.
- En la pestaña Bean, cambie el nombre de la JNDI de la fábrica de conexiones CMP por jdbc/lree y el tipo de autorización del contenedor con Por fábrica de conexiones.
- En la pestaña Ensamblado, para las transacciones del contenedor, haga que todos los métodos de PostingsSample2Data sean Necesario.
- Cambie el nombre JNDI en Enlaces de WebSphere porejb/com/ibm/ws/batch/sample/PostingsSample2Data.
-
Guarde y cierre el descriptor de despliegue. Como antes, añadirá más adelante la
implementación del EJB.
-
Cree el bean de sesión de trabajo por lotes.
El trabajo por lotes es un bean de sesión que se declara en el descriptor de despliegue,
pero no tiene generadas clases porque son parte del tiempo de ejecución.
-
En el archivo ejb-jar.xml, en la pestaña Bean, pulse
Añadir para crear el nuevo EJB de sesión, PostingsJob2.
-
Cambie Tipo de transacción por bean.
-
En Clase de bean, Interfaz inicial remota e Interfaz remota, escriba las siguientes series:
- Clase de bean: com.ibm.ws.batch.BatchJobControllerBean
- Interfaz remota: com.ibm.ws.batch.BatchJobController
- Interfaz de factoría remota: com.ibm.ws.batch.BatchJobControllerHome
Observe que no se genera ninguna clase nueva porque existen
todas las clases en el motor de ejecución. Sólo se declara el bean de sesión de trabajo en el descriptor de despliegue.
-
Cambie el nombre JNDI (Java Naming and Directory
Interface) de enlaces de WebSphere Java Naming and Directory
Interface (JNDI) por ejb/com/ibm/ws/batch/PostingsSample2Job.
-
Añada una referencia de EJB a PostingsSample2Job.
-
Seleccione el bean PostingsSample2Data y añada el nombre ejb/PostingsSample2Data.
Seleccione el tipo de referencia local.
-
Cree la referencia de gestor de trabajo.
- En la pestaña Referencias, en el bean PostingSample2Job, pulse Añadir.
Seleccione Referencia de recurso, pulse Siguiente y proporcione la siguiente información:
- Nombre: wm/BatchWorkManager
- Tipo: seleccione commonj.work.WorkManager
- Autenticación: Container
- Ámbito de compartición: Shareable
-
Cambie el nombre JNDI de wm/BatchWorkManger por wm/default.
-
Guarde y cierre el archivo ejb-jar.xml.
-
Cree la secuencia de datos por lotes de entrada.
Puede ser cero, 1 o n corrientes de entrada y/o salida. En este ejemplo, hay una corriente de entrada que lee de un archivo y no hay una corriente de salida.
Se graba la salida en la consola.
Las clases de secuencia de datos por lotes (BDS) son objetos POJO (Plain Old Java Object).
Para crear la corriente de entrada, efectúe lo siguiente:
-
Cree una nueva clase en el paquete com.ibm.ws.batch.sample, denominada PostingsSample2InputStream.
-
Implemente la interfaz BatchDataStream.
Esta acción crea la nueva clase de corriente PostingSample2Input.
Puede añadir más adelante las implementaciones.
-
Cree Posting2Class para representar un registro de la corriente de entrada.
Esta clase es la representación de objeto de un registro en la corriente de entrada por lotes.
Esta se construye al leer un registro de la corriente BDS de entrada
pasada en el bean de proceso por lotes. Esta clase es como un bean de datos o de carga que contiene
atributos y getters y setters correspondientes, de los campos en la corriente de entrada.
-
Cree una nueva clase denominada Posting2 que implementa la interfaz serializable.
Se pueden añadir implementaciones a ésta más adelante.
-
Añada implementaciones a las clases.
-
Ahora añada implementaciones al bean PostingSample2Data,
PostingSample2Step y PostingSample2InputStream como en los archivos de clase asociados.
Este ejemplo se mantiene
sencillo desde un punto de vista de proceso para resaltar los pasos relacionados con
el desarrollo de una nueva aplicación de proceso por lotes.
Después de añadir las clases de implementación, puede desplegar el EJB.