Tutorial OpenXava (1): Empezando

Tutorial Openxava Aplicación Web Java en 5 pasos con PostgreSQL

¿Qué es OpenXava?

Utilizando la definición de sus creadores:

OpenXava es un marco de trabajo AJAX para desarrollo rápido de aplicaciones web empresariales.

Con OpenXava sólo has de escribir las clases del dominio con Java para obtener una aplicación web lista para producción.

Vamos a probarlo y a desarrollar un ejemplo con las funcionalidades para probar OpenXava para el desarrollo de aplicaciones web empresariales.

Tutorial OpenXava

  1. DEFINICIÓN DEL PROYECTO
  2. CREACIÓN DE LA BASE DE DATOS
  3. CREACIÓN DEL PROYECTO Y CONFIGURACIÓN
  4. COMPROBACÍON DE INSTALACIÓN Y CONFIGURACIÓN
  5. EL RESULTADO FINAL


 

1. DEFINICIÓN DEL PROYECTO

Introducción

Vamos a crear un proyecto para comprobar el desarrollo de aplicaciones con OpenXava, no se pretende hacer una explicación exhaustiva del desarrollo de aplicaciones con OpenXava, sino simplemente desarrollar una aplicación con una funcionalidad y una presentación que nos permite ver hasta donde podemos llegar con OpenXava.

Se creará una base de datos propia para el proyecto y todo el desarrollo se hará desde cero, con la ayuda y documentación que se nos facilita desde OpenXava.

 

Definición del proyecto

El proyecto consiste en la administración de clientes para diferentes empresas, para ello se plantea la necesidad de tener la información de la empresa y de los clientes, cada empresa podrá tener múltiples clientes, para el caso de estudio se plantea que ambas entidades tengan los campos básicos y direcciones que podrán ser una o varias. Así mismo, y para completar el proyecto con el desarrollo que creemos necesario, se plantea que la tabla clientes tenga como tablas asociadas las tablas de: monedas, países e idiomas, que podrían ser tablas de uso general en la aplicación, y una tabla más específica como podría ser formas de pago.

Vamos a desarrollar una aplicación CRUD con la generación de código que nos proporciona OpenXava para la base de datos customerdb, también, vamos a darle a nuestra aplicación las siguientes características:

  • Seguridad: añadiremos control acceso.
  • Multiidioma: nuestra aplicación debe soportar varios idiomas.
  • Informes: inclusión de informes con JasperReports.
  • Look & Fell Web UI: veremos como podemos modificar la presentación web de nuestro proyecto.
  • Otras necesidades: según vayamos avanzando con el proyecto iremos profundizando en otras características.

Una forma fácil de extender el proyecto será relacionar las tablas generales de monedas, países e idiomas a las empresas.


 

2. CREACIÓN DE LA BASE DE DATOS

 

Esquema con draw.io

Para hacernos unas idea de las relaciones entre las tablas vamos a presentar el siguiente esquema.

Learning Project Customerdb Database Esquema Inicial

Esquema SQL

Para desarrollar este esquema vamos a necesitar las siguientes tablas, a continuación se explica su utilidad y algunas características básicas, el resto irá directamente sobre el código SQL:

Learning Project
TABLA
DESCRIPCIÓN
CARACTERÍSTICAS DE DISEÑO
cb_enterprise
Empresas de la aplicación, cada empresa tendrá sus clientes.
Las empresas tendrán definido inicialmente: idioma, país y moneda, así como otros campos básicos propios.
cb_customer
Tabla general de cliente, donde se almacenarán los clientes de las diferentes empresas.
Tendrán definido inicialmente: idioma, país, direcciones, empresas, métodos de pago y moneda, así como otros campos básicos propios.
cb_addresses
Tabla de registro de las direcciones, se asocian aquí las direcciones que tienen un cliente.
Registro para asociar las direcciones al cliente, cada cliente tendrá un número ilimitado de direcciones con cb_address relacionado mediante cb_addresses (es básicamente una tabla relacional)
cb_address
Tabla de dirección donde se guardan los datos de la dirección en sí.
Tabla de dirección que tendrá los campos generales de una dirección, así como números de teléfono, transportista y tipos de dirección.
cb_language
Tabla con los idiomas registrados en la aplicación, se podrá relacionar con múltiples tablas.
cb_currency
Tabla con las monedas registradas en la aplicación, se podrá relacionar con múltiples tablas.
cb_country
Tabla con los países registrados en la aplicación, se podrá relacionar con múltiples tablas.
Para cada país se especificará la moneda y el idioma utilizado por defecto.
cb_paymentmethod
Métodos de pago definidos para el cliente u otras entidades.

