openxava / documentación / Configuración para AS/400

Si estás usando una versión de OpenXava anterior a la 7.0 mira las instrucciones antiguas
Configurar tu aplicación OpenXava contra la DB2 de un AS/400 es muy fácil, básicamente has de añadir una dependencia al controlador JDBC para AS/400 en tu proyecto y definir correctamente la base de datos. No necesitas tocar el código de tu aplicación.

Añadir controlador JDBC para AS/400 en el proyecto

Edita el archivo pom.xml en la raíz de tu proyecto, allí añade la siguiente dependencia dentro de la parte <dependencies>:

<dependency>
    <groupId>net.sf.jt400</groupId>
    <artifactId>jt400</artifactId>
    <version>20.0.7</version>
    <classifier>java8</classifier>
</dependency>
Quizás ya tengas este código en tu pom.xml pero comentado, en ese caso simplemente descoméntalo.

Ajustar la definición de la fuente de datos

Edita src/main/webapp/META-INF/context.xml de tu proyecto y ajusta la definición de tu fuente de datos para que apunte al AS/400, algo así:
<Resource name="jdbc/MiAplicacionDS" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="root" password="ao49fmsk"
    driverClassName="com.ibm.as400.access.AS400JDBCDriver"
    url="jdbc:as400:192.168.1.8/mibiblioteca"/>
La diferencia está en driverClassName y url. Obviamente, en lugar de 192.168.1.8 deberías poner la IP de tu AS/400 y en lugar de mibiblioteca pon la biblioteca del AS/400 donde estén las tablas de la aplicación. También pon el username y password correctos. Puede que el código de arriba ya esté en tu context.xml pero comentado, en ese caso simplemente descoméntalo. No olvides comentar o quitar la fuente de datos para HSQLDB (incluida por defecto al crear un nuevo proyecto OpenXava), sólo una fuente de datos (con el mismo nombre) debería estar activa.

Actualizar persistence.xml

No necesitas tocar la unidad de persistencia default de persistence.xml (en src/main/resources/META-INF), a no ser que uses la propiedad hibernate.dialect en cuyo caso lo más fácil es quitar la propiedad hibernate.dialect. Además, deberías especificar la propiedad hibernate.default_schema para todas las unidades de persistencia, para indicar en que biblioteca de tu AS/400 están las tablas de tu aplicación (a no ser que uses @Table(schema=) en cada entidad).

Arrancar el diario

Para que tu aplicación OpenXava funcione con AS/400 tus tablas tienen que soportar transacciones. La forma más fácil de conseguirlo es creando la biblioteca para tus tablas desde SQL usando "CREATE COLLECTION MILIB". Desafortunadamente, la mayoría de las veces que trabajas con AS/400 has de hacerlo con tablas preexistentes. En este caso has de crear un diario (journal) para tu biblioteca, de esta manera:
CRTJRNRCV JRNRCV(MILIB/MIRCV) THRESHOLD(5000)
CRTJRN JRN(MILIB/MIJRN) JRNRCV(MILIB/MIRCV) MNGRCV(*SYSTEM)
CHGJRN JRN(MILIB/MIJRN) JRNRCV(*GEN) DLTRCV(*YES)
En vez de MILIB usa el nombre de tu biblioteca. Después, tienes que registrar todas las tabla por diario, así:
STRJRNPF FILE(MILIB/*ALL) JRN(MILIB/MIJRN) IMAGES(*BOTH) OMTJRNE(*OPNCLO)
Cuando en el futuro crees una nueva tabla para ser usada desde OpenXava has de registrarla por diario:
STRJRNPF FILE(MILIB/MITABLA) JRN(MILIB/MIJRN)
Si no estás familiarizado con la interfaz del AS/400 busca ayuda de algún gurú del AS/400 de tu empresa para esta tarea.

Reconstruir proyecto

Después de los cambios has de reconstruir (rebuild) tu proyecto. En OpenXava Studio pulsa con el botón derecho del ratón en tu proyecto y escoge Run As > Maven install, así:

O si tienes Maven instalado en tu ordenador y prefieres usar la línea de órdenes:

$ cd miaplicacion
$ mvn install

Nota de optimización: En lugar de mvn install, que hace un build de Maven completo, puedes usar mvn war:exploded, suficiente para aplicar los cambios de arriba para desarrollo. Puedes llamar a mvn war:exploded desde el OpenXava Studio con Run As > Maven build... y tecleando war:exploded para goal.

Ejecutar aplicacion

Ejecuta tu aplicación, debería funcionar bien contra tu IBM i. Si fallara, verifica que el usuario y la contraseña son correctos, que la IP del AS/400 es correcta. Verifica también que el diario está activado para la biblioteca y las tablas añadidas al diario, como se ha visto arriba.

Si sigue fallando pregúntanos en el foro de ayuda de OpenXava. Incluye el contenido de tu persistence.xml, context.xml (quita las contraseñas) y sobre todo la traza generada, puedes encontrar la traza en la pestaña Console del OpenXava Studio.

Problemas de rendimiento con Windows Server

Si tu aplicación Java se está ejecutando en un Windows Server y te encuentras con problemas de rendimiento, posiblemente no sea un problema del AS/400 sino un problema de configuración de red en el Windows Server. No te preocupes, el problema es fácil de solucionar, simplemente añade el parametro tcp no delay=true a la URL de conexión a la base de datos. Es decir, la definición de la fuente de datos en el context.xml podría ser:

<Resource name="jdbc/MiAplicacionDS" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="root" password="ao49fmsk"
    driverClassName="com.ibm.as400.access.AS400JDBCDriver"
    url="jdbc:as400:192.168.1.8/mibiblioteca;tcp no delay=true"/>

Fíjate en el tcp no delay=true al final de la URL.