Configuración de la persistencia por lotes Java

El proceso por lotes Java™ puede configurar un repositorio de trabajos para utilizar un almacén persistente para persistir el estado, los puntos de comprobación y los datos persistentes de la aplicación en varias ejecuciones de una instancia de trabajo. El almacén persistente permite reiniciar una instancia de trabajo si una ejecución anterior falla o debe detenerse proporcionando el trabajo reiniciado con los datos adecuados.

Repositorio de trabajos

Un repositorio de trabajos incluye un almacén persistente soportado por una base de datos, o bien un almacén persistente basado en memoria que sólo está pensado para desarrollo. La función de proceso por lotes Liberty permite flexibilidad en la definición de un entorno en el que varios servidores pueden utilizar un almacén persistente común o un repositorio de trabajos. Es importante comprender que el ámbito de muchas funciones abarca todos los servidores que se han configurado para utilizar el mismo repositorio de trabajos. Para obtener más información, consulte Repositorio de trabajos.

Configuración de la persistencia basada en memoria por lotes Java

La persistencia por lotes permite reiniciar una instancia de trabajo si la ejecución finaliza con un estado FAILED o ERROR. En ausencia de la configuración de base de datos para la persistencia por lotes, el proceso por lotes Java toma como valor predeterminado la persistencia basada en memoria para realizar un seguimiento del estado, los puntos de comprobación y los datos persistentes de la aplicación en varias ejecuciones de una instancia de trabajo.

Nota: La persistencia basada en memoria predeterminada viene con una limitación obvia pero significativa.  Si la JVM del servidor o del entorno de ejecución del contenedor por lotes se cae o se reinicia, la persistencia se pierde.Esta función sólo está destinada a utilizarse para el desarrollo y no debe tenerse en cuenta para sistemas de producción o para el soporte de proceso por lotes crítico.

Configuración de la persistencia de base de datos por lotes Java

La persistencia por lotes puede configurarse mediante un almacén de base de datos.  El almacén de base de datos referencia un origen de datos, que a su vez referencia un controlador JDBC, una ubicación de base de datos específica y otras propiedades personalizadas de base de datos. Los nombres calificados de las tablas de persistencia por lotes pueden configurarse utilizando los atributos schema y tablePrefix del propio almacén de base de datos.

Se proporciona un almacén de base de datos predeterminado llamado defaultDatabaseStore y se activa configurando el origen de datos predeterminado, llamado DefaultDataSource.

O bien, puede configurar un almacén de base de datos diferente utilizando un elemento databaseStore y configurar la persistencia por lotes para utilizarlo añadiendo un

batchPersistence con un atributo jobStoreRef que hace referencia a databaseStore.

Consideraciones sobre la agrupación de conexiones de base de datos por lotes Java

El tiempo de ejecución por lotes Java en general sigue un patrón get-use-close cuando se realiza una llamada a la base de datos y normalmente no se mantiene en las conexiones JDBC durante más tiempo que el que las utiliza.Esto significa que la cuestión del número de conexiones necesarias para ejecutar un determinado número de trabajos y particiones en un servidor es una decisión que queda casi totalmente en manos del administrador.

No es necesario configurar el tamaño de la agrupación de conexiones para que sea mayor o igual que el número de trabajos y particiones en ejecución para evitar puntos muertos. No obstante, una contención de recursos debida a un número excesivamente bajo de conexiones podría dar lugar a un rendimiento por debajo del óptimo. También habrá un número mínimo de conexiones necesarias, probablemente superior a 1, para ejecutar rutas especiales como, por ejemplo, la activación de los componentes por lotes. Los administradores pueden empezar con los valores predeterminados y utilizar, por ejemplo, las métricas y la supervisión de las agrupaciones de conexiones para equilibrar el consumo de recursos con el rendimiento.  Esto se aplica a la utilización del entorno de ejecución de las conexiones JDBC. Puede que los administradores aún necesiten considerar la agrupación de conexiones JDBC, porque la use el código de aplicación.

Creación manual de tablas de base de datos versus creación automática

De forma predeterminada, el entorno de ejecución por lotes crea de forma automática tablas no existentes en el almacén de base de datos de persistencia por lotes.  Este comportamiento de creación automática predeterminado también amplía las tablas existentes y la creación de nuevas columnas en los casos donde se ha aplicado un mantenimiento que contribuye a dichas definiciones de columna nuevas.

De forma alternativa, se puede utilizar el script ddlGen para generar un DDL en la configuración del servidor. Si es necesario, se puede personalizar el DDL antes de crear manualmente las tablas. Este DDL también incorpora la configuración de servidor como, por ejemplo, schema y tablePrefix, y contiene el SQL adecuado al tipo de base de datos del origen de datos referenciado por el almacén de base de datos.

Nota: DDL personalizado debe utilizar ID de clave primaria enteros positivos. Como limitación para la persistencia de base de datos, el proceso por lotes Java no acepta ID de enteros negativos o cero persistidos en las columnas de identidad de clave primaria. El tiempo de ejecución del contenedor de proceso por lotes Java sólo ejecuta trabajos que utilizan ID de trabajo de enteros positivos persistidos en las columnas de identidad de clave primaria.

La creación automática de tablas se puede inhabilitar utilizando el atributo createTables="false" en databaseStore. Esta opción puede utilizarse para garantizar que se usen tablas creadas manualmente en lugar de usar tablas creadas automáticamente si el entorno de ejecución por lotes, de forma inesperada, no puede encontrar las tablas creadas manualmente.

Para obtener información sobre la creación manual de tablas personalizando el DDL generado, incluidas las posibles personalizaciones, consulte el libro blanco Liberty Batch-Job Repository Configuration . Aunque este documento técnico es para DB2® en sistemas operativos z/OS® , puede encontrar la información útil para otras bases de datos y plataformas.

Ejemplos de configuración de persistencia

Almacén de base de datos predeterminado con las tablas creadas automáticamente configuradas con RUNTIMEDB de la base de datos Derby:

<!-- Derby JDBC driver --> 
<library id="DerbyLib"> 
    <fileset dir="${server.config.dir}/resources/derby" /> 
</library> 

<!-- Data source for batch tables, and possibly other components. --> 
<dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    <properties.derby.embedded  
        databaseName="${server.config.dir}/resources/RUNTIMEDB"     
        createDatabase="create" 
        user="user" password="pass" /> 
</dataSource> 

Almacén de base de datos específico de lotes con tablas creadas manualmente, esquema personalizado, prefijo de tabla y origen de datos por lotes

<batchPersistence jobStoreRef="BatchDatabaseStore"/>

<!-- DB Store config only used by batch components -->
<databaseStore id="BatchDatabaseStore" dataSourceRef="BatchDS"
    createTables="false" schema="HLQ" tablePrefix="JB1"/> 

<!-- Data source for batch tables --> 
<dataSource id="BatchDS"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
     ...
</dataSource> 

Almacén de base de datos predeterminado con configuración automática, esquema personalizado, tablas creadas automáticamente, origen de datos predeterminado:

<!-- DB Store used by batch and possibly other runtime components. --> 
<databaseStore id="defaultDatabaseStore" schema="HLQ">
    <authData user="user1" password="password1"/>  
</databaseStore>

<!-- Data source for batch tables, and possibly other components. --> <dataSource id="DefaultDataSource"> 
    <jdbcDriver libraryRef="DerbyLib" /> 
    ...
</dataSource> 

Referencia

Para obtener una descripción de la creación manual de tablas personalizando el DDL generado, incluidas las posibles personalizaciones, consulte el libro blanco: https://www.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP102716