A continuación, una imagen con el el Esquema E-R de Customerdb donde se muestran las relaciones reales de la base de datos, con los nombres de las claves foráneas, …

Aquí solo voy publicar el script de la base de datos de PostgreSQL, para más información, así como para instalar PostgreSQL y como se crea la base de datos sobre PostgreSQL, la puedes obtener aquí: Learning Project Postgresql (1): Preparando el entorno, aquí y una serie de post que continúan a este, se explican en detalle la creación de las tablas en PostgreSQL, parándonos en la codificación SQL en PostgreSQL: Tutorial Postgresql (2): Creación de las tablas en SQL 

 

Sql de la base de datos

Si ya te has informado o si quieres descargarte ya el SQL desarrollado en PostgreSQL para este diseño aquí lo tienes:

 

Esquema de customerdb

A continuación, una imagen donde se muestran las relaciones reales de la base de datos, con los nombres de las claves foráneas, …

Learning Project Customerdb Database Entity Relation

Esquema E-R de Customerdb propuesto en Learning Project


 

3. CREACIÓN DEL PROYECTO Y CONFIGURACIÓN

Instalación y configuración de Openxava

Desde OpenXava nos facilitan en su wiki una guía rápida para instalar y realizar la configuración del proyecto, no lo vamos a explicar mejor, así que te recomiendo que te leas este post para la instalación: Inicio rápido con OpenXava, y para realizar el primer ejemplo y ver que todo funciona correctamente.  Este sería el resumen:

Instala las herramientas necesarias

  1. Descarga e instala http://www.openxava.org/downloads, descarga la última distribución y descomprimela en donde quieras trabajar.
  2. Instala el jdk, por ejemplo, desde Oracle. http://www.oracle.com/technetwork/java/javase/downloads/index.html, OpenXava funciona con Java 8, 7 y 6.
  3. Descarga e instala Eclipse ya que este va a ser el IDE con el que vamos a trabajar:  http://www.eclipse.org/downloads, la versión que necesitamos es ‘Eclipse IDE for Java EE Developers’.

Configuramos Tomcat

Has de indicar al Tomcat donde has instalado el JDK en mi caso es Linux así que añado la siguiente línea al principio de catalina.sh en el directorio tomcat/bin:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk

Probamos la instalación de OpenXava

  • Arrancamos apache para ello lanzamos startup.sh (en mi caso, ya que utilizo linux, consulta aquí para otros sistemas) que se encuentra la carpeta tomcat/bin de OpenXava.
  • Arrancamos Eclipse, te preguntará que escojas el workspace, escoge el que viene incluido con OpenXava, lo encontrarás dentro de la carpeta descomprimida.
  • La distribución de OpenXava viene con una aplicación de ejemplo llamada MySchool, para ejecutarla sigue los siguientes pasos:
    1.  Construye y despliega el proyecto: ejecuta MySchool.deployWar
    2. Ve a http://localhost:8080/MySchool/modules/Teacher usando tu navegador para ver la aplicación en acción:

quick-start_es050.png

  • Mi recomendación es que acabes el ejemplo en la página de inicio rápido con OpenXava antes de empezar con el proyecto de Customerdb.

Creación del proyecto

Para facilitarnos esta tarea cada vez que queremos crear un nuevo proyecto OpenXava usamos la utilidad: CrearNuevoProyecto.xml dentro del proyecto OpenXavaPlantilla, con lo que dando nombre a nuestro proyecto ya tenemos creada la estructura básica del proyecto y solo nos tenemos que dedicar a la configuración.

Configuración de context.xml

 

<Resource name="jdbc/CustomerdbDS" auth="Container"
        type="javax.sql.DataSource"  maxActive="20" maxIdle="5" maxWait="10000"
        username="xulescode" password="xulescode"
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://localhost/customerdb"/>  

