openxava / documentación / JBoss

Puedes desplegar tu aplicación OpenXava en JBoss, de hecho puedes desplegar tu aplicación OpenXava en cualquier servidor Java EE. Pero, cada servidor de aplicaciones tiene sus propios trucos, por eso te damos aquí una guía paso a paso para desplegar en JBoss.
Esta guía usa JBoss 6.1.0.Final y OpenXava 5.3.1. Asumimos que eres nuevo en JBoss. Desplegaremos la aplicación de ejemplo MySchool incluida en la distribución de OpenXava, contra PostgreSQL.

Fuente de datos

Para definir la fuente de datos crea un archivo llamado my-school-ds.xml en jboss-6.1.0.Final/server/default/deploy con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
 
<datasources>
    <local-tx-datasource>
 
        <jndi-name>MySchoolDS</jndi-name>
        <connection-url>jdbc:postgresql://localhost/my-school</connection-url>
        <driver-class>org.postgresql.Driver</driver-class>
 
        <user-name>postgres</user-name>
        <password>openxava</password>
 
        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <track-statements/>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
 
    </local-tx-datasource>
</datasources>
Por supuesto, deberías adaptar la URL de conexión, la clase del controlador, el usuario y la contraseña a tu propia base de datos.

Controlador JDBC

Copia el jar JDBC para tu base de datos en jboss-6.1.0.Final/server/default/lib. En nuestro ejemplo copiamos ahí postgresql-8.3-604.jdbc3.jar para trabajar con nuestro PostgreSQL 8.3.

Tu persistence.xml

En el persistence.xml de tu proyecto (en persistence/META-INF) has de hacer dos cambios. El primero es cambiar el formato de la URL, cambia:
<non-jta-data-source>java://comp/env/jdbc/MySchoolDS</non-jta-data-source>
Por:
<non-jta-data-source>java:/MySchoolDS</non-jta-data-source>
El segundo cambio es enumerar explícitamente todas las entidades de tu proyecto. Añade las siguientes entradas:
<class>org.openxava.school.model.Teacher</class>
<class>org.openxava.school.model.Pupil</class>
El persistence.xml completo para MySchool podría ser:
<?xml version="1.0" encoding="UTF-8"?>
 
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">
 
    <persistence-unit name="default">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <non-jta-data-source>java:/MySchoolDS</non-jta-data-source>
        <class>org.openxava.session.GalleryImage</class>
        <class>org.openxava.school.model.Teacher</class>
        <class>org.openxava.school.model.Pupil</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        </properties>
    </persistence-unit>
 
</persistence>
Recuerda poner el dialecto correspondiente a tu base de datos.

El archivo web.xml de OpenXava (sólo para OpenXava 5.2, 5.2.1, 5.3, 5.3.1)

Este paso no aplica a XavaPro
Quita la definición del servlet organization del proyecto OpenXava. Edita OpenXava/web/WEB-INF/web.xml y elimina o comenta las siguiente declaraciones:
<!-- Elimina o comenta la siguiente declaración -->
<servlet>
    <servlet-name>organization</servlet-name>
    <servlet-class>com.openxava.naviox.web.OrganizationServlet</servlet-class>
</servlet>
 
...
 
<!-- Elimina o comenta la siguiente declaración -->
<servlet-mapping>
    <servlet-name>organization</servlet-name>
    <url-pattern>/o/*</url-pattern>
</servlet-mapping>

Desactiva los desplegadores JPA (opcional)

La configuración de arriba es suficiente para ejecutar tu aplicación en JBoss. Sin embargo, de esta forma JBoss mostrará. el siguiente error:
Deployment "persistence.unit:unitName=MySchool.war#default" is in error due to the following reason(s):
java.lang.RuntimeException: Specification violation [EJB3 JPA 6.2.1.2]
- You have not defined a jta-data-source for a JTA enabled persistence context named: default
Puedes ignorar este error y todo funcionará a la perfección. Pero, si quieres quitarlo, puedes. Edita el archivo jpa-deployers-jboss-beans.xml de la carpeta jboss-6.1.0.Final/server/default/deployers/ejb3.deployer/META-INF y elimina o comenta el bean PersistenceParsingDeployer:
<!-- Elimina o comenta la siguiente declaración -->
<bean name="PersistenceParsingDeployer" class="org.jboss.jpa.deployers.PersistenceParsingDeployer">
 
...
 
</bean>
Ten cuidado, porque esta modificación puede afectar otras aplicaciones desplegadas en tu JBoss, especialmente si usan el motor de JPA provisto por JBoss.

Despliega y ejecuta tu aplicación

Ejecuta la tarea Ant createWar de tu build.xml. Creará un MySchool.war en la carpeta workspace.dist/MySchool.dist. Coge ese war y copialo en la carpeta jboss-6.1.0.Final/server/default/deploy. Arranca JBoss ejecutando run.bat/.sh en jboss-6.1.0.Final/bin. Abre tu navegador, ve a http://localhost:8080/MySchool y verás tu aplicación funcionando en JBoss.