Manejo de Pool Java SE
Publicado por Franklin (179 intervenciones) el 20/05/2020 00:29:19
Chicos Buenas tardes, el día de hoy vengo con una cosa que no le encuentro sentido / solución.
Actualmente desarrollo un pequeño sistema para la oficina donde trabajo, este sistema cuenta con un Pool con dbcp2 configurado así:
y Cada vez que necesito hacer una consulta utilizo:
hasta aquí no tengo problemas es solo un poco de contexto.
el problema viene pues al logearme (pasar la verificación de user/pass del sistema) se crean 3 conexiones las cuales no se cierran. He revisado el código y todos los metodos se estructuran de la misma manera.
Sé que son 3 porque he ido aumentando la cantidad de máximas conexiones por ordenador y queda siempre en 3.
Sé que cada vez que cierro mi variable Connection se vuelve al pool y este libera un cupo.
Sucede también que, una vez hecho el loggin se ejecutan múltiples hilos en simultáneos que obtienen diferentes estadísticas, puede ser que al ejecutarse todos al mismo tiempo el pool habilite estos 3 espacios ya que los requiere al mismo tiempo y luego queden abiertos pero disponibles ?
he Probado imprimir el nombre de la clase y el nombre del método cada vez que es llamado para hacer seguimiento de ello, a su vez imprimo la cantidad de conexiones en simultaneo que hay en ese momento.
y tras ejecutar todas estas búsquedas para mis estadísticas; al imprimir las conexiones activas me devuelve 0.
Quizás no me supe explicar con total claridad pero, es posible que al iniciar se requieran 3 conexiones del pool para manejar los diferentes hilos y al terminar todas estas 3 conexiones al pool quedan abiertas aunque solo se reutilice 1?, pregunta: ¿como cerraría las excedentes y mantenerme con solo 1.?
nota: he intentado colocar max 1 pero el sistema se queda colgado mientras que los hilos esperan se libere una entrada al pool.
nota2: he intentado cerrar las conexiones cada 10 segundos pero el pool mantiene estas 3 activas pero no conectadas.
Actualizo: estuve revisando un rato la red y vi que se puede implementar un servidor de conexiones pero si no me equivoco opciones como tomcat y glassfish están disponibles para Java EE y no SE
si estoy haciendo de una mala práctica agradezco la recomendación.
Actualmente desarrollo un pequeño sistema para la oficina donde trabajo, este sistema cuenta con un Pool con dbcp2 configurado así:
1
2
3
4
5
6
7
8
9
10
11
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUsername(user);
ds.setPassword(pass);
ds.setUrl(url);
ds.setInitialSize(1);
ds.setMaxTotal(10);
ds.setTestWhileIdle(true);
ds.setTimeBetweenEvictionRunsMillis(10000);
ds.setValidationQuery("select 1");
y Cada vez que necesito hacer una consulta utilizo:
1
2
try (Connection con = clase.getDS.getCon() ){
// Para cerrar la conexión una vez terminada la consulta
hasta aquí no tengo problemas es solo un poco de contexto.
el problema viene pues al logearme (pasar la verificación de user/pass del sistema) se crean 3 conexiones las cuales no se cierran. He revisado el código y todos los metodos se estructuran de la misma manera.
1
try (Connection con = clase.getDS.getCon() ){
Sé que son 3 porque he ido aumentando la cantidad de máximas conexiones por ordenador y queda siempre en 3.
Sé que cada vez que cierro mi variable Connection se vuelve al pool y este libera un cupo.
Sucede también que, una vez hecho el loggin se ejecutan múltiples hilos en simultáneos que obtienen diferentes estadísticas, puede ser que al ejecutarse todos al mismo tiempo el pool habilite estos 3 espacios ya que los requiere al mismo tiempo y luego queden abiertos pero disponibles ?
he Probado imprimir el nombre de la clase y el nombre del método cada vez que es llamado para hacer seguimiento de ello, a su vez imprimo la cantidad de conexiones en simultaneo que hay en ese momento.
y tras ejecutar todas estas búsquedas para mis estadísticas; al imprimir las conexiones activas me devuelve 0.
Quizás no me supe explicar con total claridad pero, es posible que al iniciar se requieran 3 conexiones del pool para manejar los diferentes hilos y al terminar todas estas 3 conexiones al pool quedan abiertas aunque solo se reutilice 1?, pregunta: ¿como cerraría las excedentes y mantenerme con solo 1.?
nota: he intentado colocar max 1 pero el sistema se queda colgado mientras que los hilos esperan se libere una entrada al pool.
nota2: he intentado cerrar las conexiones cada 10 segundos pero el pool mantiene estas 3 activas pero no conectadas.
Actualizo: estuve revisando un rato la red y vi que se puede implementar un servidor de conexiones pero si no me equivoco opciones como tomcat y glassfish están disponibles para Java EE y no SE
si estoy haciendo de una mala práctica agradezco la recomendación.
Valora esta pregunta


0