miércoles, mayo 25, 2011

Java - Aplicación Web, Hibernate con Spring Parte II - Estructura Proyecto


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. ENTORNO


  • MySQL 5.1.
  • NetBeans IDE 6.9.1
  • Apache Tomcat
  • JDK 1.6.0 - 21

2. INTRODUCCIÓN


El proyecto se desarrolla en una aplicación web en Netbeans. Y utilizaremos un modelo de programación en capas. Se recomienda tener conocimientos previos sobre Hibernate y Spring, ya que aca abordaremos los tips de desarrollo de un proyecto Web.

3. DESARROLLO


3.1. Creación del Proyecto

Crearemos un proyecto en Netbeans y para ellos abrimos el Netbeans y nos vamos al menú File --> New Proyect y elegimos un proyecto Web















Y al proyecto le pondremos como nombre SistemaVentasHibernateSpring y como servidor seleccionamos el Apache Tomcat














3.2. Añadiendo Librerías

Al proyecto debemos de agregar las librerías propias del Netbeans como son

  • Hibernate JPA
  • Spring Framework 3.0.2.
  • MySQL JDBC Driver

Y debemos de agregar mas siguientes librerías extras al proyectos que lo pueden descargar de AQUI. Quedando el proyecto de la siguiente manera.
















3.3. Estructura de Paquetes

Debemos de crear paquetes en el proyecto. Para crear un paquete debemos de hacer clic derecho en el proyecto y luego ir a New --> Package
















Los paquetes que creamos serán los siguientes














Ahora explicaremos el porque de esta estructura.

  • com.hwongu.entity: En este paquete se encontraran todas las clases mapeadas de la base de datos. Las clases con todas sus relaciones.
  • com.hwongu.dao: Se crearan  interfaces donde se definirá los métodos que llamaran a la base de datos. Y también se creara una interfaz de la cual todas las interfaces de este paquete tendrán que heredar de ella.
  • com.hwongu.dao.impl: Se implementaran todos los métodos que se definieron en el paquete anterior.
  • com.hwongu.service: Se crearan  interfaces donde se definirá los métodos que llamaran a los métodos del paquete com.hwongu.dao. Y también se creara una interfaz de la cual todas las interfaces de este paquete tendrán que heredar de ella.
  • com.hwongu.service.impl: Se implementaran todos los métodos que se definieron en el paquete anterior.

Se usaran interfaces debido a que Spring se encargará de proporcionarnos una instancia de una clase que implemente dichas interfaces. La estructura sera el siguiente por cada DAO habrá un SERVICE.

3.4. Archivo archivo applicationContext.xml

Spring necesita de un archivo de configuración básico en formato XML donde se añadirán todos los objectos que deberán existir en la aplicación al inicializarse la misma. Ademas especifica otros parámetros como el tipo de conexión a usar, si se debe mostrar sentencias SQL al momento de ejecutar el código, entre otras configuraciones. Este archivo lo guardaremos dentro de nuestra carpeta WEB-INF de nuestro proyecto. Para eso hacemos clic derecho en la carpeta WEB-INF y seleccionamos la opcion de New->XML Document , si no lo encuentran deben de entrar a la opcion New->Other y buscar este tipo de archivo (XML Document)















Al archivo le pondremos como nombre applicationContext.xml y ademas tenemos que tener en cuenta la siguente arquitectura del JPA:













  • La clase javax.persistence.EntityManagerFactory nos ayuda a crear objetos de EntityManager utilizando el patrón de diseño del Factory (fábrica).
  • La clase javax.persistence.EntityManager es la interfaz principal de JPA utilizada para la persistencia de las aplicaciones. Cada EntityManager puede realizar operaciones CRUD (Create, Read, Update, Delete) sobre un conjunto de objetos persistentes.
  • La clase javax.persistence.Entity es una anotación Java que se coloca a nivel de clases Java serializables y que cada objeto de una de estas clases anotadas representa un registro de una base de datos.
  • Cada instancia de EntityManager tiene una relación de uno a uno con una instancia de javax.persistence.EntityTransaction, permite operaciones sobre datos persistentes de manera que agrupados formen una unidad de trabajo transaccional, en el que todo el grupo sincroniza su estado de persistencia en la base de datos o todos fallan en el intento, en caso de fallo, la base de datos quedará con su estado original. Maneja el concepto de todos o ninguno para mantener la integridad de los datos.

