Para mi PFC tengo que desarrollar unos cuantos portlet, por lo que me estoy introduciendo en el mundo de Liferay utilizando sobre todo los libros “Liferay In Action”, “Portlets in Action” y “Aprende OpenXava con ejemplo”.
Anteriormente ya hemos hablado aquí de cómo implementar un portlet “hola mundo” e incluso un portlet para procesar un formulario. Ahora podríamos segur con un portlet que manejara la base de datos, pero antes de ponerme con al lío a tirar SQL´s quiero aprender Hibernate.
Vamos a dividir este post en 3 partes, la primera hablaremos de la arquitectura, de cómo empezar el proyecto utilizando Maven, Hibernate, MySQL, Eclipse y todas esas cosas, en el segundo post comentaremos como configurar todos los archivos y en el tercer post contaremos como es la implementación de la aplicación.
Esta serie de post están basados en los tutoriales:
Según la Wikipedia Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones.
Es decir, vamos a utilizar una clase java con la que “interactuaremos” con la base de datos. Para ello vamos a realizar una pequeña aplicación web de ejemplo. Crearemos una pequeña agenda de contactos para pelearnos con Maven, Hibernate y Spring MVC(al final ganaremos la guerra).
La aplicación quedará así:
Arquitectura de la aplicación
Para nuestra aplicación web vamos a tener una arquitectura por capas. Accederemos a la base de datos a través de una capa (DAO), esta es la capa que utiliza Hibernate. Llamaremos a la capa DAO mediante una capa de servicios. Por ello vamos a tener una interfaz llamada ContactService.
Empezando con la BD
Para este ejemplo vamos a utilizar MySQL como Base de datos.
Lo primero de todo será crear una base de datos llamada “CONTACTMANAGER” y en una primera aproximación vamos a crear una tabla llamada “CONTACTS” donde guardamos los contactos de nuestra agenda. Los datos que vamos a guardar como mínimo son: un id (clave primaria), firstname, lastname, telephone, mail y created:
CREATE TABLE CONTACTS ( id INT PRIMARY KEY AUTO_INCREMENT, firstname VARCHAR(30), lastname VARCHAR(30), telephone VARCHAR(15), email VARCHAR(30), created TIMESTAMP DEFAULT NOW() );
Creando el proyecto con Maven
Este ha sido uno de los puntos más complicados, crear el proyecto con Maven administrar las dependencias y que todo funcione correctamente.
Para que os hagáis una idea, esta es una muestra de la cantidad de veces que he tenido que buscar en Google cuando algo no funcionaba (menos mal que siempre está Stackoverflow)
Todo eso son errores que daba la aplicación y que he ido solucionando poco a poco, así que si falla no desesperéis.
El proyecto en Eclipse lo hemos llamado demoweb-hibernate.
Estructura del proyecto
Como ya hemos comentado la aplicación utiliza Maven para construir y gestionar dependencias. Así que lo primero que tenemos que hacer es (utilizando M2Eclipse) es crear un nuevo proyecto de tipo “webapp”
Ahora antes de configurar el archivo pom.xml vamos a crear/explicar los paquetes necesarios en nuestra aplicación.
Crear siguiendo los paquetes en src / main / java carpeta.
com.jesuslc.contact.controller – Este paquete contiene las clases del controlador Spring para nuestra aplicación de gestión de contactos.
com.jesuslc.contact.form – Este paquete contendrá la clase sobre la que se “sustenta” Hibernate. Aquí tendremos una clase POJO simple, con los diferentes atributos, que serán los mismos que los de la tabla
com.jesuslc.contact.service – Este paquete contiene código para la capa de servicios para nuestra aplicación de gestión de contactos. La capa de servicios tendrá una interfaz ContactService y su correspondiente clase de implementación.
com.jesuslc.contact.dao – Esta es la capa DAO de aplicación. Consiste en una interfaz ContactDAO y una implementación correspondiente. La capa DAO usará la API de Hibernate para interactuar con la base de datos.
En el siguiente post vamos a configurar el archivo hibernate.cfg.xml y el archivo message_es.properties aunque de este ya sabemos cosillas 😉
Ahora vamos a configurar el pom.xml
Tenemos que abrir el archivo, ir a la pestaña “Dependencies “ e ir añadiendo todas las librerías que va a necesitar el proyecto.
Hay un grupo de dependencias de Spring, e el que hemos hecho un pequeño hack. Para que no halla líos con las diferentes versiones de Spring lo que hemos hecho ha sido definir una propiedad que será la versión de Spring que vamos a utilizar en nuestra aplicación. Todas las versiones de las dependencias (librerías) tienen como referencia esta propiedad, así todas las librerías van a tener la misma versión 😉
Estas son las dependencias:
Aquí dejo el archivo pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jesuslc</groupId> <artifactId>demoweb-hibernate</artifactId> <packaging>war</packaging> <version>1</version> <name>demoweb-hibernate Maven Webapp</name> <url>http://maven.apache.org</url> <description></description> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.10</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>20030825.184428</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>20030825.183949</version> </dependency> <dependency> <groupId>hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version> <type>pom</type> </dependency> </dependencies> <properties> <org.springframework.version>3.2.1.RELEASE</org.springframework.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
De momento es todo, aún no funciona la aplicación, tenemos que configurar una serie de archivos para empezar a picar código y que nuestra aplicación funcione. Pero es un comienzo.
Actualización
Aquí la parte 2: https://jesuslc.com/2013/03/25/poco-a-poco-con-maven-spring-hibernate-parte-2/
Aquí la parte 3: https://jesuslc.com/2013/04/02/poco-a-poco-con-maven-spring-hibernate-parte-3/
Aquí tenemos un enlace al código https://github.com/jeslopcru/DemowebMSH
Comenta la entrada