Configuración de persistence.xml

    <!-- JUnit PostgreSQL -->
    <persistence-unit name="junit">
        <properties>
            <!-- PostgreSQL driver class -->
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <!-- PostgreSQL dialect -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/customerdb" />
            <!-- The user of the database -->
            <property name="hibernate.connection.username" value="xulescode" />
            <!-- The password of the user of the database -->
            <property name="hibernate.connection.password" value="xulescode" />
        </properties>
    </persistence-unit> 


 

4. COMPROBACIÓN DE INSTALACIÓN Y CONFIGURACIÓN

Para esto creamos la primera clase de nuestro proyecto y comprobamos que todo está funcionando correctamente.

Para hacerlo fácil y comprobar que tenemos todo bien configurado creamos la clase CbLanguage para la tabla cb_language.

Creamos la clase CbLanguage para la tabla cb_language

En esta primera aproximación lo único que haremos es hacer las definiciciones básicas:

  • Definir el nombre de la tabla:@Table(name=”cb_language”)
  • Definimos la clave primaria de la tabla:
    	 @Id
    	 @Required
    	 @Column(name = "idlanguage", length = 6, nullable = true)
    	 private String idlanguage;
  • El resto es la definición de las columnas indicando su nombre, tamaño y si pueden ser o no NULL.
  • Una vez escrito este código, generamos los getters y setters para todos los valores.
package org.xulescode.customerdb.model;

import javax.persistence.*;
import org.openxava.annotations.*;

@Entity
@Table(name="cb_language")
public class CbLanguage {

    @Id
    @Required
    @Column(name = "idlanguage", length = 6, nullable = true)
    private String idlanguage;

    @Required
    @Column(name = "namelanguage", length = 60, nullable = false)
    private String name;

    @Required
    @Column(name = "isactive", length = 1, nullable = false)
    private String isactive;

    @Column(name = "languageiso", length = 2, nullable = true)
    private String languageiso;

    @Column(name = "countrycode", length = 2, nullable = true)
    private String countrycode;

    @Required
    @Column(name = "isbaselanguage", length = 1, nullable = false)
    private String isbaselanguage;

    @Required
    @Column(name = "issystemlanguage", length = 1, nullable = false)
    private String issystemlanguage;

    // Generar getters y setters de todos los campos
    ...
} 

 

Ahora usaremos las utilidades de OpenXava para actualizar el la configuración y hacer las pruebas:

    • En nuestro proyecto tenemos una fichero ant de ejecución build.xml con diferentes funcionalidades, nosotros usaremos ahora: desplegarWar.
    • Con esto actualizamos el war y podemos ejecutar la aplicación con las últimas actualizaciones.
    • El resultado:
      • Aplicación con acceso de usario y contraseña con acceso a los módulos creado en este caso el módulo CbLanguage correspondiente a nuestra clase.


 

5. EL RESULTADO FINAL

A continuación unas imágenes del resultado final:

  • En inicio podemos seleccionar fácilmente el nuevo módulo creado, más adelante veremos como cambiar el nombre al módulo y a todos los campos:

OpenXava Customerdb 01 acceso usuario

  • Seleccionamos el módulo creado como hicimos en el proyecto anterior de prueba en el menú Inicio, al seleccionarlo cargamos la lista de CbLanguage:

OpenXava Customerdb 02 Selección de módulo

  • Selección de la lista antes de crear ningún elemento:

OpenXava Customerdb 03 CbLanguage Lista

  • Creación de un nuevo elemento:

OpenXava Customerdb 04 CbLanguage Nuevo elemento

  • Rellenamos los campos de CbLanguage para crear el idioma Español con ES:

OpenXava Customerdb 06 CbLanguage Detalle

  • Listado en modo Lista y detalle de CbLanguage para el idioma creado:

OpenXava Customerdb 05 Lista mas detalle

Y hasta aquí la primera publicación del proyecto Learning Project OpenXava , en siguientes publicaciones veremos como crear los otros módulos para las otras tablas de la base de datos siguiendo el modelo: Model Driven de OpenXava, como modificar la presentación y la colocación de todos los elementos.

