Solucionado (ver solução)
Solucionado
(ver solução)
17
respostas

Problema com c3p0

Minha aplicação depois de um certo tempo no ar, começa a dar erro e não volta ao normal enquanto eu nao der um restart no tomcat. Apresentando no log o seguinte erro

16-Jan-2017 10:43:09.146 SEVERE [http-nio-80-exec-160] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Faces Servlet] in context with path [/SiteCsa] threw exception
 javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection

Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1431)
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:61)
    ... 58 more
Caused by: java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.InterruptedException
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:74)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:691)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:89)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
    ... 63 more
Caused by: java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1414)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
    ... 67 more

Não estou conseguindo detectar o que de fato é esse erro.

Meu c3p0 ta configurado do seguinte modo:

<property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider" />
            <property name="hibernate.c3p0.min_size" value="5" />
            <property name="hibernate.c3p0.max_size" value="150" />
            <property name="hibernate.c3p0.timeout" value="2000" />

            <property name="hibernate.c3p0.idle_test_period" value="3000" />
            <property name="hibernate.c3p0.max_statements" value="50" />

Alguém pode me ajudar, e me fornecer uma solução?

Grato!

17 respostas
solução!

Olá Diego, tudo bem?

Uma vez em um projeto que realizei tive alguns problemas de Exception na persistência.

O que aconteceu comigo é que o provider que eu estava usando não estava presente no .jar e desse forma ocorria uma Exception.

Eu consegui resolver o problema trocando a versão do jar para uma versão mais recente que era compatível com o provider que havia configurado.

Espero que essa informação ajude de alguma forma!

Abs

Rafael,

Eu vi em foruns dizendo que podia ser isso que vc disse, falando que resolveram colocando o jar o c3p0-0.9.2.1.jar mas esse jar eu ja tenho no meu projeto. O estranho é que minha aplicação funciona normal.. so q depois de algumas horas ele da esse erro.

Muito obrigado pela dica Rafael.

Olá Diego,

Interessante essa informação, não sou expert em relação ao jar c3p0, mas pela descrição me parece ser um problema de thread.

Talvez isso, esteja ocorrendo porque o pool está configurado para receber mais conexões do que seu servidor seja capaz de suportar, por exemplo no MySql teríamos 100 ou 151 dependendo da versão. (https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html)

Apenas como uma questão de teste, você conseguiria mudar esse parâmetro

<property name="hibernate.c3p0.max_size" value="150" />

Para um valor menor, por exemplo, 40? Se ele funcionar normalmente, essa será a provável razão da Exception, estamos configurando mais conexões do que o servidor por suportar.

Espero que dê certo!

Abs

Rafael,

Eu alterei pra 50 e em menor tempo estando no ar deu o mesmo erro novamente. Voce sabe qual outra coisa poderia ser?

Olá Diego,

Acredito que nesse caso uma vez que houve Exception com pool de 150 e 40 em tempos diferentes, que as conexões estão sendo mantidas abertas e não estão sendo encerradas. Em alguma parte do seu código deve ter um beginTransaction(). Tente verificar se ocorre algum fechamento dessa conexão que foi aberta, por exemplo entityManager.close(). Acredito que isso irá resolver seu problema.

Segue link comentando um pouco na documentação da Oracle: https://docs.jboss.org/hibernate/orm/3.6/quickstart/en-US/html/hibernate-gsg-tutorial-jpa.html

Espero que funcione!

Obs: Pode voltar o max-pool para 150

Abs

Bom dia Rafael,

Eu utilizo um filter na minha aplicação, conforme segue o codigo.

@WebFilter(servletNames ={"Faces Servlet"})
public class JPAFilter implements Filter{

    private EntityManagerFactory factory;

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        this.factory.close();
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        // CHEGADA
        EntityManager manager = this.factory.createEntityManager();

        request.setAttribute("EntityManager", manager);
        manager.getTransaction().begin();        

        // FACES SERVLET
        chain.doFilter(request,response);

        try {    

            // SAÍDA
            //System.out.println("comit");
            manager.getTransaction().commit();

        }catch(Exception e) {

            System.out.println("============== ERRO TRANSIÇÃO =================");

            if (manager.getTransaction().isActive()) 
            {
                //System.out.println("if active");
                manager.getTransaction().rollback();
                e.printStackTrace();
            }

        } finally {

            if(manager.isOpen() && manager != null)
            {
                //System.out.println("encerra");
                manager.close();

            }

        }

    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        this.factory = Persistence.createEntityManagerFactory("portalcsa");

    }

}

Você poderia me informa se eu fiz da maneira correta?

Olá Diego, tudo bem?

Me parece que a configuração está correta, a conexão está sendo fechada no bloco finally. Sinceramente no momento não tenho outra ideia do que pode estar causando esse problema, vou verificar se encontro alguma referência adicional.

Abs

Eu recebi o seguinte erro nos log.. será que tem alguma coisa haver?

