Foros del Web » Programación para mayores de 30 ;) » Java »

Patrón Singlenton y conexión BD

Estas en el tema de Patrón Singlenton y conexión BD en el foro de Java en Foros del Web. Hola, Desde hace algunos días tengo una duda sobre el patrón singlenton y si es buena idea utilizarlo para manejar la forma en como llamo ...
  #1 (permalink)  
Antiguo 23/09/2011, 14:21
Avatar de gasoft  
Fecha de Ingreso: abril-2009
Mensajes: 68
Antigüedad: 15 años
Puntos: 3
Patrón Singlenton y conexión BD

Hola,

Desde hace algunos días tengo una duda sobre el patrón singlenton y si es buena idea utilizarlo para manejar la forma en como llamo cuando requiero realizar alguna transacción con la base de datos PostgreSQL. La duda está relacionada a; cómo se gestionan utilizando este patrón la conexiones que ya se dejaron de usar, es decir si no se cierran en ningún momento o si el Garbage Collector las recicla. Ya que como pueden ver en la clase no hay un método que la cierre algo como closeConexion() .

Gracias de antemano por los posibles aportes a esta duda que me embarga, adjunto el código de la clase.

Código JAVA:
Ver original
  1. public class bdS {
  2.  
  3.     //Instancia estatica de la conexion, sino uno llega a existir
  4.     private static Connection connection = null;
  5.  
  6.     /**
  7.      *
  8.      * @return Devuelve la instancia unica de Conexion
  9.      */
  10.     public static Connection getConexion() {
  11.         //Si la instancia no ha sido creado aun, se crea
  12.         if (bdS.connection == null) {
  13.             contruyendoConexion();
  14.         }
  15.         return bdS.connection;
  16.     }
  17.  
  18.     //Obtener las instancias de Conexion JDBC
  19.     private static void contruyendoConexion() {
  20.         try {
  21.             Class.forName("org.postgresql.Driver");
  22.             String url = "jdbc:postgresql://localhost:5432/bd";
  23.             String usuario = "postgres";
  24.             String clave = "passwd";
  25.             bdS.connection = DriverManager.getConnection(url, usuario, clave);
  26.         } catch (ClassNotFoundException e) {
  27.             System.out.println("ClassNotFoundException(contruyendoConexion)  : " + e.getMessage());
  28.             System.gc();
  29.         } catch (SQLException e) {
  30.             System.out.println("SQLException(contruyendoConexion) : " + e.getMessage());
  31.             System.gc();
  32.         } catch (Exception e) {
  33.             System.out.println(" Exception General (contruyendoConexion) : " + e.getMessage());
  34.             System.gc();
  35.         }
  36.     }
  37. }
  #2 (permalink)  
Antiguo 23/09/2011, 14:49
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Patrón Singlenton y conexión BD

Cita:
Desde hace algunos días tengo una duda sobre el patrón singlenton y si es buena idea utilizarlo para manejar la forma en como llamo cuando requiero realizar alguna transacción con la base de datos PostgreSQL. La duda está relacionada a; cómo se gestionan utilizando este patrón la conexiones que ya se dejaron de usar, es decir si no se cierran en ningún momento o si el Garbage Collector las recicla. Ya que como pueden ver en la clase no hay un método que la cierre algo como closeConexion() .
La idea del Singleton es que haya solamente una instancia de la clase en toda tu aplicación. En tu caso, no habrán "conexiones sin cerrar", sino, una sola conexión GLOBAL que usa toda tu aplicación y eso ya decides tu cuando cerrarla.
Si recoges tu objeto digamos de la siguiente manera:
Connection conn = bdS.getConexion();
Como conn es una conexión comun y corriente, puedes cerrarla asi:
conn.close();
  #3 (permalink)  
Antiguo 23/09/2011, 15:14
Avatar de gasoft  
Fecha de Ingreso: abril-2009
Mensajes: 68
Antigüedad: 15 años
Puntos: 3
Respuesta: Patrón Singlenton y conexión BD

Gracias Amigo Ronruby por tu respuesta,

En el caso de un escenario web cada que un usuario entre por ejemplo, entonces sera una conexión que se abrirá; si se conectan 1000 personas , 1000 conexiones se tendrán abiertas?

gracias por tu respuesta
  #4 (permalink)  
Antiguo 23/09/2011, 18:35
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Patrón Singlenton y conexión BD

En el caso de un entorno web, el contenedor, ej Tomcat, es el que se encarga de crear las instancias de los objetos, lo que significa que aun en un entorno web es posible aplicar el patron Singleton efectivamente con Java.
De todas maneras, es mejor usar un Pool de conexiones, seguro que ya estas al tanto del sacrificio que haces cuando tienes un Singleton (me refiero a performance)
  #5 (permalink)  
Antiguo 23/09/2011, 23:05
Avatar de gasoft  
Fecha de Ingreso: abril-2009
Mensajes: 68
Antigüedad: 15 años
Puntos: 3
Respuesta: Patrón Singlenton y conexión BD

Cita:
Iniciado por Ronruby Ver Mensaje
En el caso de un entorno web, el contenedor, ej Tomcat, es el que se encarga de crear las instancias de los objetos, lo que significa que aun en un entorno web es posible aplicar el patron Singleton efectivamente con Java.
De todas maneras, es mejor usar un Pool de conexiones, seguro que ya estas al tanto del sacrificio que haces cuando tienes un Singleton (me refiero a performance)
Hola,

Primero muchísimas gracias por tu información, la verdad no había investigado mucho sobre Pool de Conexiones, según lo que he leído ofrece un alto nivel de performance. Me surge una duda en todas las consultas en internet que he hecho modifican el web.xml y context.xml para el caso de aplicaciones web y la peticiones de Servlets; mi duda es si es necesario manejarlo de esta forma o puedo tener una clase que se encargue de esas conexiones sin necesidad de modificar esos dos archivos y si necesito alguna librería adicional como por ejemplo commons-dbcp.

Etiquetas: bd, jar, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.