
Pool de conexiones Jboss 7.x y WildFly 10 con PostgreSQL 9.x ¡CONEXIONES AGOTADAS!
Publicado por m93developer (2 intervenciones) el 03/03/2017 17:56:50
Buen día
De antemano pido disculpas si paso por alto alguna regla del foro
esto se debe a que me acabo de registrar y por tanto este es mi primer hilo, dicho es procedo.
Tecnologías Probadas
Sistemas Operativos:
Windows 7 Professional 64 Bits
Windows 10 Professional 64 Bits
GNU/Linux Debian Jessie 8.7 64 Bits
IDE:
Eclipse Neon
Verciones Java:
JDK 8
JDK 7
Bases de Datos:
PostgreSQL 9.4
Como el titulo dice "Pool de conexiones Jboss 7.x y WildFly 10 con PostgreSQL 9.x ¡CONEXIONES AGOTADAS!",
esto significa que aunque he logrado realizar el pool de conexiones como lo indican en los diferentes foros e incluso en la página web oficial de Jboss/WildFly
y que a demás el test indica que el pool se conecta correctamente a la base de datos, sigo teniendo un problema
El problema es el siguiente:
Tengo una aplicación sencilla que realiza acciones como registro, consulta, actualización y borrado osea, un CRUD,
cuando mi aplicación inicia y realizo una inserción de datos, estos datos se registran correctamente en la base de datos
y los demás acciones ya antes mencionadas también se realizan correctamente, PERO, con cada llamado a la base de datos queda una conexión en estado "IDLE", estas conexiones se suman hasta que el motor de base de datos arroja una excepción que indica que ya no hay más conexiones disponibles
Según entiendo, el pool de conexiones debe abrir cierta cantidad de conexiones y reutilizarlas cuantas veces sea necesario y cerrarlas en caso de ya no ser necesarias, pero en mi caso ni las reutiliza ni las cierra, ¿qué es lo que pasa?
los pool's de conexiones que tengo son los siguientes, uno para pruebas con java 7 y otro para java 8
Mi código java de prueba es el siguiente:
Las mismas consultas hechas montando la aplicación en un servidor TomEE con su respectivo pool de conexiones funciona sin problemas
pero en mi caso no es una opción implementar otro servidor
ya he probado muchas configuraciones pero siempre sucede lo mismo incluso en distintos sistemas operativos e incluso con otros motores de bases de datos como MySQL
algunos sugieren configurar las propiedades "Decrementer Class" y "Decrementer Properties" pero no está muy claro como hacerlo para PostgreSQL
De antemano pido disculpas si paso por alto alguna regla del foro
esto se debe a que me acabo de registrar y por tanto este es mi primer hilo, dicho es procedo.
Tecnologías Probadas
Sistemas Operativos:
Windows 7 Professional 64 Bits
Windows 10 Professional 64 Bits
GNU/Linux Debian Jessie 8.7 64 Bits
IDE:
Eclipse Neon
Verciones Java:
JDK 8
JDK 7
Bases de Datos:
PostgreSQL 9.4
Como el titulo dice "Pool de conexiones Jboss 7.x y WildFly 10 con PostgreSQL 9.x ¡CONEXIONES AGOTADAS!",
esto significa que aunque he logrado realizar el pool de conexiones como lo indican en los diferentes foros e incluso en la página web oficial de Jboss/WildFly
y que a demás el test indica que el pool se conecta correctamente a la base de datos, sigo teniendo un problema
El problema es el siguiente:
Tengo una aplicación sencilla que realiza acciones como registro, consulta, actualización y borrado osea, un CRUD,
cuando mi aplicación inicia y realizo una inserción de datos, estos datos se registran correctamente en la base de datos
y los demás acciones ya antes mencionadas también se realizan correctamente, PERO, con cada llamado a la base de datos queda una conexión en estado "IDLE", estas conexiones se suman hasta que el motor de base de datos arroja una excepción que indica que ya no hay más conexiones disponibles
Según entiendo, el pool de conexiones debe abrir cierta cantidad de conexiones y reutilizarlas cuantas veces sea necesario y cerrarlas en caso de ya no ser necesarias, pero en mi caso ni las reutiliza ni las cierra, ¿qué es lo que pasa?
los pool's de conexiones que tengo son los siguientes, uno para pruebas con java 7 y otro para java 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<datasource jta="true" jndi-name="java:/PoolPostgreSQLDB1J8" pool-name="PoolPostgreSQLDB1J8" enabled="true">
<connection-url>jdbc:postgresql://localhost:5432/DataBase1</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-9.4.1212.jre8.jar</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>admin</user-name>
<password>admin</password>
</security>
</datasource>
<datasource jta="true" jndi-name="java:/PoolPostgreSQLDB1J7" pool-name="PoolPostgreSQLDB1J7" enabled="true">
<connection-url>jdbc:postgresql://localhost:5432/DataBase1</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-9.4.1212.jre7.jar</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>admin</user-name>
<password>admin</password>
</security>
</datasource>
Mi código java de prueba es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package ejb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.sql.DataSource;
import org.jboss.logging.Logger;
import entidades.CatValor;
import map.CatValorMapper;
import utilidadesdatos.AbstractDB;
/**
* Session Bean implementation class Administracion
*/
@Stateless
@LocalBean
public class CatValorEJB extends AbstractDB implements CatValorEJBLocal {
@Resource(mappedName="java:/PoolPostgreSQLDB1J8")
private DataSource dataSource;
private static Logger logger = Logger.getLogger(CatValorEJB.class);
public CatValorEJB() { }
@Override
public List<CatValor> listarCatValors() {
ResultSet resultado = null;
PreparedStatement sentencia = null;
List<CatValor> listaValores = new ArrayList<CatValor>();
String consulta = "select cval_id, cval_descripcion, cval_valor, cval_parametro_cpar_id, cval_estado from cat_valor cv inner join cat_parametro on cpar_id = cval_parametro_cpar_id where 1=1 ";
try {
sentencia = dataSource.getConnection().prepareStatement(consulta, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
resultado = sentencia.executeQuery();
listaValores = consultarObjetos(resultado, CatValorMapper.CATVALOR);
} catch (SQLException e) {
logger.error("Error listarValores ", e);
} finally {
cerrarConexiones(dataSource, sentencia, resultado);
}
return listaValores;
}
}
public void cerrarConexiones(final DataSource datasource, final PreparedStatement sentencia, final ResultSet resultado) {
if (null != resultado) {
try {
resultado.close();
}
catch (final SQLException e) {
e.printStackTrace();
}
}
if (null != sentencia) {
try {
sentencia.close();
}
catch (final SQLException e) {
e.printStackTrace();
}
}
if (null != datasource) {
try {
datasource.getConnection().close();
}
catch (final SQLException e) {
e.printStackTrace();
}
}
}
Las mismas consultas hechas montando la aplicación en un servidor TomEE con su respectivo pool de conexiones funciona sin problemas
pero en mi caso no es una opción implementar otro servidor
ya he probado muchas configuraciones pero siempre sucede lo mismo incluso en distintos sistemas operativos e incluso con otros motores de bases de datos como MySQL
algunos sugieren configurar las propiedades "Decrementer Class" y "Decrementer Properties" pero no está muy claro como hacerlo para PostgreSQL
Valora esta pregunta


0