Y porque comence explicando la arquitectura JPA? Debido a que en el archivo que hemos creado debemos de especificar los valores para el EntityManager. Por ejemplo en este archivo agregaremos los valores de que dataSource se debe usar (conexión a base de datos), si deseamos mostrar las sentencias SQL (showSQL) que en este caso es TRUE, quien es el proveedor de base de datos (database) que en este caso es MYSQL.


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

 <property name="dataSource" ref="dataSource" />

 <property name="jpaVendorAdapter">

  <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">

    <property name="database" value="MYSQL" />

    <property name="showSql" value="true" />

   </bean>

  </property>

</bean>


Pero ustedes se preguntaran en donde especifico la ubicación de mi base de datos, el usuario con el cual me conecto. Pues en este mismo archivos debemos de agregar otras especificaciones como las siguientes.


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  <property name="driverClassName" value="com.mysql.jdbc.Driver" />

  <property name="url" value="jdbc:mysql://localhost:3306/sysventas" />

  <property name="username" value="root" />

  <property name="password" value="mysql" />

</bean>

Solo se debe de cambiar los valores(values) de las propiedades (property)

  • "driverClassName" que viene a ser el driver de conexion de base de datos que vamos a utilizar
  • "url" que es la ubicación de nuestra base de datos
  • "username" con que usuario nos vamos a conectar a la base de datos
  • "password" la clave del usuario de mi base de datos

Y ahora como ustedes saben las actualizaciones hacia la base de datos se debe de hacer bajo una transacción, anteriormente nosotros creábamos la transacción y teníamos que verificar que si no había errores y recién hacíamos el commit o el rollback según sea el caso. Pues ahora con hibernate y spring nos ahorramos todo este trabajo gracias a una anotación que debemos de poner en este mismo archivo, esta anotación o propiedad se le conoce como el tx:annotation-driven que va a ser el encargado de procesar todos los beans que tengan la anotación @Transactional y envolverá en un proxies todas ellas para iniciar una transacción con el transactionManager (anteriormente configurado) y le van a dar commit/rollback al final del método. Hay que tener en cuenta que si usamos configuración de transacciones basada en anotaciones, solo se necesitara tener un única PlatformTransactionManager definido en el applicationContext. Y el codigo seria el siguiente:


<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

  <property name="entityManagerFactory" ref="entityManagerFactory" />

</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

Y una ultima configuración que debemos de hacer, es decirle a Hibernate y Spring en que paquete se encuentran nuestras clases


<context:component-scan base-package="com.hwongu" />

El archivo al final debería quedar de la siguiente manera


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />



    <bean id="entityManagerFactory"

        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="jpaVendorAdapter">

            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">

                <property name="database" value="MYSQL" />

                <property name="showSql" value="true" />

            </bean>

        </property>

    </bean>



    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <property name="url" value="jdbc:mysql://localhost:3306/sysventas" />

        <property name="username" value="root" />

        <property name="password" value="mysql" />

    </bean>





    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

        <property name="entityManagerFactory" ref="entityManagerFactory" />

    </bean>



    <tx:annotation-driven transaction-manager="transactionManager" />

    <context:component-scan base-package="com.hwongu" />

</beans>


Y si lo desean ver en colores acá les paso la imagen














Y acá acabamos estar parte del tutorial, muy pronto tendremos la tercera parte, no desesperen :)

2 comentarios:

una consulta... donde esta el link de para descargar las librerias ???

Hola ahí en el tutorial dice el link de descarga :)