You are on page 1of 43

Struts + Spring +

Hibernate
MVC + Servicios
DAO Spring Struts Action Hibernate Struts View

Modelo General

Vista: Struts + JSP

Factory: Spring
Control: Struts Action’s

Servicios: DAO’s

Acceso a Datos: Hibernate


Configuración

JLPP

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Configuración de Proyecto
 Desde CVS
 Pregunte a su administrador de CVS
 Desde Cero
 Siguiente diapositiva

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto


(Librerias)
 Crear un nuevo proyecto en Eclipse
 Agregar las librerías requeridas al
directorio WebContent/WEB-INF/lib.
 Hibernate
 Struts
 Spring
 TLD’s comunes (consultar administrador)

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto


(Librerias)
 Recargar el proyecto
 Deberían aparecer los WebLibraries en el
mismo.

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Source)


 Agregar el sourcefolder WEB-INF/classes
al proyecto.
 Ver procedimiento.

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Spring)

 En la cartepa WEB-INF/classes crear un


archivo applicationContext.xml

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

applicationContext.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

</beans>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Spring)

 Abrir el descriptor de aplicación del


Proyecto y agregar el código de Spring.
<listener>
<listener-class>
edu.conalep.moroleon.common.spring.Decorator
</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Spring)

 La clase Decorator puede ser


reemplazada por la clase original de
Spring, pero Decorator lanza un mensaje
de error en caso de que este ocurra.

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Hibernate)

 Crear el paquete mapping donde se


colocaran los mapeos de Hibernate.
 Crear el archivo hibernate.properties en la
carpeta src.
 Crear los archivos de mapeo de Hibernate
necesarios.

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

hibernate.propeties

hibernate.connection.driver_class=driver_jdbc
hibernate.connection.url=url_odbc
hibernate.connection.username=usuario_base_de_datos
hibernate.connection.password=contraseña
hibernate.dialect=dialecto_hibernate
hibernate.show_sql=true

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del Proyecto (Hibernate +


Spring)
 En la carpeta WEB-INF/classes crear el
archivo hibernate.xml.
 En el archivo applicationContext.xml
incluir el archivo hibernate.xml
<import resource=“hibernate.xml” />

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

hibernate.xml (parte 1)

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:hibernate.properties</value>
</property>
</bean>

<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">


<property name="driverClassName" value="${hibernate.connection.driver_class}" />
<property name="url" value="${hibernate.connection.url}" />
<property name="username" value="${hibernate.connection.username}" />
<property name="password" value="${hibernate.connection.password}" />
</bean>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

hibernate.xml (parte 2)
<bean id="sf"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

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


<property name="mappingResources">
<list>
<value>xml’s de mapeo</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=dialecto_hibernate
hibernate.show_sql=true
</value>
</property>
</bean>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del proyecto (Struts)

 En la carpeta WEB-INF/classes crear un


archivo struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
</struts>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Creación del proyecto (Struts)

 En el descriptor de aplicación agregar el


filter de Struts.
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Configuración del Proyecto


DAO Spring Struts Action Hibernate Struts View

Prueba Inicial
 Arrancar el contexto para revisar si este
esta funcionando de manera adecuada.
 La configuración del proyecto esta
entonces completa.

Configuración del Proyecto


Los Mapeos
Hibernate
JLPP

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Consideraciones
 Los mapeos deberian estar en su propio
paquete llamado mapping.
 El modelo general de mapeo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="edu.conalep.moroleon.opd.mapping">

</hibernate-mapping>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Clases
 Los mapeos hibernate se crean a partir de
clases.
 Estas clases se definen como elementos
class dentro del mapeo.
 Toda clase debe tener un id.
 Las clases pueden tener varias
propiedades.

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Mapeo Básico de Clase

<class name=“Clase” table=“tabla”>


<id name=“id_de_clase” column=“id_de_tabla” type=“int|long”>
<generator class=“increment” />
</id>

<!-- El atributo type puede ser float, double, date, int, long o string -->
<property name=“propiedad” column=“columna” type=“int” />
<!-- Las propiedades string pueden llevar una longitud -->
<property name=“propiedad2” column=“columna2” type=“string” length=“12” />
<!-- Puede marcarse alguna propiedad como propiedad unica -->
<property name=“propiedad3” column=“columna3” type=“int” unique=“true” />
</class>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Mapeo de relaciones Uno a Varios


<class name=“Padre” table=“padre”>
<id name=“id” type=“long” column=“id_padre”>
<generator class=“increment” />
</id>

<set name=“hijos”>
<key column=“id_padre” />
<one-to-many class=“Hijo” />
</set>
</class>

<class name=“Hijo” table=“hijo”>


<id name=“id” type=“long” column=“id_padre”>
<generator class=“increment” />
</id>

<many-to-one name=“padre” column=“id_padre” class=“Padre” />


</class>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Mapeo de relaciones Uno a Uno


<class name=“Padre” table=“padre”>
<id name=“id” type=“long” column=“id_padre”>
<generator class=“increment” />
</id>

<one-to-one name=“hijo” class=“Hijo” />


</class>

<class name=“Hijo” table=“hijo”>


<id name=“id” type=“long” column=“id_padre”>
<generator class=“foreign”>
<param name=“property”>padre</param>
</generator>
</id>

<one-to-one name=“padre” class=“Padre” />


</class>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Mapeo de relaciones Varios a


Varios
<class name=“Libro” table=“libro”>
<id name=“id” type=“long” column=“id_libro”>
<generator class=“increment” />
</id>

<set name=“autores” table=“libro_autor”>


<key column=“id_libro” />
<many-to-many class=“Autor” />
</set>
</class>

