Hemos encontrado un error en el código anterior donde las conexiones no se cierran. Es una solución fácil, pero me pregunto cómo hacemos para probar que está solucionado. Existe la opción de usar un grupo de conexión o no. Para el uso de la agrupación, sería fácil agregar monitoreo para el grupo, pero cuando no se utiliza la agrupación de conexiones, ¿cómo rastreamos esas conexiones huérfanas no cerradas? ¿Es como cualquier otra pérdida de memoria?¿Cómo realizo un seguimiento de conexiones JDBC huérfanas que no están cerradas?
El error parece básicamente un error de cortar y pegar. Tenemos algunas clases que gestionan la conexión DB, por lo que se ve más o menos así:
OurDBConn conn1 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1);
}
/// and then later in the same method
OurDBConn conn2 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1); // NOTE Error: conn1 should be conn2
}
No sé por qué los codificadores anteriores no acaba de volver a utilizar la conexión original, pero eso es lo que es
(comenzar a editar/anexar)
Sí, el código de conexión es nuestro también y puedo usar las respuestas dadas.
Sin embargo, no creo que haya hecho la pregunta correcta, aunque las respuestas a continuación responden la pregunta que hice. No estoy seguro de qué es lo correcto de stackoverflow para hacer; haga otra pregunta, o edite esta?
Una de las preguntas que debería haber hecho es: ¿cómo se manifestarían estas conexiones huérfanas y no cerradas en el rendimiento del sistema? Además, dado que estos objetos de conexión existen solo dentro del alcance de un método determinado, ¿las conexiones no serían elegibles para la recolección de basura? Y luego, si se les aplica gc, ¿cuál es el efecto de las conexiones abiertas que se generan?
(final de edición)
Estaré mirando de cerca, tenemos un problema muy similar en varios de nuestros proyectos. – Tenner
Para que conste, necesitaría una muy buena razón para NO mover esto a una implementación de grupo de conexión madura como DBCP o C3PO, si tiene la oportunidad, ¿quizás debería considerar hacerlo? – teabot