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

Servlet, Connection y la con.. eccion

Estas en el tema de Servlet, Connection y la con.. eccion en el foro de Java en Foros del Web. Hola, tengo un problema con las conecciones al base de datos. (voy a poner toda la cantidad de info) Primero, estoy ocupando DataSources, para obtener ...
  #1 (permalink)  
Antiguo 10/12/2004, 09:07
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 2 meses
Puntos: 0
Servlet, Connection y la con.. eccion

Hola, tengo un problema con las conecciones al base de datos.
(voy a poner toda la cantidad de info)

Primero, estoy ocupando DataSources, para obtener una coneccion hago:

public class SS
extends HttpServlet {
private Connection conn = null;
...

public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:");
DataSource ds = (DataSource) envCtx.lookup("MySqlDS");
conn = ds.getConnection();
System.out.println(" Abriendo " + conn);
....
}

he hice el siguiente experimento:
conn1 : Conección de primera carga del Servlet
conn2 : Conección de segundo carga del Servlet

Cargar servlet (Crear conn1 )
Imprime :Abriendo org.jboss.resource.adapter.jdbc.WrappedConnection@ 834af6
Hacer select sobre conn1 (lo hace bien)
Pausar servlet Thread.sleep(7000) //7 segundos

Cargar servlet (Crear conn2)
Imprime: Abriendo org.jboss.resource.adapter.jdbc.WrappedConnection@ 1ae81ab

Hacer select sobre conn2 (lo hace bien)
conn2.close()
Cerrando org.jboss.resource.adapter.jdbc.WrappedConnection@ 1ae81ab


Termina pausa de 7 segundos
conn1.close()

En la última linea me da error, diciéndome la siguiente exception :
java.sql.SQLException: Connection handle has been closed and is unusable

Cerrando org.jboss.resource.adapter.jdbc.WrappedConnection@ 1ae81ab

****
O sea, el segundo servlet cierra conn2, y cuando el Primer servlet quiere cerra su conección (conn1), trata de hacerlo con la última conexión creada (conn2 en este caso).

Como puedo hacer para diferenciar estas conecciones???



datos anexos que pueden servir
Archivo xml
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/baseDeDatos</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>x</user-name>
<password>y</password>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
</local-tx-datasource>
</datasources>

web.xml
....
<resource-ref>
<description>
Devuelve desde el pool de conecciones para mysql
</description>
<res-ref-name>jdbc/DefaultDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
  #2 (permalink)  
Antiguo 10/12/2004, 12:09
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 9 meses
Puntos: 10
Puede ser debido a que el objeto Connection lo tienes declarado en forma global, y los Servlets todos comparten las variables globales, pues es una sola instancia del Servlet en memoria a la que acceden todos los cleintes, jamas debes hacer ese tipo de declaraciones en un Servlets, pq dos usuarios concurrentes estaran haciendo uso del mismo flujo de conexion.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 10/12/2004, 15:19
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 2 meses
Puntos: 0
Obviamente era eso, gracias

Además tenia la session global y cuando un usuario cerraba, todas las sesiones se cerraban. Ahora me río pero en su momento me urgí.
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 06:08.