<class name=“Autor” table=“autor”>


<id name=“id” type=“long” column=“id_autor”>
<generator class=“increment” />
</id>

<set name=“libros” table=“libro_autor” inverse=“true”>


<key column=“id_autor” />
<many-to-many class=“Libro” />
</set>
</class>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Mapeo de Herencia
<class name=“Padre” table=“padre”>
<id name=“id” type=“long” column=“id_padre”>
<generator class=“increment” />
</id>

<joined-subclass name=“Hijo1” table=“hijo1”>


<key column=“id_hijo1” />
<property … />
</joined-subclass>

<joined-subclass name=“Hijo2” table=“hijo2”>


<key column=“id_hijo2” />
</joined-subclass>
</class>

Acceso a Datos: Hibernate


DAO Spring Struts Action Hibernate Struts View

Generación de Base de Datos y


POJO’s
 Si el proyecto incluye un archivo
build.xml o build-hibernate.xml puede
utilizarse el target export-ddl para crear
la base de datos y gen-java para crear
los POJO’S.
 Por seguridad los POJO’s quedan en
otra carpeta con el nombre hibernate.

Acceso a Datos: Hibernate


Servicios

JLPP

Servicios: DAO’s
DAO Spring Struts Action Hibernate Struts View

Consideraciones
 Los servicios se localizan en un paquete
service o bien en paquetes services de
cada paquete de modulo.
 Son clases JAVA que implementan las
funcionalidades necesarias para abstraer
Hibernate de las capas superiores.

Servicios: DAO’s
DAO Spring Struts Action Hibernate Struts View

Modelo Básico de Servicio

 Un servicio es una interfaz que debería


implementar métodos para:
 Agregar datos
 Editar datos
 Eliminar datos
 Recuperar datos
 Recuperar un dato unico

Servicios: DAO’s
DAO Spring Struts Action Hibernate Struts View

Interfaz Básica de Servicio


public interface BasicDao {
public boolean agregar(Object o);
public boolean editar(Object o);
public boolean borrar(Object o);
//Buscar duplicados antes de agregar
public boolean hayRepetido(Object o);
//Buscar dependientes antes de borrar
public boolean hayDependiente(Object o);
public List cargar();
public List cargarUno(Serializable id);
public List cargarCondicion(String prop, Object val);
//Seter y Getter del SessionFactory de Hibernate
public void setSessionFactory(SessionFactry sf);
public SessionFactory getSessionFactory();
}

Servicios: DAO’s
DAO Spring Struts Action Hibernate Struts View

Implementación
 Los DAO’s pueden implementarse en
base a código puro de Hibernate o bien
utilizando HibernateTemplate, una clase
de Spring.
 Cuando una clase requiera
determinadas funciones extra estas
pueden agregarse en un Dao heredado.

Servicios: DAO’s
DAO Spring Struts Action Hibernate Struts View

Herencia Sugerida
Operaciones Triviales BasicDao
colocadas aquí

GenericDao SpecialDao

Métodos extra y
operaciones
especializadas, como
SpecificDao1 SpecificDao2
cargarLibrosDeAutor o
un eliminar diferente
podrían estar aqui

Servicios: DAO’s
Struts

JLPP

Vista: Struts + JSP Control: Struts Action’s


DAO Spring Struts Action Hibernate Struts View

Consideraciones
 Los actions deberían estar en el paquete
action o en el paquete action de cada
paquete de modulo.
 Los JSP’s que usan struts deberían estar
organizados en paquetes que representen
los modulos y los casos de uso.

Vista: Struts + JSP Control: Struts Action’s


DAO Spring Struts Action Hibernate Struts View

Struts + DAO’s
 Los Action de Struts y las JSP van a
seguir funcionando igual, salvo que las
operaciones con objetos Hibernate se van
a realizar por medio de DAO’s.
 Cada action debe agregar un geter y seter
para un DAO interno que realice las
operaciones.

Vista: Struts + JSP Control: Struts Action’s


DAO Spring Struts Action Hibernate Struts View

Cambios al struts.xml
 El atributo class de cada Action cargado y
configurado por Spring deberá de
corresponder con el nombre del bean que
lo crea.
<action name=“nombre” class=“el_bean”>
</action>

<bean id=“el_bean” />

Vista: Struts + JSP Control: Struts Action’s


Spring

JLPP

Factory: Spring
DAO Spring Struts Action Hibernate Struts View

Consideraciones
 Traten de poner nombres significativos a
los beans.
 Si son muchos beans utilizar archivos
separados y la etiqueta import.

Factory: Spring
DAO Spring Struts Action Hibernate Struts View

Descripción General
 Spring se encarga de instanciar objetos y
configurarlos en tiempo de ejecución.
 Crea objetos como el SessionFactory (o
Hfactory o Singleton) y los hace
accesibles de una manera sencilla.

Factory: Spring
DAO Spring Struts Action Hibernate Struts View

Ejemplo de Spring
<bean name=“un_dao” class=“clase_de_dao”>
<!-- Le configura el SessionFactory al dao -->
<property name=“sessionFactory” ref=“sf” />
</bean>

<!– Cada vez que se requiera el


action crea una nueva instancia -->
<bean name=“action_dao” class=“clase_action”
scope=“prototype”>
<!-- Y establece el dao para el action -->
<property name=“dao” ref=“un_dao” />
</bean>

Factory: Spring
DAO Spring Struts Action Hibernate Struts View

Implicaciones
 Solamente declarando geters y seters en
las clases y registrando los beans con
spring podemos usarlos con la certeza de
que estarán completamente configurados.

Factory: Spring

You might also like