Skip to content

20. Estudio de caso – versión 2

Ahora presentamos la versión final de nuestra aplicación:

El nuevo proyecto de NetBeans [pam-02] se obtiene al copiar el proyecto [pam-01]:

  • en [1], se copia el nuevo proyecto
  • a [2], se le da nombre al nuevo proyecto como [pam-02] y se especifica su carpeta
  • en [3], el nuevo proyecto [pam-02]

Para «conectar» la capa real [metier] a la capa web que hemos construido, hay que hacer tres cosas:

  1. eliminar la capa simulada [metier] que habíamos creado
  2. configurar Spring para que instancie la capa real [metier] que se encuentra en el archivo [pam-spring-metier-dao-jpa-hibernate.jar].
  3. agregar al proyecto todos los archivos necesarios (Spring, Hibernate, JPA, controlador JDBC de MySQL).

El archivo de configuración de Spring [WEB-INF/applicationContext.xml] queda así:


<?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: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">
  
  <!-- capas de aplicación -->
 
<!-- web -->
  <bean id="config" class="web.Config" init-method="init">
    <property name="metier" ref="metier"/>
  </bean>
  <!-- negocio -->
  <bean id="metier" class="metier.Metier">
    <property name="employeDao" ref="employeDao"/>
    <property name="cotisationDao" ref="cotisationDao"/>  
  </bean>
  <!-- DAO -->
  <bean id="employeDao" class="dao.EmployeDao" />
  <bean id="indemniteDao" class="dao.IndemniteDao" />
  <bean id="cotisationDao" class="dao.CotisationDao" />
  
  <!-- configuración JPA -->
  <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="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
      </bean>
    </property>
    <property name="loadTimeWeaver">
      <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
  </bean>
  
  <!-- la fuente de datos DBCP -->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="URL" value="jdbc:mysql://localhost:3306/dbpam_hibernate" />
    <property name="username" value="root" />
    <property name="password" value="" />
  </bean>
  
  <!-- el administrador de transacciones -->
  <tx:annotation-driven transaction-manager="txManager" />
  <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>
  
  <!-- traducción de excepciones -->
  <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
  
  <!-- persistencia -->
  <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
  
</beans>

Las líneas 36 a 41 configuran el acceso a la base de datos.

La incorporación de las nuevas bibliotecas (Spring, Hibernate, JPA, controlador JDBC de MySQL) se realiza desde la carpeta [lib] [2]. Se toma la carpeta completa. Hay varias decenas de archivos .jar que se deben agregar a [1]:

Fue bastante difícil armar esta biblioteca porque estos marcos de trabajo a veces usan los mismos archivos. Por lo tanto, hay que eliminar los duplicados. Estos archivos se han reunido en la carpeta [lib] [2] dentro del archivo de ejemplos de este documento para que el lector no tenga que reconstruir esta biblioteca por su cuenta.

Eso es todo. La nueva aplicación [pam-02] ahora funcionará con la SGBD. Aquí hay una captura de pantalla de un cálculo de salario:

 

En esta ocasión, el salario calculado es el salario real y no el salario ficticio de la versión 1. Se invita al lector a probar la nueva aplicación.