Tutorial OpenXava Empezando

Espero que te haya sido útil

 

Continúa con la guía de OpenXava con el siguiente capítulo:

Tutorial Openxava (2): Creación del resto de las clases para las tablas

Vamos a finalizar la creación de las clases para el resto de las tablas del proyecto, nuestro objetivo es finalizar todas las clases cumpliendo su funcionalidad de crear, eliminar y consultar sus datos, manejando todas las relaciones.

Aquí se explica como establecer las relaciones entre las clases usando JPA y también estableciendo un primer contacto con las anotaciones de OpenXava.

4 respuestas en “Tutorial OpenXava (1): Empezando

  1. Alnovo

    Hola.
    He seguido paso a paso el ejemplo y cuando trato de lanzar mi aplicación no me aparecen registros en la tabla. El error que se prouduce es el siguiente:

    “Cannot load JDBC driver class ‘org.postgresql.Driver’
    java.lang.ClassNotFoundException: org.postgresql.Driver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)”

    ¿podrías indicarme si me falta algo por configurar?

    Gracias y un saludo.

  2. Julio Yáñez Novo Autor de la entrada

    Hola Alnovo.

    El error es porque no encuentra el drive jdbc, simplemente añades la librería del jdbc de Postgresql en el tomcat dentro de la carpeta lib, si estás utilizando el que viene con OpenXava esta será la ruta …/openxava-5.3/tomcat/lib.

    En cuanto al driver lo puedes descargar desde la página de PostgreSQL aquí: https://jdbc.postgresql.org/download.html

    Un saludo.

  3. alnovo

    Hola.
    Sigo teniendo problemas con la BBDD. Una vez instalado el driver ya no me da error de conexión pero no conisgo que me devuelva resultados. He puesto en la clase que me saque solo una columna. Pero ni así.

    El log:

    Mar 07, 2016 10:46:06 PM org.apache.catalina.core.AprLifecycleListener init
    INFORMACIÓN: La biblioteca nativa de Apache Tomcat basada en ARP que permite un rendimiento óptimo en entornos de desarrollo no ha sido hallada en java.library.path: C:\Program Files\Java\jre1.8.0_74\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_74/bin/client;C:/Program Files/Java/jre1.8.0_74/bin;C:/Program Files/Java/jre1.8.0_74/lib/i386;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\ASUS Security Center\ASUS Security Protect Manager\bin;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Alberto\EntornoDesarrollo\eclipse;;.
    Mar 07, 2016 10:46:06 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
    ADVERTENCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:adega’ did not find a matching property.
    Mar 07, 2016 10:46:06 PM org.apache.coyote.AbstractProtocol init
    INFORMACIÓN: Initializing ProtocolHandler [“http-bio-8080”]
    Mar 07, 2016 10:46:06 PM org.apache.coyote.AbstractProtocol init
    INFORMACIÓN: Initializing ProtocolHandler [“ajp-bio-8009”]
    Mar 07, 2016 10:46:06 PM org.apache.catalina.startup.Catalina load
    INFORMACIÓN: Initialization processed in 1003 ms
    Mar 07, 2016 10:46:06 PM org.apache.catalina.core.StandardService startInternal
    INFORMACIÓN: Arrancando servicio Catalina
    Mar 07, 2016 10:46:06 PM org.apache.catalina.core.StandardEngine startInternal
    INFORMACIÓN: Starting Servlet Engine: Apache Tomcat/7.0.50
    Mar 07, 2016 10:46:08 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
    INFORMACIÓN: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [188] milliseconds.
    Mar 07, 2016 10:46:09 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: DWR Version 2.0.10 starting.
    Mar 07, 2016 10:46:09 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: – Servlet Engine: Apache Tomcat/7.0.50
    Mar 07, 2016 10:46:09 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: – Java Version: 1.8.0_74
    Mar 07, 2016 10:46:09 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: – Java Vendor: Oracle Corporation
    Mar 07, 2016 10:46:10 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: Probably not an issue: org.jdom.Document is not available so the jdom converter will not load. This is only a problem if you wanted to use it.
    Mar 07, 2016 10:46:10 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: Probably not an issue: org.jdom.Element is not available so the jdom converter will not load. This is only a problem if you wanted to use it.
    Mar 07, 2016 10:46:10 PM org.apache.coyote.AbstractProtocol start
    INFORMACIÓN: Starting ProtocolHandler [“http-bio-8080”]
    Mar 07, 2016 10:46:10 PM org.apache.coyote.AbstractProtocol start
    INFORMACIÓN: Starting ProtocolHandler [“ajp-bio-8009″]
    Mar 07, 2016 10:46:10 PM org.apache.catalina.startup.Catalina start
    INFORMACIÓN: Server startup in 3739 ms
    Mar 07, 2016 10:47:00 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
    Mar 07, 2016 10:47:00 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
    Mar 07, 2016 10:47:00 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
    Mar 07, 2016 10:47:00 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
    INFO: HHH000204: Processing PersistenceUnitInfo [
    name: default
    …]
    Mar 07, 2016 10:47:01 PM org.hibernate.Version logVersion
    INFO: HHH000412: Hibernate Core {4.3.9.Final}
    Mar 07, 2016 10:47:01 PM org.hibernate.cfg.Environment
    INFO: HHH000206: hibernate.properties not found
    Mar 07, 2016 10:47:01 PM org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: HHH000021: Bytecode provider name : javassist
    Mar 07, 2016 10:47:01 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager
    INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
    Mar 07, 2016 10:47:02 PM org.hibernate.dialect.Dialect
    INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
    Mar 07, 2016 10:47:02 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
    INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
    Mar 07, 2016 10:47:03 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory
    INFO: HHH000397: Using ASTQueryTranslatorFactory
    Mar 07, 2016 10:47:03 PM org.hibernate.validator.internal.util.Version
    INFO: HV000001: Hibernate Validator 5.1.3.Final
    Mar 07, 2016 10:47:03 PM org.hibernate.id.UUIDHexGenerator
    WARN: HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUIDGenerator instead
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000228: Running hbm2ddl schema update
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000102: Fetching database metadata
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000396: Updating schema
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000261: Table found: public.images
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000037: Columns: [image, id, gallery]
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000108: Foreign keys: []
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000126: Indexes: [images_pkey]
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000261: Table found: public.temporada
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000037: Columns: [idtemporada, codigo]
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000108: Foreign keys: []
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.TableMetadata
    INFO: HHH000126: Indexes: [temporada_pkey]
    Mar 07, 2016 10:47:04 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
    INFO: HHH000232: Schema update complete
    Mar 07, 2016 10:47:04 PM org.openxava.util.Labels get
    ADVERTENCIA: Imposible internacionalizar elemento con id Temporada
    Mar 07, 2016 10:47:04 PM org.openxava.controller.ModuleManager
    INFORMACIÓN: OpenXava 5.4.1 (2015-12-15)
    Mar 07, 2016 10:47:04 PM org.openxava.util.Labels getWithoutCache
    ADVERTENCIA: Imposible internacionalizar elemento con id Temporada
    Mar 07, 2016 10:47:05 PM org.openxava.util.Labels getWithoutCache
    ADVERTENCIA: Imposible internacionalizar elemento con id select
    Mar 07, 2016 10:47:05 PM org.openxava.util.Labels getWithoutCache
    ADVERTENCIA: Imposible internacionalizar elemento con id cpk_temporada
    Mar 07, 2016 10:47:05 PM org.openxava.util.Labels getWithoutCache
    ADVERTENCIA: Imposible internacionalizar elemento con id cpk_temporada
    Mar 07, 2016 10:47:05 PM org.openxava.tab.impl.JPATabProvider nextBlock
    DETALLADO: [JPATabProvider.nextBlock] Ejecutando SELECT e.cpk_temporada, e.cpk_temporada from Temporada e con argumentos
    Mar 07, 2016 10:47:05 PM org.openxava.tab.impl.TableModelBean getRow
    DETALLADO: nextChunk=313
    Mar 07, 2016 10:47:06 PM org.directwebremoting.util.CommonsLoggingOutput info
    INFORMACIÓN: Exec: Module.getStrokeActions()

    La clase:


    @Entity
    @Table(name=”TEMPORADA”)
    public class Temporada {

    @Id
    @Required
    @Column(name=”IdTemporada”, length=10,nullable=false)
    private Integer cpk_temporada;
    public Integer getCpk_temporada() {
    return cpk_temporada;
    }

    public void setCpk_temporada(Integer cpk_temporada) {
    this.cpk_temporada = cpk_temporada;
    }
    }

    En el log me llama la atención la query que está ejecutando:
    “DETALLADO: [JPATabProvider.nextBlock] Ejecutando SELECT e.cpk_temporada, e.cpk_temporada from Temporada e con argumentos
    M”

    No se me ocurre qué revisar puesto que esto lo compone “sólo” y hay algo que se me escapa.

    ¿cómo puedo comprobar que la conexión realmente está funcionando y está accediendo a la bbdd que debe?

  4. Julio Yáñez Novo Autor de la entrada

    Hola alnovo.

    Perdón por tardar tanto en responder he estado unos días desconectado de la web por motivos familiares, vamos a ver si te puedo ayudar.

    Empecemos por el principio, te voy a indicar como comprobar que tu conexión con la base de datos es correcta. He cogido tus datos para hacer un proyecto rápido

    1. Creo un proyecto Alnovo con la utilidad de Openxava.
    2. Configuro una nueva conexión en persistence.xml

       <!-- JUnit PostgreSQL -->
    	<persistence-unit name="junit">
    		<properties>
    			<!-- PostgreSQL driver class -->
    			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
    			<!-- PostgreSQL dialect -->
    			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
    			<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.0.26/temporadadb" />			
    			<!-- The user of the database -->
    			<property name="hibernate.connection.username" value="xulescode" />
    			<!-- The password of the user of the database -->
    			<property name="hibernate.connection.password" value="xulescode" />
    		</properties>
    	</persistence-unit>   
    

    3. Configuro context.xml en el Tomcat del Apache

    	<Resource name="jdbc/AdegaAlbertoDS" auth="Container"
    				type="javax.sql.DataSource"  maxActive="20" maxIdle="5" maxWait="10000"
    				username="xulescode" password="xulescode" driverClassName="org.postgresql.Driver"
    				url="jdbc:postgresql://192.168.0.26/temporadadb"/>	
    

    4. Creo la clase Temporada:

    package org.xulescode.temporadadb.model;
    
    import javax.persistence.*;
    
    import org.openxava.annotations.*;
    
    @Entity
    @Table(name = "TEMPORADA")
    public class Temporada {
    
    	@Id
    	@Required
    	@Column(name = "IdTemporada", length = 10, nullable = false)
    	private Integer cpk_temporada;
    
    	public Integer getCpk_temporada() {
    		return cpk_temporada;
    	}
    
    	public void setCpk_temporada(Integer cpk_temporada) {
    		this.cpk_temporada = cpk_temporada;
    	}
    
    }
    

    5. Creamos la base de datos en PostgreSQL: temporadadb
    6. VAMOS A COMPROBAR LA CONEXIÓN A LA BASE DE DATOS, para ello abrimos el fichero ant: build.xml y buscamos actualizar esquema:

    	<target name="actualizarEsquema">
    		<ant antfile="../OpenXava/build.xml" target="updateSchemaJPA">			
    			<property name="persistence.unit" value="junit"/>
    			<property name="schema.path" value="../../tomcat/lib/postgresql-9.3-1103.jdbc3.jar"/>
    		</ant>
    	</target>
    

    – Esto lo hacemos porque vamos a ejecutar un update sobre la base de datos con los datos de nuestra clase Java, con lo que se creará la tabla con los datos de Temporada.java (ASÍ COMPRUEBAS LA CONEXIÓN).

    – Ahora ejecuta build.xml, lo tienes que abrir para indicarle que ejecute el comando actualizarEsquema, así por defecto cada vez que lo lances se ejecutarán: desplegarWar, compilar, actualizarEsquema.
    7. Una vez hecho esto y comprobado que la conexión a la base de datos lanza el proyecto en el servidor.

    Hechos estos pasos te podré guiar para encontrar el fallo que tienes al ejecutar el Tomcat pero primero necesitamos descartar esto errores.

    Espero que te sea útil.

    Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *