Patrones de diseño para Datasource

95 views
Skip to first unread message

jcatalan

unread,
Mar 23, 2009, 6:53:23 PM3/23/09
to jug.cl
Hola,

La consulta de hoy tiene que ver con un problema de gestion de
aperturas y cierre de una conexion de bd a traves de un datasource. Se
me ocurrio implementar un patron Singleton para este proposito pero
quede con algunas dudas. Si pudieran enviar algun link donde pueda ver
un buen ejemplo ó talvez recomendar otro patron .... para los DAO
quiero implementar un Factory DAO.

De antemano gracias.

Jaime.

Danijel Arsenovski

unread,
Mar 23, 2009, 11:03:26 PM3/23/09
to ju...@googlegroups.com

No estoy muy seguro donde quieres llegar, la problemática parece bastante común… Entonces es más fácil aprovecharse de alguna solución open source, por ejemplo Spring.

Revisa también esta librería de apache:
http://commons.apache.org/dbcp/

Lo que se refiere a los patrones, estos dos te podrían llegar ser utiles:
http://martinfowler.com/eaaCatalog/unitOfWork.html
http://www.hibernate.org/43.html

 Saludos,

 Danijel Arsenovski



From: jcatalan <jaime.c...@gmail.com>
To: jug.cl <ju...@googlegroups.com>
Sent: Monday, March 23, 2009 3:53:23 PM
Subject: Patrones de diseño para Datasource

Ariel Alejandro Aguayo Bascu~an

unread,
Mar 23, 2009, 11:13:53 PM3/23/09
to ju...@googlegroups.com
On Mon, 23 Mar 2009, Danijel Arsenovski wrote:

Exacto.. Lo mejor es aprovechar cosas como Spring para implementar DAO y
algun framework relacionado con persistencia como Hibernate/JPA, iBatis o
Spring JDBC/Templates. Para datasources commons-dbcp, c3p0 o alguna
implementacion que provea el driver JDBC (si es que existe).

> No estoy
> muy seguro donde quieres llegar, la problemática parece bastante comúnÿÿ
----
Ariel Aguayo B. (arag...@dcc.uchile.cl)

"Vale la pena morir por todo aquello sin lo cual no vale la pena vivir..."
Salvador Allende.

Jaime Catalan

unread,
Mar 23, 2009, 11:48:08 PM3/23/09
to ju...@googlegroups.com
A esta altura no puedo incorporar esos frameworks en el proyecto. Estoy en busca de un buen ejemplo de esta practica (Singleton) y que ojala abarque los DAO's. Pero lo medular es la apertura del datasource.
--
Jaime Catalán.
jaime.c...@gmail.com
Móvil: 82946507

Luis Arce

unread,
Mar 24, 2009, 8:25:00 AM3/24/09
to ju...@googlegroups.com
Otra solución seria EJBQL usando EJB3 con toplink essentials.
Saludos



Date: Mon, 23 Mar 2009 23:48:08 -0400
Subject: Re: Re: Patrones de diseño para Datasource
From: jaime.c...@gmail.com
To: ju...@googlegroups.com

El nuevo Messenger es más personalizable que nunca ¡Conócelo y consigue el tuyo!

Jose Coronel

unread,
Mar 24, 2009, 8:45:57 AM3/24/09
to ju...@googlegroups.com
Tambien creo que una buena opcion para tu caso es usar DBCP.

Aqui tienes un ejemplo que te puede servir

http://www.freshblurbs.com/jakarta-commons-dbcp-tutorial


Saludos


José Coronel

Danijel Arsenovski

unread,
Mar 24, 2009, 10:16:27 AM3/24/09
to ju...@googlegroups.com

>A esta altura no puedo incorporar esos frameworks en el proyecto.

commons-dbcp por ejemplo es una libreria, no un framework, muy sencillo incorporar...


>Estoy en busca de un buen ejemplo de esta practica (Singleton)

Pke insistes en Singleton? Típicamente al trabajar con jdbc, manejas el concepto de "pool" de conexiones, por razones de rendimiento y escalabilidad. Ahora, posiblemente pool podrías manejar como Singleton...



>y que ojala abarque los DAO's. 

>Pero lo medular es la apertura del datasource.

En general, al trabajar con jdbc directamente, esto lo manejaras programaticamente (conexion lo abres y la cierras cada vez que la usas). Otra alternativa es implementar algo de tipo Open Session In View, aplicado a jdbc puro, pero no me parece tan sencillo: http://www.hibernate.org/43.html

Iber Alvarez

unread,
Mar 24, 2009, 11:02:00 AM3/24/09
to ju...@googlegroups.com

Quizas nuestro amigo simplemente quiera un ejemplo nada más, algo sencillo como:


Para obtener una conexion conexion:
...
...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
...
...

public Connection getConnection() throws DataBaseException{
       
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception e) {
            throw new DataBaseException("Error Obteniendo Driver MySQL", e.getCause());
        }
        String url = "jdbc:mysql://" + getIp() + ":" + getPort() + "/" + getSid();
        try {
            conn = DriverManager.getConnection(url, getUser(), getPassword());
        } catch (SQLException e) {
            throw new DataBaseException("Error Obteniendo Conexion MySQL", e.getCause());
        }
       
        return conn;
    }


Para cerrar la conexion:

    private void closeConn(Connection conn){
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                logger.error(e.getMessage(), e.getCause());  //Implementar Log4j
            }finally {
                conn = null;
            }
        }   
    }

El cierre de los otros objetos como ResultSet o PreparedStatement se hace de la misma manera que la cerrar la conexion.

Espero que te sirva.


Saludos,
Iber





De: Danijel Arsenovski <darse...@yahoo.com>
Para: ju...@googlegroups.com
Enviado: martes, 24 de marzo, 2009 10:16:27
Asunto: Re: Re: Patrones de diseño para Datasource

Jose Miguel Selman

unread,
Mar 24, 2009, 11:52:28 AM3/24/09
to ju...@googlegroups.com
Antes de preocuparse de abrir, cerrar y mantener las conexiones creo que, de todas maneras, es mejor usar un DataSource. ¿Qué contenedor estas usando? Muchos contenedores traen la posibilidad de crear data-sources out-of-the-box y resulta mejor ya que se traduce en una complicación menos para ti... 

Luis Arce

unread,
Mar 24, 2009, 12:15:06 PM3/24/09
to ju...@googlegroups.com
Oye pero estas usando JSE o JEE?

porque para levantar una conexion nativa en un JEE hace ratito que no se usa.
Saludos


From: jose....@gmail.com
To: ju...@googlegroups.com
Subject: Re: Patrones de diseño para Datasource
Date: Tue, 24 Mar 2009 11:52:28 -0400

Casi 50 razones para tener el nuevo Messenger. ¡Conócelas aquí y bájate el nuevo!

Jaime Catalan

unread,
Mar 24, 2009, 1:15:41 PM3/24/09
to ju...@googlegroups.com
Jose Miguel,

El contenedor es un WAS y si maneja datasource .... pero no se esta gestionando el cierre de la conexion en el programa. El numero maximo de conexiones concurrentes esta seteado en 10. Entonces de vez en cuando se está cayendo el WAS por exceder el numero de conexiones abiertas. EL sitio tiene alta demanda.

Jose Miguel Selman

unread,
Mar 24, 2009, 1:38:47 PM3/24/09
to ju...@googlegroups.com
¿Cuando se cae el WAS que mensaje arroja?

Lo más probable es que tengas un "leak" de conexiones en alguna parte... ¿Estas seguro de que estas devolviendo las conexiones al pool de forma correcta? ¿Lo haces dentro de los bloques "finally"?

Saludos, 
--
Jose M. Selman




Luis Arce

unread,
Mar 24, 2009, 6:54:02 PM3/24/09
to ju...@googlegroups.com
En tú configuración del server no tienes creado un polling?
Si no esta crealo, porque deberias hacer un lookup al jndi de la conexion de la base.
Despues de eso recien deberias pensar en usar un patron como service locator, el cual internamente utiliza el Singleton pero le agrega un cache.

http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html

Dada tu programacion deberia producirse el siguiente problema, si tienes 10 conexiones y haces 11 se debería producir una caida de tú servicio en forma aleatoria para 1 cliente, ahora bien eso es parte del tuning que debes hacer a tú app, porque podrias aumentar la cantidad de conexiones en la base de datos asi como tambien en el aplication server, obviamente olvidate del class.forName

Saludos


From: jose....@gmail.com
To: ju...@googlegroups.com
Subject: Re: Patrones de diseño para Datasource
Date: Tue, 24 Mar 2009 13:38:47 -0400

¿Sabías que el mejor amigo de Hotmail es Messenger? ¡Conoce las razones!

Sonic

unread,
Mar 24, 2009, 7:07:20 PM3/24/09
to ju...@googlegroups.com
Estimados amigos del JUG, he seguido los mails uno a uno y esto lo único que me demuestra es la tremenda comunidad que tenemos porque creo es necesario decirlo y en buen chileno "puta que han weao con el famoso patron de diseño para un datasource", eso, quiero felicitarlos a todos por la buena onda y estar siempre dispuestos a ayudar, me imagino que todos trabajan y eso ya es suficiente como para meterse en los problemas de otros.

Siga adelante la comunidad!!!!!

Saludos a todos




2009/3/24 Luis Arce <masterc...@hotmail.com>

Luis Arce

unread,
Mar 24, 2009, 7:46:35 PM3/24/09
to ju...@googlegroups.com
Todo sea por un shopito!!
saludos


Date: Tue, 24 Mar 2009 19:07:20 -0400
Subject: Re: Patron es de dise ño para Da tasource
From: so...@jug.cl
To: ju...@googlegroups.com

Jaime Catalan

unread,
Mar 24, 2009, 10:02:44 PM3/24/09
to ju...@googlegroups.com
Luis,

Justamente estoy implementando el ServiceLocator en el proyecto.

Gracias a todos por los aportes.

Luis Arce

unread,
Mar 25, 2009, 8:17:29 AM3/25/09
to ju...@googlegroups.com
Despues de Service Locator debes implementar Business Delegate para agrupar tus procesos de negocio y finalmente un Session Facade para independizar las capas aqui debes ayudarte de clases Helper.
Saludos


Date: Tue, 24 Mar 2009 22:02:44 -0400

Subject: Re: Patron es de dise ño para Da tasource
Reply all
Reply to author
Forward
0 new messages