Programando con Café

Programando con Café es el lugar de encuentro de todos sus tutoriales de programación que usted necesita en diferentes lenguajes de programación y base de datos

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 :)

viernes, mayo 20, 2011

Java - Aplicación Web, Hibernate con Spring Parte I - Creación de la Base de Datos


"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


En el siguiente tutorial vamos a desarrollar un carrito de compras o lo que seria un sistema de ventas usando el lenguaje de programación Java con los framework de Hibernate y Spring y como base de datos vamos a usar el MySQL 5.1. La base de datos que vamos a crear es una base de datos con fines didácticos, dado que nos faltaría crear mas tablas, como la tabla cliente, unidad de medida, etc pero si nos explayamos mucho nos quedaría muy largo el tutorial. Ademas en el ejemplo no se explica como disminuir un stock, debido a que eso siempre se les pide a los alumnos universitario que investiguen como hacerlo, pero si quieren una ayudita lo pueden hacer creando Triggers en la base de datos. La aplicación se desarrollara en un formato web usando el patrón de Modelo, Vista y Controlador. Espero que el ejemplo se de su utilidad.

2.1. JPA

Java Persistence API, más conocida por sus siglas JPA, es la API de persistencia desarrollada para la plataforma Java EE e La Java Persistence API, a veces referida como JPA, es un framework del lenguaje de programación Java que maneja datos relacionales en aplicaciones usando la Plataforma Java en sus ediciones Standard (Java SE) y Enterprise (Java EE).

2.2 Framework

Un Framework es un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular, que sirve como referencia para enfrentar y resolver nuevos problemas de índole similar. En el desarrollo de software, un framework es una estructura conceptual y tecnológica de soporte definida, normalmente con artefactos o módulos de software concretos, con base en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros programas para ayudar a desarrollar y unir los diferentes componentes de un proyecto.

2.3. Hibernate

Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java (y disponible también para .Net con el nombre de NHibernate) 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 o anotaciones en los beans de las entidades que permiten establecer estas relaciones, esta ultima forma de notaciones es la que usaremos en nuestro proyecto. Hibernate se usa para manipular las consultas hacia la base de datos y para que un proyecto en Hibernate sea exitoso se tiene que tener en cuenta una buena Base de Datos, ya que las clases que se generan con Hibernate están muy ligadas con la base de datos. Y si hacemos un cambio en la base de datos también deberíamos de hacerlo en nuestro mapeo de las entidades que creamos.

2.4. Spring

Spring es un framework muy usado con Hibernate para poder hacer la programación un poco mas limpia con Hibernate y es la encargada de manejar las transacciones.

3. DESARROLLO


En esta primera parte del tutorial vamos a crear la base de datos en MySQL 5.1., la base de datos se llamara BDTutorial

3.1. Diseño de la base de datos

La base de datos tendría las siguientes tablas: Venta, Producto, Marca, Categoria, SubCategoria y DetalleVenta. Se decidió crear mas tablas por el hecho de hacer un poco mas completo la programación y poder mostrar tips de programación durante el desarrollo del tutorial.












El script de la base de datos les adjunto en el siguiente LINK