Práticas de pool de conexão JDBC MySql para evitar o pool de conexão esgotado
Eu tenho um aplicativo da Web Java-JSF no GlassFish, no qual desejo usar o pool de conexão. Portanto, eu criei umapplication
feijão com escopo que serve comConnection
instâncias para outros beans:
public class DatabaseBean {
private DataSource myDataSource;
public DatabaseBean() {
try {
Context ctx = new InitialContext();
ecwinsDataSource = (DataSource) ctx.lookup("jdbc/myDataSource");
} catch (NamingException ex) {
ex.printStackTrace();
}
}
public Connection getConnection() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
Connection connection = myDataSource.getConnection();
System.out.println("Succesfully connected: " + connection);
//Sample: Succesfully connected: com.sun.gjc.spi.jdbc40.ConnectionHolder40@7fb213a5
return connection;
}
}
Dessa forma, o pool de conexões é preenchido muito rapidamente; depois de algumas navegação pelas visualizações 'relacionadas ao banco de dados', o aplicativo para com o seguinte:
RAR5117: Falha ao obter / criar conexão do conjunto de conexões [mysql_testPool]. Motivo: as conexões em uso são iguais ao tamanho máximo do pool e ao tempo de espera máximo expirado. Não é possível alocar mais conexões. RAR5114: Erro ao alocar a conexão: [Erro ao alocar uma conexão. Causa: As conexões em uso são iguais ao tamanho máximo do pool e ao tempo de espera máximo expirado. Não é possível alocar mais conexões.] Java.sql.SQLException: erro ao alocar uma conexão. Causa: As conexões em uso são iguais ao tamanho máximo do pool e ao tempo de espera máximo expirado. Não é possível alocar mais conexões.
Estou fechando conexões e outros recursos em todos os métodos. O aplicativo executa tudo bem com conexões independentes.
O que estou fazendo errado? Qualquer dica ou conselho seria apreciado.