Olá Pessoal.
Primeiro, obrigado pelas dicas. Seguindo-as, utilizei o autoReconnect na string de conexão, e também estou utilizando agora o C3po.
após as configurações do c3po, consegui fazer funcionar. As configurações que usei foram:
cpds.setMinPoolSize(10);
cpds.setAcquireIncrement(4);
cpds.setMaxPoolSize(100);
cpds.setMaxIdleTime(30);
cpds.setIdleConnectionTestPeriod(60);
cpds.setBreakAfterAcquireFailure(false);
Porém, fiz alguns testes com o JMeter, onde é possível testar por exemplo o que aconteceria caso 500 usuários simultâneos tentassem acessar a aplicação. Bom, aí começam a surgir os problemas. O fato de o servidor recusar conexão uma vez que no pool defini um máximo de 100 e no mysql a variável max_user_connections está como 40 é entendível. O problema, é que executando o teste no Jmeter com 500 usuários, o servidor simplesmente tem de ser reiniciado, ou seja, ninguém consegue conectar mais (se eu deixar assim, minha aplicação está vulnerável a ataque Dos). rodo o comando show full processlist no banco e aparecem 40 conexões ativas…até que eu reinicie o servidor.
também queria que após um tempo de inatividade, a conexão fechasse. Mesmo eu definindo cpds.setMaxIdleTime(30), as conexões estão continuando ativas.
Ah, este é o erro que apresenta no log do Tomcat após os testes com JMeter e 500 usuários simultâneos:
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:639)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at ConectaBanco.obterConexao(ConectaBanco.java:67)
at PesquisarDAO.conectar(PesquisarDAO.java:35)
at PesquisarDAO.pesquisar(PesquisarDAO.java:53)
at Controlador.executarComando(Controlador.java:123)
at Controlador.doPost(Controlador.java:76)
at Controlador.doGet(Controlador.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@14ae5cd -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1404)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:594)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:514)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:707)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:634)
... 25 more