Pregunta sobre org.apache.commons.dbcp.BasicDataSource

Solucioné algunos errores relacionados con la forma en que estábamos usando BasicDataSource y, aunque entiendo parte de ello, todavía tengo algunas preguntas sin responder :)

Problema: La aplicación no pudo conectarse automáticamente a la base de datos después de un error de db.

La aplicación está usandoclase org.apache.commons.dbcp.BasicDataSource como un grupo de conexiones TCP para una conexión JDBC a Oracle db.

Reparar: Después de algunas investigaciones descubrí que en BasicDataSource testOnBorrow y testOnreturn no estaban configurados. Proporcioné la consulta de validación para probar las conexiones. Esto solucionó el problema

El número máximo de conexiones en el grupo se estableció en 1

Mi punto de vista: El grupo de conexiones entregaría una conexión a la aplicación. Lo que creo que estaba sucediendo era la aplicación.POR ARTE DE MAGIA devolvió la colección incorrecta a la agrupación cuando db se bloqueó. Ahora, dado que el Pool no sabe si es una mala conexión, entregará la misma conexión a la aplicación la próxima vez que la necesite, haciendo que la aplicación no se vuelva a conectar automáticamente a db.

Ahora, después de la solución ... cada vez que se devuelve una mala conexión al grupo de conexiones, se descartará y no se volverá a utilizar debido a la solución que hice anteriormente.

Ahora sé que BasicDataSource envuelve la conexión antes de dar a la aplicación, de modo que cada vez que la aplicación diga con.close ... BasicDataSource sabría que la conexión ya no se usa ... se encargará de devolver la conexión al grupo o descartar, etc.

Pregunta sin contestar: Sin embargo, lo que no entiendo es lo que hace que la aplicaciónPOR ARTE DE MAGIA devuelve la conexión al grupo de conexiones cuando está roto [Tenga en cuenta que no se llama al método con.close cuando la conexión se cierra de manera no correcta]. No hay forma de que BasicDataSource sepa que la conexión se cerró o la hay. ¿Alguien puede señalarme un código para eso?

¿Entiendo que entiendo por qué funcionó la solución?

Respuestas a la pregunta(2)

Su respuesta a la pregunta