18-Jan-2017 08:59:50.902 SEVERE [http-nio-80-exec-148] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [ControllerServlet] in context with path [/auth] threw exception [java.lang.ClassNotFoundException: logic.null] with root cause
 java.lang.ClassNotFoundException: logic.null
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at servlet.Controller.service(Controller.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Olá Diego,

Pela stack trace ele mostrou um ClassNotFounfException:logic.null, o que indicaria que a classe não está no Classpath, o estanho que ele comenta sobre uma classe logic, você teria algo assim em seu projeto? Com relação ao C3P0 ele não mostrou nada agora nessa stacktrace, o código passado seria apenas um trecho da stacktrace ou a Exception do C3P0 sumiu mesmo?

Como sugestão, tente dar um Clean no Tomcat e depois fazer um rebuild do projeto, se não der certo, você conseguiria encaminhar o código completo pelo github mesmo para que possamos ver o que pode ser?

Abs

Ele da esse erro nos logs e depois aparece aquele do c3p0. Eh que na verdade minha aplicaçao são 2 projetos.. 1 projeto só faz a autenticação e o outro é o portal. esse logic faz parte da autenticação,

Na autenticação eu tenho um pacote chamado logic e 2 classes, 1 chamada In e outra chamada BusinessLogic.

na In contem todo minha logica de autenticação e na BusinessLogic contem.

public interface BusinessLogic {

    void execute(HttpServletRequest request, HttpServletResponse response) throws Exception;

}

e tenho um pacote servlet que contem essa classe.

public class Controller extends HttpServlet {
    private static final long serialVersionUID = -3536697226341550502L;

    protected void service(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException, IOException {
        BusinessLogic logicObj;
        String logicClassName;
        Class<?> logicClass;

        try {
            logicClassName = "logic." + req.getParameter("log");
            logicClass = Class.forName(logicClassName);

            if(!BusinessLogic.class.isAssignableFrom(logicClass))
                throw new InvalidClassException(logicClassName);

            logicObj = (BusinessLogic)
                    logicClass.newInstance();
            logicObj.execute(req, resp);
        } catch(Exception e) {
            throw new ServletException(e);
        } finally {
            logicClassName = null;
            logicClass = null;
        }
    }
}

Esse projeto de autenticação eu recebi pronto da empresa para eu integrar com minha aplicação. O estranho que funciona td normal.. até um certo tempo depois começa a dar esses exceptions e não estou conseguindo identificar.

O projeto todo não posso repassar por causa da politica da empresa então só alguns trecho posso disponibilizar por exemplo esses que demonstrei.

Vc analisando tem outra sugestão do que poderia ser?

Olá Diego,

Na Exception havia o log do java.lang.ClassNotFoundException: logic.null, analisando o seu Controller temos o trecho:

logicClassName = "logic." + req.getParameter("log");
logicClass = Class.forName(logicClassName);

Me parece que o parâmetro log não está sendo passado para o controller, então teremos o null. Na linha de baixo o método estático forName tenta inicializar esta classe, mas se teremos null no lugar do parâmetro do log, o forName tentará inicializar a classe logic.null a qual não existe no ClassPath e essa seria a provável razão do java.lang.ClassNotFoundException: logic.null

Você conseguiria colocar um breakpoint no logicClassName = "logic." + req.getParameter("log"); e ir no modo debug para confirmar se de fato o parâmetro log não está sendo passado?

Com relação ao C3P0 infelizmente não consegui chegar a uma conclusão ainda, conversei com outros programadores que tem maior conhecimento na área de persistência e comentaram que a provável razão seria aquela que comentamos antes, da conexão não estar sendo fechada. Estava procurando algumas informações sobre a configuração do C3P0, encontrei no StackOverflow uma configuração de um usuário que diz conseguir consumir o mínimo de recursos possíveis, espero que essa informação ajude: http://stackoverflow.com/questions/12507021/best-configuration-of-c3p0/12531444#12531444

Abs

Olá Rafael,

Eu resolvi a parte do logic.null que estava dando erro, vc estava correto, já fiz o ajuste! muito obrigado!.

Mas minha aplicação depois de um certo tempo ainda continua dando aquele erro.

Uma duvida, eu tenho um persistence.xml no src que configurei o c3p0 mas tenho configurado na minha aplicação o spring security que tem o context.xml com os dados de conexao do banco. Nesse context devo configurar tb c3p0 nele, talvez seja por isso que deve ta dando erro? acabando tendo algum conflito?

Olá Diego,

No caso, acredito que a melhor opção seria deixar o próprio Spring administrar essa questão de abertura e fechamento de conexões, o ideal é não nos preocuparmos com essa questão de infra.

Estou colocando abaixo, um exemplo de código que realizei uma vez:

servlet.xml

<bean id="entityManagerFactoryBean"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!--Isso faz com que não seja necessário a criação do  /META-INF/persistence.xml  -->
        <property name="packagesToScan" value="com.casadeshow.modelo" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            </props>
        </property>
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost/casadeshow" />
        <property name="username" value="root" />
        <property name="password" value="" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactoryBean" />
    </bean>

Dao

@Repository
public class EventoDaoImpl implements EventoDao{


@PersistenceContext
private EntityManager manager;

}

Espero que ajude!

Abs

Olá Rafael,

O problema que não uso o spring, a infra da minha aplicação é para funcionar sem. Eu só utilizo o spring security separado para controlar os acessos em algumas paginas. Então não sei como adaptar desse jeito, pois aplicação completa no DAO eu envio a abertura de conexao do filtro e executo as coisas e não tenho mais tempo de desenvolvimento dessa aplicação ela já esta no ar, só que preciso arrumar esse bug rsrs..

Olá Diego,

Entendo a situação, acredito que o ponto que esteja causando isso seja aquela questão de conexões que ainda estão sendo mantidas abertas, realmente não sei dizer o que poderá funcionar. Entrei na documentação do c3p0 e li alguns tópicos e vi três configurações que me chamou a atenção:

maxConnectionAge

Seconds, effectively a time to live. A Connection older than maxConnectionAge will be destroyed and purged from the pool. This differs from maxIdleTime in that it refers to absolute age. Even a Connection which has not been much idle will be purged from the pool if it exceeds maxConnectionAge. Zero means no maximum absolute age is enforced.

Se setarmos o maxConnectionAge pelo que entendo da documentação, uma conexão com um tempo maior do que esse valor que setarmos será destruída e removida do pool .

numHelperThreads

Default: 3

c3p0 is very asynchronous. Slow JDBC operations are generally performed by helper threads that don't hold contended locks. Spreading these operations over multiple threads can significantly improve performance by allowing multiple operations to be performed simultaneously.

Pelo que entendo da documentação, ao aumentar o valor do numHelperThreads para um valor maior que o padrão (3), teremos mais Threads atuando e teremos uma performance melhor o que pode impactar na questão das conexões disponíveis aos usuários.

checkoutTimeout

Default: 0

The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted. Zero means wait indefinitely. Setting any positive value will cause the getConnection() call to time-out and break with an SQLException after the specified number of milliseconds.

Pelo que entendo da documentação ao deixar esse parâmetro com o valor padrão 0, nós estaremos forçando a conexão de um novo cliente a esperar indefinidamente uma conexão em casa de exaustão dos pool.

Espero que isso ajude!

Abs

Muito obrigado por todo seu suporte Rafael.

Pelo que eu andei analisando e pesquisando e uns amigos falaram que pode ser isso. É que tenho um persistence.xml do meu jpa configurado com o c3p0. E esta funcionando normal. E tenho mais uma configuraçao do spring security conforme segue:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="AplicacaoDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
        <property name="jndiName">
            <value>java:comp/env/jdbc/Aplicacao</value>
        </property>
    </bean>     
</beans>

web.xml

 <resource-ref>
    <description>DataSource Aplicacao</description>
    <res-ref-name>jdbc/Aplicacao</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            /WEB-INF/applicationContext.xml
            /WEB-INF/applicationContext-security.xml
    </param-value>
  </context-param>

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

context.xml

<?xml version="1.0" encoding="UTF-8"?>
    <Context reloadable="true">
    <Resource name="jdbc/Aplicacao" auth="Container" type="javax.sql.DataSource"
        maxActive="100" 
        madIdle="30" 
        maxWait="10000" 
        username="root" 
        password="root" 
        driverClassName="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://localhost:3306/root"
        />
</Context>

O erro que continua dando depois de um tempo é

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)


Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1431)
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:61)
    ... 58 more
