Erro org.apache.commons.dbcp.SQLNestedException:Cannot get a connection, pool exhausted

Olá,

Estou com um problema ao tentar acesso ao meu banco de dados para executar um select. O erro é o apresentado abaixo. Já busquei na Internet alguma solução para o mesmo, porém sem sucesso…
Alguém já passou por este problema?

org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
	at br.com.gepla.conexao.Conexao.getConnection(Conexao.java:55)
	at br.com.gepla.dao.UsuarioGCADAO.getListarUsuariosCelula(UsuarioGCADAO.java:135)
	at br.com.gepla.controle.ManterUsuarioGCA.getListarUsuariosCelula(ManterUsuarioGCA.java:84)
	at br.com.gepla.action.CelulaAction.execute(CelulaAction.java:53)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:825)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
	... 35 more
Erro: Cannot get a connection, pool exhausted org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted

Olá,
Verifique se suas conexões ao banco estão sendo fechadas.

Rafael Roque

Olá,
Dá uma olhada aqui:

http://www.psuedoguru.com/roller/page/psuedoblog?entry=cannot_get_a_connection_pool

[quote=raf4ever]Olá,
Verifique se suas conexões ao banco estão sendo fechadas.

Rafael Roque[/quote]

Estão sim…

	public LinkedList getListarUsuariosCelula(Conexao conexao, int idCelula) throws Exception {

		PreparedStatement stmt = null;
		ResultSet rs = null;
		LinkedList list = new LinkedList();
		int[] idUsuarios = new int[15];


		try {
			stmt = conexao.getConnection().prepareStatement(STMT_USUARIO_CELULA);
			stmt.setInt(1, idCelula);
			rs = stmt.executeQuery();

			for (int i = 0; rs.next(); i++) {
				idUsuarios[i] = rs.getInt("idUsuario");
			}

			for (int i = 0; i < idUsuarios.length; i++) {
				stmt = conexao.getConnection().prepareStatement(STMT_USUARIO_CELULA_IDUSUARIOS);
				stmt.setInt(1, idUsuarios[i]);
				rs = stmt.executeQuery();

				while(rs.next()){
					UsuarioGCA  usuarioGCA = new UsuarioGCA();

					usuarioGCA.setNome(rs.getString("nome"));
					usuarioGCA.setChave(rs.getString("chave"));

					list.add(usuarioGCA);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		} finally {
			conexao.closeConnection(stmt, rs);
                                                conexao.close();

		}
		return list;
	}

[quote=adriano.ferranti]Olá,
Dá uma olhada aqui:

http://www.psuedoguru.com/roller/page/psuedoblog?entry=cannot_get_a_connection_pool[/quote]

Olá Adriano,

Dei uma olhada lá, alterei meu contexto, porém sem sucesso…
Continua dando o mesmo erro… não sei mais o que fazer…

<Context path="/gcd" reloadable="true" docBase="C:\eclipse\workspace\gcd" workDir="C:\eclipse\workspace\gcd\work">
	<Resource name="jdbc/gcd"  auth="Container" type="javax.sql.DataSource" scope="Shareable" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
	<ResourceParams name="jdbc/gcd">
		<parameter>
		<name>factory</name>
		<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
		</parameter>
		<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter> 
		<parameter><name>url</name><value>jdbc:mysql://172.18.3.289:3306/gcd</value></parameter> 
		<parameter><name>username</name><value>root</value></parameter> 
		<parameter><name>password</name><value>root</value></parameter> 
		<parameter><name>maxActive</name><value>20</value></parameter> 
		<parameter><name>maxIdle</name><value>10</value></parameter> 
		<parameter><name>maxWait</name><value>100</value></parameter> 
	</ResourceParams> 
	<Resource name="jdbc/gca"  auth="Container" type="javax.sql.DataSource" scope="Shareable" 
	removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
	<ResourceParams name="jdbc/gca">
		<parameter>
		<name>factory</name>
		<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
		</parameter>
		<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter> 
		<parameter><name>url</name><value>jdbc:mysql://172.18.3.289:3306/gca</value></parameter> 
		<parameter><name>username</name><value>root</value></parameter> 
		<parameter><name>password</name><value>root</value></parameter> 
		<parameter><name>maxActive</name><value>20</value></parameter> 
		<parameter><name>maxIdle</name><value>10</value></parameter> 
		<parameter><name>maxWait</name><value>100</value></parameter> 
	</ResourceParams> 
</Context>

Quando ocorre este erro? Logo de prima ou apos um grande uso da app?

Bem, este é apenas um serviço de uma aplicação.
Porém, como estou desenvolvendo e testando, paro todo o serviço do Tomcat, e vou direto a esta página. Ele executa o primeiro método do action e após o segundo dá este erro…