TiendaOnline Java EE

Recientemente se puso en contacto conmigo un lector preguntándome si era posible usar la Tienda Online en Java EE que publiqué hace tiempo con Tomcat y añadir la persistencia con Postgres en vez de con MySQL.

Yo le dije que no había trabajado con ninguno de los dos productos pero que debería de ser posible modificando el descriptor de despliegue propio del servidor de aplicaciones y añadiendo una nueva clase de persistencia para Postgres, dado que si recordamos la tienda online implementa un patrón DAO lo que hace que la persistencia se independiente.

Pues bien, el lector llamado José Cabrera no sólo logró hacer las modificaciones con éxito sino que me las pasó para que las publicara, un gesto muy amable por su parte. De esta manera todos podremos ver la riqueza de usar el patrón DAO y ver lo fácil que puede ser modificar la aplicación.

Así que yo ahora lo único que voy a hacer es transmitir lo que él me dio, todo el mérito es suyo y yo lo único que voy a hacer es ponerlo bonito.

Paso 1: Configuración de la base de datos

Lo primero que hay que hacer es crear la base de datos en Postgres y para ello necesitamos la configuración que nos ha dado José.

Paso 2: Configuración del proyecto en Netbeans

Desde el netbeans se cambia el servidor (IDE Netbeans 7.2.1)
Clic derecho sobre el proyecto
Pestaña RUN (Ejecutar) Se cambia el servidor (Apache Tomcat 7.0.27.0)

Se cambia el contenido de context.xml

ANTERIOR

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/" />

CAMBIAR POR

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/">
   <Resource name="jdbc/OnlineShop"
             auth="Container"
             type="javax.sql.DataSource"
             username="postgres"
             password="12345"
             driverClassName="org.postgresql.Driver"
             url="jdbc:postgresql://localhost:5432/bd_onlineshop"
             maxActive="8"
             maxIdle="4"/>
</Context>

Lo anterior crea un recurso que sera consumido por el web.xml

Paso 3: Configuración del web.xml

En web.xml se debe tener el siguiente fragmento

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
......
......
......

   <resource-ref>
       <res-ref-name>jdbc/OnlineShop</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
       <res-sharing-scope>Shareable</res-sharing-scope>
   </resource-ref>
</web-app>

Paso 4: Cambios en el código de la aplicación

Comentar que José ha hecho directamente las modificaciones sobre PersistenceBD, pero podría haber hecho una copia de la misma modificándola y añadir una posibilidad más a la clase PersistenceFactory para iniciar tener otra clase de persistencia.

En PersistenceBD

En el MÉTODO init
cambiar nameBD = historiales;
por     nameBD = «public»; //–>jocka
En postgres se utiliza esquemas y el esquema por defecto es el public.
Otra solucion seria crear un esquema con el mismo nombre de la base de
datos en ese canso no seria necesario realizar el remplazo anterior.

En el MÉTODO saveRequest
cambiar insert.setString(1, fechaHora);
por     insert.setTimestamp(1, Timestamp.valueOf(fechaHora)); //–>jocka

Debido a que se utiliza la clase Timestamp se debe importar la libreria
import java.sql.Timestamp;

En Tools

En el MÉTODO getDate cambiar

return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) +
"-" + cal.get(Calendar.DAY_OF_MONTH) + " "
               + hora[0] + ":" + cal.get(Calendar.MINUTE) + ":" +
cal.get(Calendar.SECOND);
por
     //Se modifica para anteponer los ceros a dia y mes con un digito

       String dia = cal.get(Calendar.DAY_OF_MONTH)+"";
       String mes = (cal.get(Calendar.MONTH) + 1)+"";

       dia = dia.length()==1?"0"+dia:dia;
       mes = mes.length()==1?"0"+mes:mes;

       return cal.get(Calendar.YEAR) + "-" + mes + "-" + dia + " "
               + hora[0] + ":" + cal.get(Calendar.MINUTE) + ":" +
cal.get(Calendar.SECOND);

 


Hasta aquí todo lo que me ha pasado José. Desde aquí le doy las gracias por compartir las modificaciones y espero que os hayan sido de ayuda.

Pin It on Pinterest

Share This