Caused by: java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.InterruptedException
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:74)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:691)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:89)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
    ... 63 more
Caused by: java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1414)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
    ... 67 more

Pelo escrito estou entendendo que esta dando erro no spring security at org.springframework.security. causado por c3p0. Que é sobre a configuração de conexão que vc me explicou.

O que vc acha? esta correto minha analisa?

Na internet eu busquei para colocar o c3p0 no spring security assim eu deixaria com a mesma configuração do meu JPA. Mas pesquisando o pessoal disse que era para eu alterar meu context.xml colocando esses 2 parametros

type="com.mchange.v2.c3p0.ComboPooledDataSource"                    
factory="org.apache.naming.factory.BeanFactory"

Só que após eu fazer isso, começa a dar erro quando aplicação vai rodar

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AplicacaoDataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NamingException: No set method found for property: username
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1422)

Pelo que eu entendi ta dando erro de username, mas o username esta correto no entanto que sem eu ter colocado aquelas 2 linhas minha aplicação roda normal.

Você poderia falar o que você acha sobre isso? ou como eu poderia configurar o c3p0 no spring security, pois na internet nao achei mais fontes.

Muito obrigado!

Olá Diego, tudo bem?

Acredito que a análise seja essa mesma. Andei pesquisando sobre essa Exception, e vi sugestões de colocar no Resource o seguinte comando:

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

Uma outra sugestão, você conseguiria colocar o jar do log4j em seu projeto para ver se ele mostra mais detalhes na stacktrace?

Espero que funcione!

Abs