openxava / documentación / Configuración para Microsoft SQL Server

Si estás usando una versión de OpenXava anterior a la 7.0 mira las instrucciones antiguas
Configurar tu aplicación OpenXava contra MS SQL Server es muy fácil, básicamente has de añadir una dependencia al controlador JDBC para MS SQL Server en tu proyecto y definir correctamente la base de datos. No necesitas tocar el código de tu aplicación.
Asumimos que ya tienes el MS SQL Server instalado y funcionando.
Sigue este video para configurar Microsoft SQL Server en OpenXava:
Sigue este video
Si no te gustan los videos, sigue las instrucciones a continuación.

Añadir controlador JDBC para MS SQL Server 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>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.6.1.jre8</version>
</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 a MS SQL Server, algo así:
<Resource name="jdbc/MiAplicacionDS" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="root" password="ao49fmsk"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://localhost:1433;databaseName=miaplicaciondb"/>
La diferencia está en driverClassName y url. La parte final de la url, miaplicaciondb en este ejemplo, es el nombre de tu base de datos MS SQL Server. Obviamente, en lugar de localhost deberías poner la dirección del servidor que alberga MS SQL Server. 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.

Crear manualmente el esquema

La versión 5.6 de Hibernate tiene un bug que no crea ya automáticamente el esquema, por lo que las tablas tampoco. Si te encuentras con este error, la solución es crear manualmente el esquema en la base de datos ejecutando la sentencia:
CREATE DATABASE miaplicaciondb;
Así las tablas se crearán una vez que se inicie la aplicación.

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 base de datos MS SQL Server. Si fallara, verifica que tu base de datos está funcionando, que el usuario y la contraseña son correctos, que la IP del servidor es correcta. Verifica también que el usuario tiene privilegios para crear bases de datos y tablas (si quieres usar la generación automática de esquema de OpenXava, no necesario si las tablas ya existen).

Problema con conexión segura

Si al ejecutar la aplicación no funciona y en algún punto de la traza de error te encuentras esto:


Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. 
Error: "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". ClientConnectionId:6b818518-97bd-4b0d-adb2-153605134e2e

Para resolver el problema añade el sufijo ;encrypt=true;trustServerCertificate=true; a la URL de conexión, dejando tu definición de fuente de datos en context.xml de esta forma:

<Resource name="jdbc/MiAplicacionDS" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="root" password="ao49fmsk"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://localhost:1433;databaseName=miaplicaciondb;encrypt=true;trustServerCertificate=true;"/>

Otros problemas

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.