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.